正式環境不要用 latest tag

主張:latest 不是「最新版」的意思,它只是一個名字剛好叫 latest 的普通標籤,維護者隨時可以把它指到別的版本。正式環境永遠寫死版本號。

為什麼危險

你今天部署跟下個月部署,拿到的可能是完全不同的版本,而你的 YAML 一個字都沒改。這是部署事故的經典來源,也是「明明沒動 code 卻掛了」的頭號兇手。

nginx:1.25.3        # 精確到修訂版,最穩
nginx:1.25          # 次版本,小改版會跟著動
nginx:1.25-alpine   # 基於 Alpine,體積小很多
nginx:latest        # 「最新」,也是省略 tag 時的預設

要真正不可變就鎖 digest

Tag 可以被移動,digest(內容雜湊)不行——它就是那份 image 內容的指紋:

nginx@sha256:d211f485f2dd1dee407a80973c8f129f00d54604d2c90732e8e320e5038a0348

CI/CD 與 Kubernetes 的高要求環境常常鎖 digest。CI 自己 build 的 image 則用 commit SHA 當 tag → Image 是 CI-CD 流水線上唯一的交付物

命名規則見 Image 完整名字是 Registry-Namespace-Repository-Tag