Docker中latest標籤引發的困惑

2021-09-23 01:16:03 字數 4419 閱讀 7281

本文講的是docker中latest標籤引發的困惑

【編者的話】本文介紹了docker中的乙個小知識:latest標籤,由於它的字面意思是「最新的」,所以很多時候也容易被誤解,其實latest就是個普通標籤,不要期望它是最新或最穩定的版本。它只是個名字,沒有其它附加作用,更不會自動更新。:)

在docker中,最容易產生誤解的部分應該是latest這個標籤。困惑主要是由於這個名字造成的,因為字面意思並不能表達它的真正含義。在本文中,我們來學習下latest標籤的真正作用和如何正確使用它。

通常有兩種方式來對映象打標籤:使用docker tag命令或者是在執行docker build的時候用-t來傳遞引數。在這兩種情況下,引數的形式通常是repository_name:tag_name,例如:docker tag myrepo:mytag。如果這個資源庫被上傳到了docker hub,資源庫的名字會加上乙個由docker hub使用者名稱和斜線組成的字首,例如:amouat/myrepo:mytag。如果沒有新增tag部分的引數,例如:docker tag myrepo:1.0 myrepo,docker會自動的給它latest標籤。前面這些內容或許你已經熟知,其實它也就這點內容,並沒有什麼神奇的地方。

不能因為映象的標籤是latest就認為這是資源庫中最新的映象。只有這個資源庫的擁有者約定這樣,擁有latest標籤的映象才一定是最新的映象。例如,我可以輕易地把乙個過時的映象變成帶有latest標籤的映象,例如:

$ docker images myrepo

repository          tag                 image id            created             virtual size

myrepo              1.0                 2e9f372f03a0        44 seconds ago      2.433 mb

myrepo              latest              2e9f372f03a0        44 seconds ago      2.433 mb

myrepo              0.9                 4986bf8c1536        2 weeks ago         2.433 mb

$ docker tag -f myrepo:0.9 myrepo:latest

$ docker images myrepo

repository          tag                 image id            created              virtual size

myrepo              1.0                 2e9f372f03a0        about a minute ago   2.433 mb

myrepo              0.9                 4986bf8c1536        2 weeks ago          2.433 mb

myrepo              latest              4986bf8c1536        2 weeks ago          2.433 mb

這裡帶latest標籤的映象與0.9版本的映象是一樣的,都是兩周前的版本,然而1.0的映象是一分鐘以前的。

為什麼這個標籤讓很多人迷惑,其實比較容易理解。『just pull the latest image』 這句話的意思是獲取帶有latest標籤的映象還是獲取最新的映象?這兩者是否是一樣呢?它們是不是資源庫中最新的映象呢?是不是最新的穩定版映象或者是最新的開發版映象呢?

更糟糕的是,很多人似乎認為latest標籤會自動更新,也就是說如果我獲取乙個帶有latest標籤的映象,docker會在每次執行之前去檢查它是不是最新的版本。這是絕對不會出現的情況,就像其它的標籤一樣,你需要去手工決定docker獲取最新版本的映象。

困惑並不僅僅是這些。如果我從資源庫docker pull乙個映象卻沒指定標籤,會發生什麼呢?如果你認為會獲取下所有的映象,那麼就錯了,它只會獲取下來帶有latest標籤的那個。如果你需要獲取全部映象,需要加上-a標誌。 如果你在資源庫執行了pull操作,卻沒帶latest標籤,會發生什麼呢?如下所示:

$ docker pull amouat/myrepo

pulling repository amouat/myrepo

2015/01/21 12:04:06 tag latest not found in repository amouat/myrepo

意料之中的是docker給出了錯誤資訊。但是我認為你不知道這其中發生了什麼。

乙個更令人討厭的是latestlatest標籤的debian映象。哪個是它的版本呢?

$ docker images debian

repository          tag                 image id            created             virtual size

debian              latest              4d6ce913b130        4 days ago          84.98 mb

額,不知道。事實上是7.8 wheezy版本。

$ docker pull debian:7.8

debian:7.8: the image you are pulling has been verified

511136ea3c5a: already exists

d0a18d3b84de: already exists

4d6ce913b130: already exists

status: image is up to date for debian:7.8

$ docker pull debian:wheezy

debian:wheezy: the image you are pulling has been verified

511136ea3c5a: already exists

d0a18d3b84de: already exists

4d6ce913b130: already exists

status: image is up to date for debian:wheezy

$ docker images debian

repository          tag                 image id            created             virtual size

debian              7.8                 4d6ce913b130        4 days ago          84.98 mb

debian              latest              4d6ce913b130        4 days ago          84.98 mb

debian              wheezy              4d6ce913b130        4 days ago          84.98 mb

wheezylatest都在hub上更新了,而我只獲取了更新後的wheezy版本debian,那麼儘管在hub上他們可以被區分開,但是我的wheezy標籤將會比本地的latest標籤的版本新。

上述只是覆蓋了latest的大部分語義以及它造成的常見誤解。這種情況怎麼能夠改善呢?個人認為,可以取消latest標籤並用乙個更接近其字面意思的詞來代替,例如default。我也希望可以看到一些改進標籤原作方式的工作,例如同時更新乙個映象的全部標籤。與此同時,我也強烈建議資源庫管理員去警惕這個latest標籤並徹底廢棄它。

譯者介紹

陳傑,北京理工大學計算機學院在讀博士,研究方向是自然語言處理在企業網路信譽評價方面的應用,平時也樂於去實現一些突發的想法。在疲於配置系統環境時發現了docker,跟大家一起學習、使用和研究docker。

原文發布時間為:2015-01-27 

struts s標籤中的s select標籤用法

一 常用結構 這裡列舉幾個常用的屬性吧 1 id 可能要做某些取值操作 2 name 用來作為action中取值的屬性 3 value 用來預設input元素的value屬性 4 list 在後台或者自定義的乙個取值集合 這個是個必填項 5 listkey 標籤的key值,也就是我們後台要獲取到的k...

中 標籤 HTML中的標籤

講一下html中檔案標籤和文字標籤的使用 目的是學會使用,所以借助工具可以省好多時間 1.檔案標籤 構成html最基本的標籤 html html文件的根標籤 head 頭標籤。用於引入html文件的一些屬性。引入外部的一些資源 title 標題標籤 body 體標籤 html5中定義該文件是html...

body中可用標籤 文字標籤

結果 描述實體名稱 實體編號 空格 更大的空格,乙個中文字元大小 小於號 大於號 和號 引號 撇號 ie不支援 分 cent 鎊 pound 元 yen 歐元 euro 小節 註冊商標 商標 乘號 除號 charset utf 8 文字標籤title head h1標題h1 h2標題h2 h3標題h...