Dockerfile制作镜像

Dockerfile内容:

[root@paas-controller-2-2-0-78:/home/test/app-a]$ cat Dockerfile 

# Dockerfile

FROM 10.62.55.202:5000/fakeapp:latest

ADD ./pubsubability.json /data

ADD ./session.json /data

根据Dockerfile制作镜像并分析细节:

[root@paas-controller-2-2-0-78:/home/test/app-a]$ pwd (1)

/home/test/app-a

[root@paas-controller-2-2-0-78:/home/test/app-a]$ ls(2)

Dockerfile pubsubability.json session.json

[root@paas-controller-2-2-0-78:/home/test/app-a]$ docker build -t v1.17.20.03.p03/app-a .(3)

Sending build context to Docker daemon 15.36 kB(4)

Step 1 : FROM 10.62.55.202:5000/fakeapp:latest(5)

 ---> 13f96805ca76

Step 2 : ADD ./pubsubability.json /data(6) 

---> f536f015d39a(7)

Removing intermediate container f7074f54a62f(8)

Step 3 : ADD ./session.json /data(9) 

---> d3d52935f6c2(10)

Removing intermediate container 2ee66c46a922(11)

Successfully built d3d52935f6c2(12)

(1)当前目录为/home/test/app-a

(2)构建的基础路径以及文件

(3)运行 docker build 命令,-t 将新镜像命名为v1.17.20.03.p03/app-a,命令末尾的 . 指明 build context 为当前目录。Docker 默认会从 build context 中查找 Dockerfile 文件,我们也可以通过 -f 参数指定 Dockerfile 的位置

(4)从这步开始就是镜像真正的构建过程。 首先 Docker 将 build context 中的所有文件发送给 Docker daemon。build context 为镜像构建提供所需要的文件或目录。Dockerfile 中的 ADD、COPY 等命令可以将 build context 中的文件添加到镜像。此例中,build context 为当前目录 /home/test/app-a,该目录下的所有文件和子目录都会被发送给 Docker daemon。所以,使用 build context 就得小心了,不要将多余文件放到 build context,特别不要把 /、/usr 作为 build context,否则构建过程会相当缓慢甚至失败。

(5)Step 1:执行 FROM,将 10.62.55.202:5000/fakeapp:latest 作为 base 镜像。ubuntu 镜像 ID 为13f96805ca76。

(6)Step 2:执行ADD,将pubsubability.json添加到/data,具体步骤为(6)--(11)

(7)添加文件成功后,将容器保存为镜像,其 ID 为f536f015d39a。这一步底层使用的是类似 docker commit 的命令

(8)删除临时容器f7074f54a62f。

(9)-(11)和(6) -- (8)类似

(12) 镜像构建成功,ID为:d3d52935f6c2。

通过docker images 查看信息:

[root@paas-controller-2-2-0-78:/home/test/app-a]$ docker images |grep d3d52935f6c2

v1.17.20.03.p03/app-a      latest d3d52935f6c2     38 seconds ago      324.4 MB

镜像 ID 为 d3d52935f6c2,与构建时的输出一致。

在上面的构建过程中,我们要特别注意指令ADD的执行过程 (6)--(11)。Docker 会在启动的临时容器中执行操作,并通过 commit 保存为新的镜像。

查看分层结构:

v1.17.20.03.p03/app-a是通过在 base 镜像的顶部添加一个新的镜像层而得到的。

这个新镜像层的内容由ADD ./pubsubability.json /data和ADD ./session.json /data生成。这一点我们可以通过 docker history 命令验证。

[root@paas-controller-2-2-0-78:/home/test/app-a]$ docker history 10.62.55.202:5000/fakeapp:latest

IMAGE                   CREATED      CREATED BY                                              SIZE      COMMENT

