docker pull
描述
從鏡像倉庫拉取鏡像。
使用
$ docker pull [options] name[:tag|@digest]
name
鏡像名稱后面可以跟上鏡像標簽或者鏡像摘要,這些可以在接下來的內容中講解。
選項
名稱 | 默認 | 描述 |
---|---|---|
--all-tags , a |
下載倉庫所有鏡像 | |
--disable-content-trust |
true |
跳過鏡像校驗 |
--platform |
設置鏡像所屬平台, 如果有多個鏡像服務. |
父明令
命令 | 描述 |
---|---|
docker |
The base command for the Docker CLI. |
詳細描述
你所使用的大多數鏡像都是基於Docker Hub上的基礎鏡像制作的。
Docker Hub
上有很多預先構建好的鏡像,你可以pull
並使用它們,而不需要自己去定義和配置自己的鏡像。
如想要下載一個或多個鏡像就用docker pull
.
代理配置
如果您的項目處於一些企業服務器中,您可能需要使用環境變量:HTTP_PROXY
, HTTPS_PROXY
, and NO_PROXY
設置Docker
守護進程的服務代理。可以通過systemd
來設置這些環境變量,參考:systemd config
並行下載(多線程下載?)
默認情況下,Docker守護程序將一次拉出三層鏡像。 如果您的帶寬比較低,可能會導致超時問題。您可以通過選項--max-concurrent-downloads
來提高下載速度。 有關更多詳細信息請參考:docker daemon
使用示例
從docker hub拉取鏡像
拉取一個或多個鏡像使用docker pull
,如果沒有指定鏡像標簽,docker默認使用:latest
,下面的示例命令就會拉取最新的鏡像文件,等同於:docker pull debian:latest
$ docker pull debian
Using default tag: latest latest: Pulling from library/debian fdd5d7827f33: Pull complete a3ed95caeb02: Pull complete Digest: sha256:e7d38b3517548a1c71e41bffe9c8ae6d6d29546ce46bf62159837aad072c90aa Status: Downloaded newer image for debian:latest
docker鏡像基本都是由多層組成(分層存儲),上面的鏡像文件就是由兩層構成:fdd5d7827f33
和a3ed95caeb02
.
每一層都可以被不同鏡像共同使用,例如下面這個鏡像debian:jessie
就是與上述debian:latest
共用兩個相同的鏡像層。在拉取debian:jessie
的時候只會拉取其自身的一些元數據信息,而不會再去拉取鏡像分層信息,因為在本地已經存在了這兩個鏡像層。
$ docker pull debian:jessie jessie: Pulling from library/debian fdd5d7827f33: Already exists a3ed95caeb02: Already exists Digest: sha256:a9c958be96d7d40df920e7041608f2f017af81800ca5ad23e327bc402626b58e Status: Downloaded newer image for debian:jessie
接下來可以通過docker images
查看本地已存在的鏡像文件:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE debian jessie f50f9524513f 5 days ago 125.1 MB debian latest f50f9524513f 5 days ago 125.1 MB
docker使用內存尋址方式來存儲鏡像文件,鏡像文件ID是通過SHA256摘要方式包含其配置和鏡像層,上述例子中debian:jessie
and debian:latest
具有相同的ID是因為他們使用了相同的鏡像,只是打了不同的標簽而已。因為他們使用的是相同的鏡像文件,他們的鏡像層只會存儲一次,且不會占用額外內存空間。
更多關於鏡像層存儲的問題可參考:storage driver
通過鏡像摘要拉取鏡像(不可變的身份標識)
目前為止我們都是通過鏡像名稱或者加標簽的方式拉取鏡像文件,顯然這是一種很方便的拉取鏡像的方式。如果使用了標簽拉取,當你再次使用docker pull
的時候可以確保你能拉取到最新的鏡像文件。例如:docker pull ubuntu:14.04
便可以拉取最新的Ubuntu 14.04鏡像。
有時候你可能並不想獲取最新的鏡像文件,而是使用一個固定版本的鏡像文件。docker提供了一種通過摘要digest
拉取鏡像的方式,這種方式你可以明確的指定鏡像的版本號。這樣你可以獲得一個固定版本的鏡像文件。並且確保你每次使用的時候都是同一個鏡像文件。
想要獲取鏡像的摘要,需要先pull下一個鏡像文件,例如:
$ docker pull ubuntu:14.04 14.04: Pulling from library/ubuntu 5a132a7e7af1: Pull complete fd2731e4c50c: Pull complete 28a2f68d1120: Pull complete a3ed95caeb02: Pull complete Digest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 Status: Downloaded newer image for ubuntu:14.04
docker已經幫我們打印出了該鏡像的摘要:
sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
當你push一個鏡像到某個倉庫的時候,docker也會打印出其摘要信息,這樣在你push完成之后便可以得到該鏡像的最新版本摘要信息。
通過摘要方式拉取鏡像:(只需要將摘要替換掉鏡像標簽tag
即可)
$ docker pull ubuntu
摘要拉取方式也可以在Dockerfile FROM
中使用,例如:
FROM ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
MAINTAINER some maintainer <maintainer@example.com>
注意:如果使用了這樣的固定版本方式,docker便不會拉取最新的鏡像文件,這樣可能導致一些安全問題,如果你想拉取最新的鏡像那么你需要修改去修改摘要
從不同的倉庫拉取鏡像
默認情況下docker pull
會從docker hub拉取鏡像文件,也可以手動指定一個倉庫地址拉取鏡像。假如你設置了一個本地倉庫地址,那么你只要指定這個地址拉取鏡像即可。倉庫地址類似一個URL
,但是沒有協議頭http://
。
例如從一個鏡像地址:myregistry.local:5000
,拉取鏡像文件:testing/test-image
:
$ docker pull myregistry.local:5000/testing/test-image
docker倉庫地址憑證由docker login管理。
docker與各個倉庫地址默認以https://
來通信,除非該倉庫地址允許以不安全的鏈接方式訪問,更多信息請參考docker-insecure-registries。
同時拉取多個鏡像文件
docker默認只會拉取一個鏡像文件。一個鏡像倉庫可以包含多個鏡像文件,如果想拉取多個鏡像可以使用參數-a
或者--all-tags
。
例如下面這個便會拉取所有的鏡像文件fedora
。
$ docker pull --all-tags fedora Pulling repository fedora ad57ef8d78d7: Download complete 105182bb5e8b: Download complete 511136ea3c5a: Download complete 73bd853d2ea5: Download complete .... Status: Downloaded newer image for fedora
取消拉取鏡像文件
ctrl + c
即可。
$ docker pull fedora
Using default tag: latest latest: Pulling from library/fedora a3ed95caeb02: Pulling fs layer 236608c7b546: Pulling fs layer ^C
注意:如果docker在拉取鏡像文件的時候連接失敗了也會終止拉取操作。
from:https://www.jianshu.com/p/f0c6302e869e