1. 程式人生 > 其它 >利用分層機制優化 Docker Image

利用分層機制優化 Docker Image

文章轉載自:https://mp.weixin.qq.com/s/FrIOIquHVsCTEMfHiF87MA

假設系統中我們有兩個應用 App1 和 App2。這兩個節點的環境資訊如下:

通過上表環境資訊的對比,我們發現在這兩個不同引用的節點上,不同的部分只是 最後的程式碼code 的和config 檔案。對於其他相同的部分,我們可以考慮通過 Docker Image Layer 的概念將其複用。從而最大限度發揮 Docker 的能力。將上表中的兩部分環境資訊以分類為節點名,重新以樹狀結構組織如下圖所示。

建議將一些不會經常發生變化的命令或者同類型的命令,合併到同一層。如下圖所示:

最後將圖中的兩個樹狀結構圖進行疊加將重複的節點進行合併,最後得出如下樹狀結構圖:

現在我們已經基於 Docker Image 的分層儲存機制完成了一個初步的Docker Image 的規劃。接下來就可以根據上圖結構分別製作 Image。最終我們將會有三個 Base Image,和最終加入程式碼的業務映象。同時基於此,我們的Dockerfile也類比如下:這裡本該是 4個 gitlab 倉庫製作的 4個映象。為了方便展示映象複用關係, 用一個程式碼塊展示

# f1: 運維安全團隊增加優化基礎安全元件
FROM python3
RUN apt install -y some-security-framework
# push: abc.hub.com/libary/python3 

# f2: 架構師安裝基礎架構
FROM abc.hub.com/libary/python3
RUN wget -c anaconda12.sh && ./anaconda12.sh && rm -f anaconda12.sh
# push: abc.hub.com/ai-tools/env-anaconda:12

# f3: 製作模型映象
FROM abc.hub.com/ai-tools/env-anaconda:12
RUN pip install -y some-dependences
RUN wget -c s3.xx.com/some-path/dust.model -O /some/path
# push: abc.hub.com/ai-tools/env-anaconda-dust:runtime

# f4: 製作業務映象
FROM abc.hub.com/rk-ai-tools/env-anaconda-dust:runtime
ADD code /workspace/code
ENTRYPOINT [ "/bin/bash", "/entrypoint.sh" ]
# push: abc.hub.com/rk-ai-pollution/srv-some-appname-amd64:1.0.0-1234567