[英]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.