Logo
Section 1 / 8

层——Docker中的构建块

层 - 通过将镜像组件拆分为更小的单元,加快构建和拉取镜像的过程。

导入

层——Docker中的构建块

层 - 通过将镜像组件拆分为更小的单元,加快构建和拉取镜像的过程。

镜像层

在上一章中,我们看到当拉取 Docker 的 hello-world 镜像时,它拉取了一个镜像层。hello-world 镜像非常小,因此 Docker 只拉取了一层。如果你拉取一个更大的镜像,比如 Nginx,你会看到类似这样的输出:

1venkateshs-air:~ venkateshachintalwar$ docker pull nginx 2Using the default tag: latest 3latest: Pulling from library/nginx 4b8f262c62ec6: Pull complete 5e9218e8f93b1: Pull complete 67acba7289aa3: Pull complete 7Digest: sha256:aeded0f2a861747f43a01cf1018cf9efe2bdd02afd57d2b11fcc7fcadc16ccd1

Docker 拉取了三个镜像层。如果你稍作思考就会发现:你只是要求 Docker 守护进程拉取一个名为 Nginx 的镜像,为什么却拉取了三层?

原因在于,每当 Docker 拉取一个镜像时,都会占用设备上的大量空间。如果你输入以下命令:

1venkateshs-air:~ venkateshachintalwar$ docker image ls nginx 2REPOSITORY TAG IMAGE ID CREATED SIZE 3nginx latest f949e7d76d63 8 days ago 126MB

可以看到,Nginx 镜像占用了 126MB 的空间。

如果每个镜像都是独立构建、不共享任何组件的,那么每个镜像都会像 .iso 文件一样占用完整内存,这显然效率很低。

由于每个镜像都是基于 Linux 内核构建的,它们通常具有某些共同的依赖项,这些依赖项可以被其他镜像复用。Docker 将这些共用的依赖打包成一个层级结构,这些结构就被称为“层”。

只有 RUN、COPY 和 ADD 这三条指令会创建层。其他指令只会生成临时的中间镜像,不会增加构建后的镜像大小。我们将在下一节详细说明这些指令的作用。

Docker 会缓存这些中间层,以加快镜像构建的速度。这一点我们将在接下来的课程中详细介绍。

在进入下一课之前,请尝试使用命令 $ sudo docker pull python:3.5 拉取一个 Python 3.5 的镜像,并观察 Docker 共拉取了多少层。

Docker 入门

Docker Run - 访问容器