這篇文章主要介紹“優(yōu)化docker鏡像構(gòu)建過程”,在日常操作中,相信很多人在優(yōu)化docker鏡像構(gòu)建過程問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”優(yōu)化docker鏡像構(gòu)建過程”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供正陽網(wǎng)站建設(shè)、正陽做網(wǎng)站、正陽網(wǎng)站設(shè)計(jì)、正陽網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、正陽企業(yè)網(wǎng)站模板建站服務(wù),十年正陽做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
讓我們從Docker構(gòu)建過程開始。Docker構(gòu)建是通過使用Docker CLI工具中的docker build命令觸發(fā)。
docker build命令根據(jù)Dockerfile文件中指定的指令構(gòu)建Docker鏡像。Dockerfile是一個(gè)文本文檔,其中包含用戶組裝鏡像所有的有序命令。
Docker鏡像由只讀層組成。每層代表一個(gè)Dockerfile指令。這些層是堆疊在一起的,每個(gè)層都是上一層的增量。我認(rèn)為這些層是緩存的一種形式。對(duì)只更改了的層進(jìn)行更新,而不是對(duì)每個(gè)更改進(jìn)行更新。
下面的示例描述了Dockerfile的內(nèi)容:
FROM ubuntu:18.04 COPY . /app RUN make /app CMD python /app/app.py
該文件中的每條指令代表Docker鏡像中的單獨(dú)一層。以下是每條指令的簡要說明:
FROM 使用ubuntu:18.04創(chuàng)建Docker鏡像的一個(gè)層
COPY 從Docker客戶端所在的目錄添加文件
RUN 使用make指令構(gòu)建你的應(yīng)用程序
CMD 指定在容器中運(yùn)行什么命令
在構(gòu)建過程中執(zhí)行這四個(gè)命令時(shí),它們將在Docker鏡像中創(chuàng)建層。
如果你想了解有關(guān)鏡像和層的更多信息,可以在此處閱讀有關(guān)它們的信息。
既然我們已經(jīng)介紹了Docker的構(gòu)建過程,我想分享一些優(yōu)化建議,以幫助有效地構(gòu)建鏡像。
1. 臨時(shí)容器
Dockerfile定義的鏡像應(yīng)生成短暫的容器。
在這種情況下,臨時(shí)容器是指可以銷毀,重建,并可以替換為新容器。臨時(shí)容器可以認(rèn)為是一次性的。每個(gè)實(shí)例都是新的,并且與以前的容器實(shí)例無關(guān)。
在開發(fā)Docker鏡像時(shí),你應(yīng)該利用盡可能多的臨時(shí)模式。
2. 不要安裝不必要的軟件包
盡量避免安裝不必要的文件和軟件包。
Docker鏡像應(yīng)保持精簡,這有助于提高可移植性,縮短構(gòu)建時(shí)間,降低復(fù)雜性并減小文件大小。例如,在大多數(shù)情況下,不要在容器上安裝文本編輯器,不要安裝任何非必需的應(yīng)用程序或服務(wù)。
3. 實(shí)現(xiàn).dockerignore文件
.dockerignore文件,是用來聲明不會(huì)被鏡像包括的文件和目錄。這有助于避免將不必要的大文件或敏感文件打包進(jìn)去,并避免將它們添加到公共鏡像。
如果你也要排除與構(gòu)建無關(guān)的文件而不重新構(gòu)建源碼庫,請(qǐng)使用一個(gè).dockerignore文件。它支持類似于.gitignore文件的排除模式。
4. 多行參數(shù)要排序
盡可能通過排序多行參數(shù)來簡化以后的更改,這有助于避免程序包重復(fù),并使列表更易于更新。這也使PR易于閱讀和查看。在反斜杠\之前添加空格也有幫助。
5. 解耦應(yīng)用
依賴于其他應(yīng)用的應(yīng)用程序被視為“耦合”。
在某些情況下,它們托管在同一主機(jī)或計(jì)算節(jié)點(diǎn)上,這在非容器部署中很常見,但對(duì)于微服務(wù),每個(gè)應(yīng)用程序應(yīng)存在于其自己的單獨(dú)容器中。將應(yīng)用程序解耦到多個(gè)容器中,可以更輕松地水平伸縮和重用容器。例如,一個(gè)解耦的Web應(yīng)用程序可能包含三個(gè)單獨(dú)的容器,每個(gè)容器都有自己的唯一鏡像:一個(gè)用于管理Web應(yīng)用程序,一個(gè)用于管理數(shù)據(jù)庫的容器以及一個(gè)用于管理緩存的容器。
將每個(gè)容器限制為一個(gè)進(jìn)程是一個(gè)很好的經(jīng)驗(yàn)法則。根據(jù)你的最佳判斷,使容器盡可能保持干凈和模塊化。
如果容器相互依賴,則可以通過使用Docker容器網(wǎng)絡(luò)來確保這些容器可以通信。
6. 層數(shù)盡量少
Docker構(gòu)建中,只有RUN,COPY和ADD指令創(chuàng)建圖層。其他指令會(huì)創(chuàng)建臨時(shí)的中間鏡像,最終不會(huì)增加構(gòu)建的大小。
也可以將所需的組件復(fù)制到最終鏡像中,這會(huì)使你可以在構(gòu)建階段中包含其他工具或調(diào)試信息,而無需增加最終鏡像的大小。
7. 利用構(gòu)建緩存
在構(gòu)建鏡像時(shí),Docker會(huì)逐步、按順序執(zhí)行Dockerfile中的每個(gè)指令。在每條指令中,Docker都會(huì)在其緩存中搜索要使用的鏡像,而不是創(chuàng)建新的鏡像。這是Docker遵循的基本規(guī)則:
從該基本鏡像派生的所有子鏡像,與已在緩存中的鏡像進(jìn)行比較,以查看是否其中一個(gè)是使用完全相同的指令構(gòu)建的。如果不一樣,則緩存失效,重新構(gòu)建。
對(duì)于ADD和COPY指令,將檢查鏡像文件中的內(nèi)容,并與現(xiàn)有鏡像中進(jìn)行比較。如果文件中的任何內(nèi)容(例如內(nèi)容和元數(shù)據(jù))發(fā)生了更改,則緩存將無效。
除了ADD和COPY命令之外,緩存不會(huì)查看容器中的文件,來確定緩存是否匹配。例如,在使用RUN apt-get -y命令時(shí),不會(huì)檢查容器中的更新文件是否存在緩存中。
緩存無效后,后續(xù)所有Dockerfile命令都會(huì)生成新鏡像,并且不使用緩存。
首先,前面提到的所有優(yōu)化概念對(duì)于在CI流水線中構(gòu)建鏡像都是有效的。如果Dockerfile發(fā)生了變化,那么利用緩存仍然是減少構(gòu)建時(shí)間的最佳方法。
當(dāng)構(gòu)建Docker鏡像是CI流水線的常規(guī)流程時(shí),可以利用Docker層緩存(DLC)的功能來加快構(gòu)建速度。DLC是一項(xiàng)很棒的功能。DLC會(huì)在任務(wù)中將創(chuàng)建的鏡像層保存,然后在后續(xù)的構(gòu)建中重用未更改的鏡像層,而不是每次都重新構(gòu)建整個(gè)鏡像。
DLC可與執(zhí)行程序(machine executor)或遠(yuǎn)程Docker環(huán)境(setup_remote_docker)一起使用。要注意的是,DLC僅在使用docker build,docker compose等命令創(chuàng)建Docker鏡像時(shí)很有用。
到此,關(guān)于“優(yōu)化docker鏡像構(gòu)建過程”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
名稱欄目:優(yōu)化docker鏡像構(gòu)建過程
地址分享:http://aaarwkj.com/article40/iiopeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、定制開發(fā)、ChatGPT、網(wǎng)站維護(hù)、網(wǎng)站內(nèi)鏈、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)