本文講的是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 myreporepository 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/myrepopulling repository amouat/myrepo
2015/01/21 12:04:06 tag latest not found in repository amouat/myrepo
意料之中的是docker給出了錯誤資訊。但是我認為你不知道這其中發生了什麼。
乙個更令人討厭的是latest
latest
標籤的debian映象。哪個是它的版本呢?
$ docker images debianrepository tag image id created virtual size
debian latest 4d6ce913b130 4 days ago 84.98 mb
額,不知道。事實上是7.8 wheezy版本。
$ docker pull debian:7.8debian: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
wheezy
和latest
都在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...