Dockerfile內(nèi)容:
[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
根據(jù)Dockerfile制作鏡像并分析細(xì)節(jié):
[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)當(dāng)前目錄為/home/test/app-a
(2)構(gòu)建的基礎(chǔ)路徑以及文件
(3)運(yùn)行 docker build 命令,-t?將新鏡像命名為v1.17.20.03.p03/app-a,命令末尾的?.?指明 build context 為當(dāng)前目錄。Docker 默認(rèn)會(huì)從 build context 中查找 Dockerfile 文件,我們也可以通過(guò)?-f?參數(shù)指定 Dockerfile 的位置
(4)從這步開(kāi)始就是鏡像真正的構(gòu)建過(guò)程。 首先 Docker 將 build context 中的所有文件發(fā)送給 Docker daemon。build context 為鏡像構(gòu)建提供所需要的文件或目錄。Dockerfile 中的 ADD、COPY 等命令可以將 build context 中的文件添加到鏡像。此例中,build context 為當(dāng)前目錄?/home/test/app-a,該目錄下的所有文件和子目錄都會(huì)被發(fā)送給 Docker daemon。所以,使用 build context 就得小心了,不要將多余文件放到 build context,特別不要把?/、/usr?作為 build context,否則構(gòu)建過(guò)程會(huì)相當(dāng)緩慢甚至失敗。
(5)Step 1:執(zhí)行?FROM,將 10.62.55.202:5000/fakeapp:latest 作為 base 鏡像。ubuntu 鏡像 ID 為13f96805ca76。
(6)Step 2:執(zhí)行ADD,將pubsubability.json添加到/data,具體步驟為(6)--(11)
(7)添加文件成功后,將容器保存為鏡像,其 ID 為f536f015d39a。這一步底層使用的是類(lèi)似 docker commit 的命令
(8)刪除臨時(shí)容器f7074f54a62f。
(9)-(11)和(6) -- (8)類(lèi)似
(12) 鏡像構(gòu)建成功,ID為:d3d52935f6c2。
通過(guò)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,與構(gòu)建時(shí)的輸出一致。
在上面的構(gòu)建過(guò)程中,我們要特別注意指令A(yù)DD的執(zhí)行過(guò)程 (6)--(11)。Docker 會(huì)在啟動(dòng)的臨時(shí)容器中執(zhí)行操作,并通過(guò) commit 保存為新的鏡像。
查看分層結(jié)構(gòu):
v1.17.20.03.p03/app-a是通過(guò)在 base 鏡像的頂部添加一個(gè)新的鏡像層而得到的。
這個(gè)新鏡像層的內(nèi)容由ADD ./pubsubability.json /data和ADD ./session.json /data生成。這一點(diǎn)我們可以通過(guò)?docker history?命令驗(yàn)證。
[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?會(huì)顯示鏡像的構(gòu)建歷史,也就是 Dockerfile 的執(zhí)行過(guò)程。
v1.17.20.03.p03/app-a 與10.62.55.202:5000/fakeapp:latest鏡像相比,確實(shí)只是多了頂部的兩層 d3d52935f6c2和f536f015d39a,由ADD 命令創(chuàng)建。docker history 也向我們展示了鏡像的分層結(jié)構(gòu),每一層由上至下排列。