2015-05-04 50 views
5

我一直在閱讀很多關於如何設置和使用我自己的私人碼頭註冊表的教程。爲什麼標籤顯示與註冊表的主機名緊密耦合?

難倒我的一件事是,我用標記圖像的標籤似乎與註冊表的主機名緊密耦合。

docker tag <imageid> registry.mycompany.com:5000/myrepo:tag 
docker push registry.mycompany.com:5000/myrepo:tag 

這看起來確實是違反直覺的。如果註冊表必須移動到不同的主機名,會發生什麼情況?或者如果我使用不同的主機名,無論我是否在內部/外部訪問服務器?

什麼似乎更直觀我推/拉時,將指定註冊表:

docker tag <imageid> myrepo:tag 
docker push myrepo:tag --registry=registry.mycompany.com 
docker pull myrepo:tag --registry=registry.mycompnay.com 

,這是什麼道理呢?我錯過了哪些關鍵信息?

回答

3

URL /註冊表名稱本質上是圖像的「名稱空間」。如果您未指定註冊表,則認爲該映像屬於Docker Hub。實際上,這意味着Docker Inc控制全局命名空間。

如果沒有這樣做,可以在具有相同名稱的單獨主機上擁有兩個完全不同的「推送」圖像,這是Docker想要避免的。

註冊服務器的移動是一個有效的擔心,所以我建議您嘗試使用域名而不是IP爲您的註冊表。

0

標記我用標記圖像,似乎緊密耦合到註冊表的主機名。

不完全是:註冊表用於註冊表服務器的url用於推/拉圖像。

即使您更改了服務器,您將用於推/拉的圖像名稱仍然是相同的,只有url更改(如library/registrydocker/docker-registry中所述)。

+0

我不關注 - URL *是*名稱的一部分。如果它被更改/刪除,您(可能)指的是不同的圖像。 –

+0

@AdrianMouat該名稱的一部分用於「docker push」來知道它需要聯繫哪個服務器。第二部分不應該改變(雖然':latest'總是有點危險,可能不會引用從一臺服務器到另一臺服務器的相同映像)。如果您的註冊服務器存儲在環境變量中,則可以在另一個服務器'$ {registryname}/myrepo:tag'上輕鬆地重複使用相同的表達式。 – VonC

+0

'docker標籤ubuntu $ {registryname}/ubuntu'不起作用。 Docker客戶端不允許這種命名 – shayy