1、docker pull 简介
docker pull
命令是 Docker 的一个核心命令,用于从 Docker Hub 或其他 Docker 仓库中拉取(下载)镜像文件。大多数 Docker 镜像都是基于 Docker Hub registry中的基础镜像创建的。
Docker Hub 包含许多预先构建的镜像,可以拉取和尝试这些镜像,而无需定义和配置自己的镜像。
要下载特定的镜像或一组镜像(即存储库),请使用 docker pull 命令。
代理配置如果位于 HTTP 代理服务器后面,例如在企业设置中,在打开到registry的连接之前,可能需要配置 Docker 守护程序的代理设置,请参阅 dockerd 命令行参考以获取详细信息。
并发下载默认情况下,Docker 守护程序每次会同时拉取三个镜像层。如果使用的是低带宽连接,则可能会导致超时问题,此时可以通过 --max-concurrent-downloads 守护进程选项来降低并发数量。有关更多详细信息,请参阅守护进程文档。
参考文档:https://docs.docker.com/engine/reference/commandline/pull/
2、docker pull 语法
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
3、docker pull 命令
1)从 Docker Hub 拉取镜像
要下载特定的镜像或一组镜像(即存储库),请使用 docker image pull
命令(或 docker pull
的简写)。如果未提供标签,则 Docker 引擎会将 :latest
标签作为默认值。以下示例拉取 debian:latest 镜像:
docker image pull debian Using default tag: latest latest: Pulling from library/debian e756f3fdd6a3: Pull complete Digest: sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510 Status: Downloaded newer image for debian:latest docker.io/library/debian:latest
Docker 镜像可以由多个层组成。在上面的示例中,该镜像由单个层 e756f3fdd6a3
组成。
图层可以被镜像复用。例如,debian:bullseye
镜像与 debian:latest
镜像共享其层。因此,仅拉取 debian:bullseye
镜像的元数据,而不拉取其层,因为该层已经在本地存在。
docker image pull debian:bullseye bullseye: Pulling from library/debian Digest: sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510 Status: Downloaded newer image for debian:bullseye docker.io/library/debian:bullseye
可以使用 docker images
命令查看本地存在哪些镜像:
docker image pull debian:bullseye bullseye: Pulling from library/debian Digest: sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510 Status: Downloaded newer image for debian:bullseye docker.io/library/debian:bullseye
Docker 使用可寻址内容的镜像存储,并且镜像 ID 是覆盖镜像配置和层的 SHA256 散列值。在上面的示例中,debian:bullseye
和 debian:latest
具有相同的镜像 ID,因为它们是同一镜像,但使用不同的名称进行标记。因为它们是同一镜像,所以它们的层只存储一次,不会占用额外的磁盘空间。
有关镜像、层和可寻址内容存储的更多信息,请参阅了解镜像、容器和存储驱动程序。
2)按摘要(不变标识符)拉取镜像
到目前为止,您已经按名称(和“标记”)拉取了镜像。使用名称和标记是一种方便的方式来处理镜像。使用标记时,您可以再次 docker pull
一个镜像,以确保您拥有该镜像的最新版本。例如,docker pull ubuntu:22.04
拉取 Ubuntu 22.04
的最新版本。
在某些情况下,您不希望镜像更新到较新的版本,而是喜欢使用镜像的固定版本。Docker 可以让您按其摘要(digest)拉取镜像。当按摘要拉取镜像时,您指定要拉取哪个镜像的特定版本。这样做允许您将镜像“锁定”到该版本,并保证您使用的镜像始终相同。
要了解镜像的摘要,请先拉取该镜像。让我们从 Docker Hub 拉取最新的 ubuntu:22.04 镜像:
docker pull ubuntu:22.04 22.04: Pulling from library/ubuntu 125a6e411906: Pull complete Digest: sha256:26c68657ccce2cb0a31b330cb0be2b5e108d467f641c62e13ab40cbec258c68d Status: Downloaded newer image for ubuntu:22.04 docker.io/library/ubuntu:22.04
Docker 在拉取完成后打印出该镜像的摘要。在上面的示例中,该镜像的摘要为:
sha256:26c68657ccce2cb0a31b330cb0be2b5e108d467f641c62e13ab40cbec258c68d
当将镜像推送到registry时,Docker 也会打印出镜像的摘要。如果想将镜像固定到刚推送的版本,则可能会很有用。
当按摘要拉取镜像时,该摘要代替标记,例如,要按上述镜像的摘要拉取该镜像,请运行以下命令:
docker pull ubuntu@sha256:26c68657ccce2cb0a31b330cb0be2b5e108d467f641c62e13ab40cbec258c68d docker.io/library/ubuntu@sha256:26c68657ccce2cb0a31b330cb0be2b5e108d467f641c62e13ab40cbec258c68d: Pulling from library/ubuntu Digest: sha256:26c68657ccce2cb0a31b330cb0be2b5e108d467f641c62e13ab40cbec258c68d Status: Image is up to date for ubuntu@sha256:26c68657ccce2cb0a31b330cb0be2b5e108d467f641c62e13ab40cbec258c68d docker.io/library/ubuntu@sha256:26c68657ccce2cb0a31b330cb0be2b5e108d467f641c62e13ab40cbec258c68d
摘要也可以在 Dockerfile 的 FROM 中使用,例如:
FROM ubuntu@sha256:26c68657ccce2cb0a31b330cb0be2b5e108d467f641c62e13ab40cbec258c68d LABEL org.opencontainers.image.authors="some maintainer <maintainer@example.com>"
注意:
使用此功能会将镜像“固定”到特定的时间版本。因此,Docker 不会拉取镜像的更新版本,这些版本可能包括安全更新。如果您想拉取更新的镜像,则需要相应地更改摘要。
3)从不同的registry中拉取
默认情况下,docker pull 会从 Docker Hub 拉取镜像。也可以手动指定要从哪个registry拉取。例如,如果设置了本地registry,则可以指定其路径以从中拉取。registry路径类似于 URL,但不包含协议说明符(https://)。
以下命令从监听端口 5000 的本地registry(myregistry.local:5000)中拉取 testing/test-image 镜像:
docker image pull myregistry.local:5000/testing/test-image
registry凭据由 docker login 管理。
Docker 使用 https:// 协议与registry通信,除非允许通过非安全连接访问registry。有关更多信息,请参阅不安全的registry部分。
4)拉取具有多个镜像的存储库(-a、--all-tags)
默认情况下,docker pull 从registryregistry中拉取单个镜像。一个存储库可以包含多个镜像。要拉取存储库中的所有镜像,请在使用 docker pull 时提供 -a(或 --all-tags)选项。
以下命令拉取 ubuntu 存储库中的所有镜像:
docker image pull --all-tags ubuntu Pulling repository ubuntu ad57ef8d78d7: Download complete 105182bb5e8b: Download complete 511136ea3c5a: Download complete 73bd853d2ea5: Download complete .... Status: Downloaded newer image for ubuntu
完成拉取后,使用 docker images 命令(或 docker images 简写)查看已拉取的镜像。下面的示例显示本地存在的所有 ubuntu 镜像:
docker image ls --filter reference=ubuntu REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 18.04 c6ad7e71ba7d 5 weeks ago 63.2MB ubuntu bionic c6ad7e71ba7d 5 weeks ago 63.2MB ubuntu 22.04 5ccefbfc0416 2 months ago 78MB ubuntu focal ff0fea8310f3 2 months ago 72.8MB ubuntu latest ff0fea8310f3 2 months ago 72.8MB ubuntu jammy 41ba606c8ab9 3 months ago 79MB ubuntu 20.04 ba6acccedd29 7 months ago 72.8MB
5)取消拉取
杀死 docker pull
进程,例如在终端中按下 CTRL-c,将终止拉取操作。
docker pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu a3ed95caeb02: Pulling fs layer 236608c7b546: Pulling fs layer ^C
当守护程序和客户端之间的连接(启动拉取的客户端)被切断或丢失,或命令被手动终止时,引擎会终止拉取操作。
4、命令选项
命令选项 | 默认值 | 描述 |
--all-tags , -a | 下载存储库中的所有带标签的镜像 | |
--disable-content-trust | true | 跳过镜像验证 |
--platform | 如果服务器支持多平台,请设置平台 | |
--quiet , -q | 抑制冗长的输出 |