咱們已經學會構建本身的鏡像了。接下來的問題是如何在多個 Docker Host 上使用鏡像。docker
這裏有幾種可用的方法:ubuntu
用相同的 Dockerfile 在其餘 host 構建鏡像。ui
將鏡像上傳到公共 Registry(好比 Docker Hub),Host 直接下載使用。spa
搭建私有的 Registry 供本地 Host 使用。code
第一種方法沒什麼特別的,前面已經討論不少了。咱們將討論如何使用公共和私有 Registry 分發鏡像。orm
不管採用何種方式保存和分發鏡像,首先都得給鏡像命名。ci
當咱們執行 docker build
命令時已經爲鏡像取了個名字,例如前面:
docker build -t ubuntu-with-vi 字符串
這裏的 ubuntu-with-vi
就是鏡像的名字。經過 dock images 能夠查看鏡像的信息。 it
這裏注意到 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 時,Docker 會使用默認值 latest,僅此而已。
雖然 Docker Hub 上不少 repository 將 latest 做爲最新穩定版本的別名,但這只是一種約定,而不是強制規定。
因此咱們在使用鏡像時最好仍是避免使用 latest,明確指定某個 tag,好比 httpd:2.3,ubuntu:xenial。
借鑑軟件版本命名方式可以讓用戶很好地使用鏡像。
一個高效的版本命名方案可讓用戶清楚地知道當前使用的是哪一個鏡像,同時還能夠保持足夠的靈活性。
每一個 repository 能夠有多個 tag,而多個 tag 可能對應的是同一個鏡像。下面經過例子爲你們介紹 Docker 社區廣泛使用的 tag 方案。
假設咱們如今發佈了一個鏡像 myimage,版本爲 v1.9.1。那麼咱們能夠給鏡像打上四個 tag:1.9.一、1.九、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.九、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.一、myimage:1.9.2 或 myimage:2.0.0。
Docker Hub 上不少 repository 都採用這種方案,因此你們必定要熟悉。
下一節討論如何使用使用公共 Registry。