亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

優化docker鏡像構建過程

發布時間:2021-09-15 23:12:58 來源:億速云 閱讀:146 作者:chen 欄目:云計算

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

你如何構建Docker鏡像?

讓我們從Docker構建過程開始。Docker構建是通過使用Docker CLI工具中的docker build命令觸發。

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

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

下面的示例描述了Dockerfile的內容:

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

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

  • FROM 使用ubuntu:18.04創建Docker鏡像的一個層

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

  • RUN 使用make指令構建你的應用程序

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

在構建過程中執行這四個命令時,它們將在Docker鏡像中創建層。

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

優化鏡像構建過程

既然我們已經介紹了Docker的構建過程,我想分享一些優化建議,以幫助有效地構建鏡像。

1. 臨時容器

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

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

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

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

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

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

3. 實現.dockerignore文件

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

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

4. 多行參數要排序

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

5. 解耦應用

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

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

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

如果容器相互依賴,則可以通過使用Docker容器網絡來確保這些容器可以通信。

6. 層數盡量少

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

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

7. 利用構建緩存

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

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

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

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

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

在CI流水線中優化Docker鏡像構建

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

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

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

 

到此,關于“優化docker鏡像構建過程”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

休宁县| 乌拉特中旗| 吉林省| 平南县| 苏尼特左旗| 枣阳市| 三穗县| 淅川县| 房产| 日照市| 永嘉县| 潼关县| 慈溪市| 井研县| 昌图县| 安国市| 盐山县| 延吉市| 泰安市| 民和| 衢州市| 红河县| 曲麻莱县| 修水县| 上虞市| 隆尧县| 田林县| 庆元县| 思南县| 会昌县| 贡觉县| 大安市| 三都| 年辖:市辖区| 贵德县| 淮滨县| 高清| 韶关市| 天镇县| 阿合奇县| 章丘市|