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

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

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

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

讓我們從Docker構(gòu)建過(guò)程開(kāi)始。Docker構(gòu)建是通過(guò)使用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ú)一層。以下是每條指令的簡(jiǎn)要說(shuō)明:

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

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

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

  • CMD 指定在容器中運(yùn)行什么命令

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

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

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

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

1. 臨時(shí)容器

Dockerfile定義的鏡像應(yīng)生成短暫的容器。

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

在開(kāi)發(fā)Docker鏡像時(shí),你應(yīng)該利用盡可能多的臨時(shí)模式。

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

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

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

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

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

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

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

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

5. 解耦應(yīng)用

依賴于其他應(yīng)用的應(yīng)用程序被視為“耦合”。

在某些情況下,它們托管在同一主機(jī)或計(jì)算節(jié)點(diǎn)上,這在非容器部署中很常見(jià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ù)庫(kù)的容器以及一個(gè)用于管理緩存的容器。

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

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

6. 層數(shù)盡量少

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

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

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ā)生了更改,則緩存將無(wú)效。

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

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

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

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

當(dāng)構(gòu)建Docker鏡像是CI流水線的常規(guī)流程時(shí),可以利用Docker層緩存(DLC)的功能來(lái)加快構(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)建過(guò)程”的學(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ī)?lái)更多實(shí)用的文章!

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

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷定制開(kāi)發(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)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司