(十)鏡像命名的最佳實踐
在多個Docker Host 上使用 鏡像方法:
- 用相同的 Dockerfile 在其他 host 構建鏡像,
- 將鏡像上傳到公共 Registry(比如 Docker Hub),Host 直接下載使用,
- 搭建私有的 Registry 供本地 Host 使用,
(1)為鏡像命名
? 無論采用何種方式保存和分發鏡像,首先都得給鏡像命名,當我們執行 docker build 命令時已經為鏡像取了個名字,例如前面:docker build -t ubuntu-with-vi
? 這里的 ubuntu-with-vi 就是鏡像的名字,通過 dock images 可以查看鏡像的資訊,
root@cuiyongchao:/dockerfile# docker images ubuntu-with-vi
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-with-vi latest 218e302a1e28 22 hours ago 167MB
root@cuiyongchao:/dockerfile#
? 這里注意到 ubuntu-with-vi 對應的是 REPOSITORY,而且還有一個叫 latest 的 TAG,
? 實際上一個特定鏡像的名字由兩部分組成:repository 和 tag,
[image name] = [repository]:[tag]
? 如果執行 docker build 時沒有指定 tag,會使用默認值 latest,其效果相當于:
docker build -t ubuntu-with-vi:latest
tag 常用于描述鏡像的版本資訊, tag 可以是任意字串 :
root@cuiyongchao:/dockerfile# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-image latest a0fdf1e57442 4 hours ago 1.23MB
ubuntu-with-dockerfile3 latest e14aba1bf84b 7 hours ago 167MB
ubuntu-with-dockerfile2 latest 898ef2d48c22 8 hours ago 167MB
ubuntu-with-vim-dockerfile latest b75528ee6f18 22 hours ago 167MB
ubuntu-with-vi latest 218e302a1e28 22 hours ago 167MB
ubuntu latest d70eaf7277ea 4 days ago 72.9MB
busybox latest f0b02e9d092d 13 days ago 1.23MB
httpd latest 3dd970e6b110 2 weeks ago 138MB
centos latest 0d120b6ccaa8 2 months ago 215MB
hello-world latest bf756fb1ae65 9 months ago 13.3kB
root@cuiyongchao:/dockerfile#
(1)小心 latest tag
? 千萬別被 latest tag 給誤導了,latest 其實并沒有什么特殊的含義,當沒指明鏡像 tag 時,Docker 會使用默認值 latest,僅此而已,
? 雖然 Docker Hub 上很多 repository 將 latest 作為最新穩定版本的別名,但這只是一種約定,而不是強制規定,所以我們在使用鏡像時最好還是避免使用 latest,明確指定某個 tag,比如 httpd:2.3,ubuntu:xenial,
(2)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 方案使鏡像的版本很直觀,用戶在選擇非常靈活:
- myimage:1 始終指向 1 這個分支中最新的鏡像,
- myimage:1.9 始終指向 1.9.x 中最新的鏡像,
- myimage:latest 始終指向所有版本中最新的鏡像,
- 如果想使用特定版本,可以選擇 myimage:1.9.1、myimage:1.9.2 或 myimage:2.0.0,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/202439.html
標籤:其他
