005Docker學習__映象的快取特性
阿新 • • 發佈:2020-07-01
簡介
Docker 會快取已有映象的映象層,構建新映象時,如果某映象層已經存在,就直接使用,無需重新建立。
內容回顧
在【004Docker學習_Dockerfile_build命令構建docker映象】的例項中,使用Dockerfile 構建,以centos:centos7.4.1708
作為base images的新映象centos-vim-file,新映象中在base images映象層之上添加了一層映象ID為cc0a0d552187的新映象層。
在這裡我們依然使用centos:centos7.4.1708作為base images,來製作新的映象
例項一 1、修改【003Docker學習_Dockerfile_build命令構建docker映象】中Dockerfile的內容vim Dockerfile
Dockerfile檔案中的內容修改為
FROM centos:centos7.4.1708
RUN yum -y update && yum -y install vim
COPY testfile/
2、使用已修改後的Dockerfile,構建新的映象
[root@docker ~]# docker build -t centos-vim-file2 .
Sending build context to Docker daemon 50.18kB
Step 1/3 : FROM centos:centos7.4.1708
---> 9f266d35e02c
Step 2/3 : RUN yum -y update && yum -y install vim
---> Using cache
---> cc0a0d552187
Step 3/3 : COPY testfile /
---> ce043618c466
Successfully built ce043618c466
Successfully tagged centos-vim-file2:latest
- 確保 testfile 已存在,需要和Dockerfile在同級目錄下。
- 標號7....重點在這裡:之前已經執行過相同的 RUN 指令,這次直接使用快取中的映象層 cc0a0d552187。
- 標號8....執行 COPY 指令。其過程是啟動臨時容器,複製 testfile,提交新的映象層 ce043618c466,刪除臨時容器。
在 centos-vim-file映象上直接新增一層就得到了新的映象centos-vim-file2
從映象ID可以看出新建映象的前RUN層使用的映象層是【003Docker學習_Dockerfile_build命令構建docker映象】中新建映象中的映象
如果希望在構建映象時不使用快取,可以在docker build命令中加上--no-cache引數。
Dockerfile 中每一個指令都會建立一個映象層,上層是依賴於下層的。無論什麼時候,只要某一層發生變化,其上面所有層的快取都會失效。 也就是說,如果我們改變 Dockerfile 指令的執行順序,或者修改或新增指令,都會使快取失效。例項二 交換前面 RUN 和 COPY 的順序 1、修改本文例項一中Dockerfile的內容
vim Dockerfile
Dockerfile檔案中的內容修改為
FROM centos:centos7.4.1708
COPY testfile/
RUN yum -y update && yum -y install vim
2、使用已修改後的Dockerfile,構建新的映象
雖然在邏輯上這種改動對映象的內容沒有影響,但由於分層的結構特性,Docker 必須重建受影響的映象層。從上面的輸出可以看到生成了新的映象層 RUN ac63e20bfca1和COPY 42ad470ec5a1,快取已經失效。