Docker鏡像分層的注意點
通常我們在對程序進行Docker鏡像打包的時候總會有些困惑,到底是將最終的鏡像分層打包最后匯總成程序的鏡像(也就是一層一層的 From )合適,還是說直接將程序從Source code就打包出最終的鏡像更合適呢?其實這里面沒有說那個是對或錯的,要看程序包自身的情況做選擇。
Docker build的注意點
如果接觸過Docker,Docker build大家都清楚怎么用了,但是有幾個容易忽略的注意點:
-
Dockerfile開頭的 From 和 MAINTAINER 其實都是一層鏡像
-
如果 From 和 MAINTAINER 不同,就算是后面的命令語句相同也不會是相同的鏡像。如都是執行 RUN echo "hello world" >> test.txt ,如果 MAINTAINER 不同,則生成的這個語句的鏡像層將是不同的。
-
原理上如果每一層對應的父層不同,那怕執行的命令相同,Docker也會生成一層新的鏡像,如下面兩個Dockerfile文件
Dockerfile 1:
FROM centos:latest
MAINTAINER duffqiu@gmail.com
RUN echo "test" >> hello.txt
RUN echo "hello" > test.txt
Dockerfile 2:
FROM centos:latest
MAINTAINER duffqiu@gmail.com
RUN echo "hello" > test.txt
RUN echo "test" >> hello.txt
這兩個文件的內容只是兩個 RUN 語句順序不一樣,但是最后它們生成的image層是不一樣的,可以通過 docker history <image name> 來對比
-
從這里面也看到一個問題,From最好不要用lastest標簽,避免不同鏡像的頂層是不同,從而無法復用。
實踐建議
需要看具體情況,如果有一個包是公用的,且比較大,則最好先將這個包打成Image再給后續的程序打包使用,這樣使用時占用的機器磁盤空間最小,啟動時如果需要pull的話也最快。
但是如果包本身就是很小,過細的分層也不利于維護和管理,所以最終還是一個藝術問題
來自:http://vipdocker.com/2016/10/11/docker-image-layout/
本文由用戶 longxzq 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!