2017-07-24 65 views
0

在機器A上我安裝了docker image FOO/BAR。如何查詢該映像的版本,以及如何將相同版本安裝到機器B?如何安裝相同版本的Docker鏡像?

請注意,在機器上BI不需要FOO/BAR的最新可用版本,但與機器A的版本相同。我不想保留對機器A上生成的圖像的本地修改。

回答

1

Docker使用標記或摘要來區分不同版本的圖像。當既不指定標籤也不指定摘要時,所有Docker命令都假定您要使用默認標記latest。但你總是可以更具體。

假設圖像來自注冊表FOO並且被稱爲BAR,您可以通過兩種方式獲取相同版本的圖像:通過標記或摘要。如果您知道它是唯一的並且不能重複使用,則只能使用該標籤。當使用內部版本號或Git哈希作爲標籤時,通常會出現這種情況,但如果您想絕對確定,請使用摘要。

在機器A上運行docker images --digests。查找FOO/BAR及其摘要(從sha:開始)。

在計算機B,運行下面的命令,並從機器A與摘要替代{digest}

docker pull FOO/[email protected]{digest} 

這是一個例子,如何它可能看起來:

docker pull FOO/[email protected]:e4957dfd892f656ae672dfa03eb7a73f1c47bd24fc95f2231fc5ac91a76092a0 

這將下載相同版本可以在機器A上找到機器B.因爲它來自注冊表,它是一個新的副本,沒有任何修改。

0

使用標籤!

docker image支持標籤,通常用作版本號。當構建一個圖像,你可以指定一個標籤:

docker build -t myimage:v0.1 . 

然後使用相同的圖像很簡單:

docker run -d myimage:v0.1 entrypoint.sh 

如果不指定標籤,和一切工作正常。因爲碼頭工人使用默認標籤latest,在更新和保持同步時可能會很煩人。

latest圖像可以隨時更改(通常使用CI/CD自動構建),因此容易的容器可以使用不同的圖像。如果沒有你所期望的,總是使用標籤!

+1

標籤不能保證它是相同的圖像。想象一下機器A最近拉標籤。之後,圖像的新版本將通過此標籤推送到註冊表中。如果機器B現在會拉最新,它會收到一個不同於機器A的圖像。在這種情況下,標籤沒有什麼幫助,因爲它不能保證唯一性。使用摘要是OP的唯一安全選擇。 – jdno

+0

我並沒有構建自己的圖像,我無法控制圖像所具有的標籤。 – pts

相關問題