13f96805ca76      11 weeks ago      /bin/sh -c #(nop) ENTRYPOINT ["/service/app"      0 B

                             11 weeks ago      /bin/sh -c #(nop) VOLUME [/core]                           0 B

                             11 weeks ago      /bin/sh -c #(nop) ADD file:26436c0d911f74d6aa     6.91 MB

                             11 weeks ago      /bin/sh -c #(nop) ADD file:ea2f496a6bd524e98f      3.518 kB

                             11 weeks ago      /bin/sh -c #(nop) ADD multi:ae9183f69c276aa8a     6.673 kB

                             11 weeks ago      /bin/sh -c mkdir -p data                                              0 B

                              11 weeks ago      /bin/sh -c mkdir -p service                                         0 B

                              11 weeks ago      /bin/sh -c #(nop) EXPOSE 8000/tcp                          0 B

                              11 weeks ago      /bin/sh -c #(nop) COPY file:ea2f496a6bd524e98      3.518 kB

                              11 weeks ago      /bin/sh -c #(nop) COPY multi:d374f7dc271db3cf      119.7 MB

                              11 weeks ago      /bin/sh -c #(nop) ENV LD_LIBRARY_PATH=/usr/l      0 B

                               3 years ago        /bin/sh -c #(nop) CMD [/bin/bash]                                0 B

                               292 years ago                                                                                         5.072 MB

                               292 years ago                                                                                         1.895 kB

                               292 years ago                                                                                         0 B

                               292 years ago                                                                                         194.5 kB

                               292 years ago                                                                                         192.5 MB

                               292 years ago                                                                                          0 B 

 -------------

[root@paas-controller-2-2-0-78:/home/test/app-a]$ docker history v1.17.20.03.p03/app-a

IMAGE               CREATED               CREATED BY                                                              SIZE          COMMENT

d3d52935f6c2      55 seconds ago      /bin/sh -c #(nop) ADD file:92005ce62161d91a90      4.98 kB 

 f536f015d39a      55 seconds ago      /bin/sh -c #(nop) ADD file:c74da06a6fc0b379d7       6.683 kB 

 13f96805ca76     11 weeks ago          /bin/sh -c #(nop) ENTRYPOINT ["/service/app"         0 B

                             11 weeks ago          /bin/sh -c #(nop) VOLUME [/core]                              0 B

                             11 weeks ago          /bin/sh -c #(nop) ADD file:26436c0d911f74d6aa        6.91 MB

                             11 weeks ago          /bin/sh -c #(nop) ADD file:ea2f496a6bd524e98f         3.518 kB

                             11 weeks ago          /bin/sh -c #(nop) ADD multi:ae9183f69c276aa8a        6.673 kB

                             11 weeks ago          /bin/sh -c mkdir -p data                                                 0 B

                             11 weeks ago          /bin/sh -c mkdir -p service                                            0 B    

                             11 weeks ago          /bin/sh -c #(nop) EXPOSE 8000/tcp                             0 B

                             11 weeks ago          /bin/sh -c #(nop) COPY file:ea2f496a6bd524e98          3.518 kB

                             11 weeks ago          /bin/sh -c #(nop) COPY multi:d374f7dc271db3cf          119.7 MB

                              11 weeks ago          /bin/sh -c #(nop) ENV LD_LIBRARY_PATH=/usr/l        0 B

                              3 years ago             /bin/sh -c #(nop) CMD [/bin/bash]                                  0 B

                              292 years ago                                                                                               5.072 MB

                              292 years ago                                                                                               1.895 kB

                              292 years ago                                                                                                0 B

                              292 years ago                                                                                                194.5 kB

                              292 years ago                                                                                                192.5 MB 

                              292 years ago                                                                                                0 B

----------------------------------------

docker history 会显示镜像的构建历史,也就是 Dockerfile 的执行过程。

v1.17.20.03.p03/app-a 与10.62.55.202:5000/fakeapp:latest镜像相比,确实只是多了顶部的两层 d3d52935f6c2和f536f015d39a,由ADD 命令创建。docker history 也向我们展示了镜像的分层结构,每一层由上至下排列。

你可能感兴趣的:(Dockerfile制作镜像)