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