淺析Docker鏡像分層的注意事項(xiàng)
前言
我們平常在對(duì)程序進(jìn)行Docker鏡像打包的時(shí)候總會(huì)有些困惑,到底是將最終的鏡像分層打包最后匯總成程序的鏡像(也就是一層一層的 From )合適,還是說(shuō)直接將程序從Source code就打包出最終的鏡像更合適呢?其實(shí)這里面沒(méi)有說(shuō)那個(gè)是對(duì)或錯(cuò)的,要看程序包自身的情況做選擇。
Docker build的注意點(diǎn)
如果接觸過(guò)Docker,Docker build大家都清楚怎么用了,但是有幾個(gè)容易忽略的注意點(diǎn):
1、Dockerfile開(kāi)頭的 From 和 MAINTAINER 其實(shí)都是一層鏡像
2、如果 From 和 MAINTAINER 不同,就算是后面的命令語(yǔ)句相同也不會(huì)是相同的鏡像。如都是執(zhí)行 RUN echo "hello world" >> test.txt
,如果 MAINTAINER 不同,則生成的這個(gè)語(yǔ)句的鏡像層將是不同的。
3、原理上如果每一層對(duì)應(yīng)的父層不同,那怕執(zhí)行的命令相同,Docker也會(huì)生成一層新的鏡像,如下面兩個(gè)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
這兩個(gè)文件的內(nèi)容只是兩個(gè) RUN 語(yǔ)句順序不一樣,但是最后它們生成的image層是不一樣的,可以通過(guò) docker history <image name>
來(lái)對(duì)比
從這里面也看到一個(gè)問(wèn)題,F(xiàn)rom最好不要用lastest標(biāo)簽,避免不同鏡像的頂層是不同,從而無(wú)法復(fù)用。
實(shí)踐建議
需要看具體情況,如果有一個(gè)包是公用的,且比較大,則最好先將這個(gè)包打成Image再給后續(xù)的程序打包使用,這樣使用時(shí)占用的機(jī)器磁盤(pán)空間最小,啟動(dòng)時(shí)如果需要pull的話也最快。
但是如果包本身就是很小,過(guò)細(xì)的分層也不利于維護(hù)和管理,所以最終還是一個(gè)藝術(shù)問(wèn)題
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容,希望這篇文章的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能有一定的幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
谷歌技術(shù)人員解決Docker鏡像體積太大問(wèn)題的方法
這篇文章主要介紹了谷歌技術(shù)人員解決Docker鏡像體積太大問(wèn)題的方法,涉及虛擬機(jī),谷歌docker鏡像構(gòu)建實(shí)踐及構(gòu)建工具bazel的介紹等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11Docker 部署Mysql 服務(wù)和Redis 服務(wù)的方法
這篇文章主要介紹了Docker 部署Mysql 服務(wù)和Redis 服務(wù)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11Dockerfile如何使用alpine系統(tǒng)制作haproxy鏡像
這篇文章主要介紹了Dockerfile如何使用alpine系統(tǒng)制作haproxy鏡像問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05docker安裝elasticsearch和kibana的方法步驟
這篇文章主要介紹了docker安裝elasticsearch和kibana的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Docker數(shù)據(jù)存儲(chǔ)總結(jié)
今天小編就為大家分享一篇關(guān)于Docker數(shù)據(jù)存儲(chǔ)總結(jié),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02詳解docker使用阿里云Docker鏡像庫(kù)加速(修訂版)
這篇文章主要介紹了詳解docker使用阿里云Docker鏡像庫(kù)加速(修訂版),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05聊聊docker?單機(jī)部署redis集群的問(wèn)題
這篇文章主要介紹了docker?單機(jī)部署redis集群,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03Docker部署Mysql數(shù)據(jù)庫(kù)步驟詳解
Docker是一種流行的容器化平臺(tái),可以簡(jiǎn)化應(yīng)用程序的部署和管理,在本博客中,我們將探討如何使用Docker部署兩個(gè)廣泛使用的數(shù)據(jù)庫(kù):MySQL,我們將提供詳細(xì)的步驟和相應(yīng)的命令,以幫助您輕松地在Docker容器中設(shè)置和運(yùn)行這個(gè)數(shù)據(jù)庫(kù)2023-07-07