優(yōu)化docker鏡像構(gòu)建過程

這篇文章主要介紹“優(yōu)化docker鏡像構(gòu)建過程”,在日常操作中,相信很多人在優(yōu)化docker鏡像構(gòu)建過程問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”優(yōu)化docker鏡像構(gòu)建過程”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供正陽網(wǎng)站建設(shè)、正陽做網(wǎng)站、正陽網(wǎng)站設(shè)計、正陽網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、正陽企業(yè)網(wǎng)站模板建站服務,十年正陽做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務。

你如何構(gòu)建Docker鏡像?

讓我們從Docker構(gòu)建過程開始。Docker構(gòu)建是通過使用Docker CLI工具中的docker build命令觸發(fā)。

docker build命令根據(jù)Dockerfile文件中指定的指令構(gòu)建Docker鏡像。Dockerfile是一個文本文檔,其中包含用戶組裝鏡像所有的有序命令。

Docker鏡像由只讀層組成。每層代表一個Dockerfile指令。這些層是堆疊在一起的,每個層都是上一層的增量。我認為這些層是緩存的一種形式。對只更改了的層進行更新,而不是對每個更改進行更新。

下面的示例描述了Dockerfile的內(nèi)容:

FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py

該文件中的每條指令代表Docker鏡像中的單獨一層。以下是每條指令的簡要說明:

  • FROM 使用ubuntu:18.04創(chuàng)建Docker鏡像的一個層

  • COPY 從Docker客戶端所在的目錄添加文件

  • RUN 使用make指令構(gòu)建你的應用程序

  • CMD 指定在容器中運行什么命令

在構(gòu)建過程中執(zhí)行這四個命令時,它們將在Docker鏡像中創(chuàng)建層。

如果你想了解有關(guān)鏡像和層的更多信息,可以在此處閱讀有關(guān)它們的信息。

優(yōu)化鏡像構(gòu)建過程

既然我們已經(jīng)介紹了Docker的構(gòu)建過程,我想分享一些優(yōu)化建議,以幫助有效地構(gòu)建鏡像。

1. 臨時容器

Dockerfile定義的鏡像應生成短暫的容器。

在這種情況下,臨時容器是指可以銷毀,重建,并可以替換為新容器。臨時容器可以認為是一次性的。每個實例都是新的,并且與以前的容器實例無關(guān)。

在開發(fā)Docker鏡像時,你應該利用盡可能多的臨時模式。

2. 不要安裝不必要的軟件包

盡量避免安裝不必要的文件和軟件包。

Docker鏡像應保持精簡,這有助于提高可移植性,縮短構(gòu)建時間,降低復雜性并減小文件大小。例如,在大多數(shù)情況下,不要在容器上安裝文本編輯器,不要安裝任何非必需的應用程序或服務。

3. 實現(xiàn).dockerignore文件

.dockerignore文件,是用來聲明不會被鏡像包括的文件和目錄。這有助于避免將不必要的大文件或敏感文件打包進去,并避免將它們添加到公共鏡像。

如果你也要排除與構(gòu)建無關(guān)的文件而不重新構(gòu)建源碼庫,請使用一個.dockerignore文件。它支持類似于.gitignore文件的排除模式。

4. 多行參數(shù)要排序

盡可能通過排序多行參數(shù)來簡化以后的更改,這有助于避免程序包重復,并使列表更易于更新。這也使PR易于閱讀和查看。在反斜杠\之前添加空格也有幫助。

5. 解耦應用

依賴于其他應用的應用程序被視為“耦合”。

在某些情況下,它們托管在同一主機或計算節(jié)點上,這在非容器部署中很常見,但對于微服務,每個應用程序應存在于其自己的單獨容器中。將應用程序解耦到多個容器中,可以更輕松地水平伸縮和重用容器。例如,一個解耦的Web應用程序可能包含三個單獨的容器,每個容器都有自己的唯一鏡像:一個用于管理Web應用程序,一個用于管理數(shù)據(jù)庫的容器以及一個用于管理緩存的容器。

將每個容器限制為一個進程是一個很好的經(jīng)驗法則。根據(jù)你的最佳判斷,使容器盡可能保持干凈和模塊化。

如果容器相互依賴,則可以通過使用Docker容器網(wǎng)絡(luò)來確保這些容器可以通信。

6. 層數(shù)盡量少

Docker構(gòu)建中,只有RUN,COPY和ADD指令創(chuàng)建圖層。其他指令會創(chuàng)建臨時的中間鏡像,最終不會增加構(gòu)建的大小。

也可以將所需的組件復制到最終鏡像中,這會使你可以在構(gòu)建階段中包含其他工具或調(diào)試信息,而無需增加最終鏡像的大小。

7. 利用構(gòu)建緩存

在構(gòu)建鏡像時,Docker會逐步、按順序執(zhí)行Dockerfile中的每個指令。在每條指令中,Docker都會在其緩存中搜索要使用的鏡像,而不是創(chuàng)建新的鏡像。這是Docker遵循的基本規(guī)則:

從該基本鏡像派生的所有子鏡像,與已在緩存中的鏡像進行比較,以查看是否其中一個是使用完全相同的指令構(gòu)建的。如果不一樣,則緩存失效,重新構(gòu)建。

對于ADD和COPY指令,將檢查鏡像文件中的內(nèi)容,并與現(xiàn)有鏡像中進行比較。如果文件中的任何內(nèi)容(例如內(nèi)容和元數(shù)據(jù))發(fā)生了更改,則緩存將無效。

除了ADD和COPY命令之外,緩存不會查看容器中的文件,來確定緩存是否匹配。例如,在使用RUN apt-get -y命令時,不會檢查容器中的更新文件是否存在緩存中。

緩存無效后,后續(xù)所有Dockerfile命令都會生成新鏡像,并且不使用緩存。

在CI流水線中優(yōu)化Docker鏡像構(gòu)建

首先,前面提到的所有優(yōu)化概念對于在CI流水線中構(gòu)建鏡像都是有效的。如果Dockerfile發(fā)生了變化,那么利用緩存仍然是減少構(gòu)建時間的最佳方法。

當構(gòu)建Docker鏡像是CI流水線的常規(guī)流程時,可以利用Docker層緩存(DLC)的功能來加快構(gòu)建速度。DLC是一項很棒的功能。DLC會在任務中將創(chuàng)建的鏡像層保存,然后在后續(xù)的構(gòu)建中重用未更改的鏡像層,而不是每次都重新構(gòu)建整個鏡像。

DLC可與執(zhí)行程序(machine executor)或遠程Docker環(huán)境(setup_remote_docker)一起使用。要注意的是,DLC僅在使用docker build,docker compose等命令創(chuàng)建Docker鏡像時很有用。

 

到此,關(guān)于“優(yōu)化docker鏡像構(gòu)建過程”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

名稱欄目:優(yōu)化docker鏡像構(gòu)建過程
地址分享:http://muchs.cn/article40/iiopeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、定制開發(fā)、ChatGPT、網(wǎng)站維護網(wǎng)站內(nèi)鏈、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司