簡體   English   中英

通過重復使用相同的標簽來重建 docker 圖像?

[英]Rebuild docker image by reusing the same tag?

我已經解決了論壇上發布的多個問題,但沒有明確我的要求。

在每次成功的 CI 構建之后,我正在構建一個 docker 映像,對於每個成功的構建, Dockerfile幾乎不會有 1 到 2 行更改。

Docker Build Command:
     $(docker_registry)/$(Build.Repository.Name):azul
Docker Push Command
      $(docker_registry)/$(Build.Repository.Name):azul

我想用最新的(來自最新的 CI 構建更改)覆蓋當前的 docker 圖像,但保留相同的標簽 - azul docker 支持這個嗎?

是的,docker 支持它。 您執行的每一行都會在圖像中產生一個新層,其中包含與前一層相比的更改。 修改Dockerfile后,將創建新層並重復使用相同的先前層。

如果要清理構建沒有緩存層的整個圖像,可以使用—no-cache參數。

從機械上講,這是可行的。 新圖像將用該名稱替換舊圖像。 舊映像仍將實際存在於構建系統中,但如果您查看docker images output 它的名稱會顯示<none> docker system prune這樣的命令可以清理這些。

這種方法的問題在於消費者端。 如果我docker run registry.example.com/image:azul , Docker 將僅在圖像不存在時自動拉取圖像。 這可能會導致您運行恰好位於消費者系統上的舊版本的映像。 這在 Kubernetes 等集群環境中尤其成問題,您需要更改 Kubernetes 部署規范中的圖像名稱文本以觸發更新。

特別是在 CI 系統中,我建議為每個構建分配某種獨特的標簽。 這可能基於源代碼管理提交 ID、分支名稱和綁定編號、當前日期或其他內容。 您可以創建這樣的固定標簽以方便開發人員(允許圖像具有多個標簽),但我計划不將其用於實際部署。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM