鏡像命名的最佳實踐 - 每天5分鍾玩轉 Docker 容器技術(18)


我們已經學會構建自己的鏡像了。接下來的問題是如何在多個 Docker Host 上使用鏡像。

這里有幾種可用的方法:

  1. 用相同的 Dockerfile 在其他 host 構建鏡像。

  2. 將鏡像上傳到公共 Registry(比如 Docker Hub),Host 直接下載使用。

  3. 搭建私有的 Registry 供本地 Host 使用。

第一種方法沒什么特別的,前面已經討論很多了。我們將討論如何使用公共和私有 Registry 分發鏡像。

為鏡像命名

無論采用何種方式保存和分發鏡像,首先都得給鏡像命名。

當我們執行 docker build 命令時已經為鏡像取了個名字,例如前面:

docker build -t ubuntu-with-vi

這里的 ubuntu-with-vi 就是鏡像的名字。通過 dock images 可以查看鏡像的信息。

84.png

這里注意到 ubuntu-with-vi 對應的是 REPOSITORY,而且還有一個叫 latest 的 TAG

實際上一個特定鏡像的名字由兩部分組成:repository 和 tag。

[image name] = [repository]:[tag]

如果執行 docker build 時沒有指定 tag,會使用默認值 latest。其效果相當於:

docker build -t ubuntu-with-vi:latest

tag 常用於描述鏡像的版本信息,比如 httpd 鏡像:

當然 tag 可以是任意字符串,比如 ubuntu 鏡像:

小心 latest tag

千萬別被 latest tag 給誤導了。latest 其實並沒有什么特殊的含義。當沒指明鏡像 tag 時,Docker 會使用默認值 latest,僅此而已。

雖然 Docker Hub 上很多 repository 將 latest 作為最新穩定版本的別名,但這只是一種約定,而不是強制規定。

所以我們在使用鏡像時最好還是避免使用 latest,明確指定某個 tag,比如 httpd:2.3,ubuntu:xenial。

tag 使用最佳實踐

借鑒軟件版本命名方式能夠讓用戶很好地使用鏡像。

一個高效的版本命名方案可以讓用戶清楚地知道當前使用的是哪個鏡像,同時還可以保持足夠的靈活性。

每個 repository 可以有多個 tag,而多個 tag 可能對應的是同一個鏡像。下面通過例子為大家介紹 Docker 社區普遍使用的 tag 方案。

假設我們現在發布了一個鏡像 myimage,版本為 v1.9.1。那么我們可以給鏡像打上四個 tag:1.9.1、1.9、1 和 latest。

我們可以通過 docker tag 命令方便地給鏡像打 tag。

docker tag myimage-v1.9.1 myimage:1

docker tag myimage-v1.9.1 myimage:1.9

docker tag myimage-v1.9.1 myimage:1.9.1

docker tag myimage-v1.9.1 myimage:latest

過了一段時間,我們發布了 v1.9.2。這時可以打上 1.9.2 的 tag,並將 1.9、1 和 latest 從 v1.9.1 移到 v1.9.2。

命令為:

docker tag myimage-v1.9.2 myimage:1

docker tag myimage-v1.9.2 myimage:1.9

docker tag myimage-v1.9.2 myimage:1.9.2

docker tag myimage-v1.9.2 myimage:latest

之后,v2.0.0 發布了。這時可以打上 2.0.0、2.0 和 2 的 tag,並將 latest 移到 v2.0.0。

命令為:

docker tag myimage-v2.0.0 myimage:2

docker tag myimage-v2.0.0 myimage:2.0

docker tag myimage-v2.0.0 myimage:2.0.0

docker tag myimage-v2.0.0 myimage:latest


這種 tag 方案使鏡像的版本很直觀,用戶在選擇非常靈活:

  1. myimage:1 始終指向 1 這個分支中最新的鏡像。

  2. myimage:1.9 始終指向 1.9.x 中最新的鏡像。

  3. myimage:latest 始終指向所有版本中最新的鏡像。

  4. 如果想使用特定版本,可以選擇 myimage:1.9.1、myimage:1.9.2 或 myimage:2.0.0。

Docker Hub 上很多 repository 都采用這種方案,所以大家一定要熟悉。

下一節討論如何使用使用公共 Registry。

二維碼+指紋.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM