您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關使用Docker 如何實現拉取鏡像,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
1. docker pull
從鏡像源拉取鏡像,一般來說是從Docker Hub拉取鏡像(image)
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
選項,簡寫 | 默認 | 描述 |
---|---|---|
–all-tags , -a | 從鏡像庫拉取所有tag標簽名的鏡像 | |
–disable-content-trust | true | 忽略鏡像校驗 |
比如:
$ docker pull hyperledger/fabric-$IMAGES:$FABRIC_TAG Options: # -a 拉取所有不同標簽的鏡像 -a, --all-tags Download all tagged images in the repository # 忽略鏡像校驗,默認項 --disable-content-trust Skip image verification (default true)
我們實際操作一下看看,操作環境是常用的Ubuntu16.04
1.1 普通拉取
實際上我們可以直接拉取該鏡像的最新版,默認拉取tag為latest的鏡像
比如:
#拉取了java的鏡像,tag為latest $ docker pull java Using default tag: latest latest: Pulling from library/java 5040bd298390: Pull complete fce5728aad85: Pull complete 76610ec20bf5: Pull complete 60170fec2151: Pull complete e98f73de8f0d: Pull complete 11f7af24ed9c: Pull complete 49e2d6393f32: Pull complete bb9cdec9c7f3: Pull complete Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d Status: Downloaded newer image for java:latest
拉取完成,我們可以查看已經擁有的鏡像
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE java latest d23bdf5b1b1b 20 months ago 643MB
1.2 tag標簽名拉取
從上述輸出內容,我們可以發現,雖然只拉取了一個java鏡像,但是拉取過程中,卻有多個Pull complete,5040bd298390和fce5728aad85等8個,這是因為鏡像可以由多“層”(layers)組成,而這種“層”可以被其他的鏡像復用(有點像前端的組件或模塊),從而組成新鏡像。
如果拉取另一個鏡像,其中某些“層”已經下載過,那么docker pull則只會拉取元數據,而不會重復拉取“層”。
Docker的鏡像庫使用了內容尋址儲存功能,而鏡像ID是由SHA256作為摘要代表了其中包含的配置及“層”,下面我們來證明一下,因為我拉取的是java:latest,即tag名為latest的鏡像,所以我需要找到和latest同版不同tag名的鏡像(本質上是一個鏡像,只是標簽名不一樣),在Docker Hub上搜到如下結果:
拉取tag名為8-jdk的鏡像:
$ docker pull java:8-jdk 8-jdk: Pulling from library/java Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d Status: Downloaded newer image for java:8-jdk
很明顯,此處的拉取沒有看到“層”的信息,且摘要的sha256值也與tag名為latest的鏡像完全一樣,本質上這是完全相同的兩個鏡像,由相同的“層”組成,所以不需要再次拉取了。
此時,你們也許會和我產生相同的疑問,“完全相同?”,那是不是代表他們在操作環境中只存在一個?那么又用誰的tag名來命名呢?我們來看如下輸出:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE java 8-jdk d23bdf5b1b1b 20 months ago 643MB java latest d23bdf5b1b1b 20 months ago 643MB
我們可以清楚的看到,此時查看所有鏡像,有tag名分別為8-jdk和latest的鏡像羅列其上,java:8-jdk和 java:latest擁有相同的image ID,因為本質上他們確實是 同一鏡像 ,只是由 不同標簽 所標記。
由于鏡像完全相同,則他們的“層”只儲存一次,且不會消耗額外的磁盤空間,即操作環境中只存在一個java鏡像,也可以用不同的tag標記這個鏡像。
更多關于鏡像,“層”,內容尋址存儲庫的信息,請移步還未開的新坑深度解析Docker鏡像,“層”和存儲驅動
1.3 摘要拉取
通過上述兩種拉取鏡像的方式,我們獲得了一個sha256
sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
我們下面嘗試摘要拉取鏡像的方法:
$ docker pull java@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d: Pulling from library/java Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d Status: Image is up to date for java@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
該摘要的鏡像,已經是最新,不需要拉取。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE java 8-jdk d23bdf5b1b1b 20 months ago 643MB java latest d23bdf5b1b1b 20 months ago 643MB
鏡像列表毫無變動。
這里需要提及一個知識點,摘要可以在Dockerfile中配合FROM使用:
FROM java@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
MAINTAINER some maintainer <maintainer@example.com>
這種引用方式,由于特定摘要,會將鏡像固定為特定的版本,且不會更新,如需要使用其他版本,則需要變更摘要內容
1.4 從其他注冊中心拉取
重申,默認情況下,docker pull從Docker Hub拉取鏡像。當然,我們可以設置從其他注冊中心拉取鏡像:
$ docker pull localregistry.example:6666/testing/test-image
此處需要注意,注冊中心的URL前不需要加http://或https://
1.5 從同一鏡像庫,一次拉取多個鏡像
使用docker pull -a 則可以拉取同一鏡像庫中所有鏡像。
1.6 取消拉取
取消拉取動作可以殺死拉取進程,直接在操作界面CTRL+c。
給源鏡像創建一個新的tag
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
鏡像名,是由斜杠分割的每一個name組成部分構成的,如library/java。
用冒號分割name和tag,如library/java:8-jdk。
我們還可以在鏡像名前加一些前綴,表示鏡像來源是其他注冊中心或私有注冊中心,如
localregistry.example:6666/library/java:8-jdk
2.1 給Name引用的鏡像加標簽
$ docker tag java java:byname
讀者們可以自行嘗試docker tag java java:byname和docker tag java lib/java:byname有何異同
2.2 給ID引用的鏡像加標簽
$ docker tag d23bdf5b1b1b java:byid
2.3 給Name和Tag引用的鏡像加標簽
$ docker tag java:8-jdk java:bynameandid
2.4 給私有注冊中心的鏡像加標簽
為了將鏡像上傳到私有注冊中心,需要給鏡像重命名,規則為:
$ docker tag java:8-jdk localregistry.example:6666/library/java:8-jdk-v1
docker pull和 docker tag是使用頻率頗高的命令,使用方法簡單,卻有很多技巧,讀者們可以自行練習、嘗試。
后記
其實接觸docker也很久了,怎么想到寫這部分的內容呢?
下筆的初衷,是為求知識的沉淀,一直以來,上級領導對我的要求是快速應用技術,產生價值,那么理論研究,底層原理,甚至基礎的命令,可能都不知真意,僅僅是能用,會用。
就像駕校教會學員駕駛技術(也可能沒教會),卻未曾教授汽車的組成(架構),運作機制(底層原理)。手會掛擋轉方向盤,腳會踩離合油門剎車,是不是也就夠了,會開車了。
那么為什么要沉淀?
其一,當有人問你,一些命令,一些原理的時候,你支支吾吾無法作答,因為你只是通過指尖的肌肉記憶了命令的使用方法,更遑論原理或底層;
其二,觸類旁通,從最初的前端菜鳥,到后來的使用Spring Boot架構寫Java應用,再到現在學習使用Linux命令(shell)、Docker、Go來應用區塊鏈框架 HyperLedger Fabric 做生產,看似有些跨度,然而還是一個相同的領域,人與機器之間的交流。我學會的是用不同的語種去和會各種機器語言的機器去交流,就像一個活在機器國度的異族,會讀,會寫。在機器世界的踐行之路上,與一開始的HTML,CSS,JavaScript,我的啟蒙,漸行漸遠。正值國慶前夕,暫且寫在這里,感覺自己就是一顆過度吸水和接受充分光照的豆芽,越長越高,然而越高的地方越是纖細,根部不夠繁茂,頸部不夠粗壯,越是易彎易折。應當時刻鞭策自己,不棄初心,不忘本職,汲取前端更有營養的內容,強壯己身。
以上就是使用Docker 如何實現拉取鏡像,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。