Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍Docker CLI 中 docker pull 常用命令。

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:bullseyedebian: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

抑制冗长的输出

推荐文档

相关文档

大家感兴趣的内容

随机列表