拉取缓存的 Docker Hub 映像

Artifact Registry 会在 mirror.gcr.io 上缓存经常访问的公共 Docker Hub 映像。您可以配置 Docker 守护程序以使用缓存的公共映像(如果有),或者从 Docker Hub 拉取映像(如果缓存副本不可用)。

Google Cloud 在尝试从 Docker Hub 中拉取映像之前,Cloud Build 和 Google Kubernetes Engine 等服务会自动检查是否存在缓存的映像。

mirror.gcr.io 上的缓存映像为:

  • 存储在由 Google Cloud管理的代码库中。
  • 不易受 Docker Hub 服务中断影响。
  • 与 Google Cloud 生态系统集成。
  • 与 Docker Hub 保持同步。

配置 Docker 守护程序

如需将 Docker 守护程序配置为从 Artifact Registry 缓存中拉取映像,请执行以下操作:

CLI

  1. 使用以下方法之一配置守护程序:

    • 如需在启动时自动配置 Docker 守护程序,请在 /etc/docker/daemon.json 中设置以下值

      {
        "registry-mirrors": ["https://mirror.gcr.io"]
      }
      
    • 在启动守护程序时,传入 Artifact Registry 主机名:

      dockerd --registry-mirror=https://mirror.gcr.io
      
    • 将以下行添加到 /etc/default/docker 文件中:

      DOCKER_OPTS="${DOCKER_OPTS} --registry-mirror=https://mirror.gcr.io"
      
  2. 重启 Docker 守护程序。

    • 在 Linux 上,运行以下任一命令:

      sudo service docker restart
      

      sudo service docker stop && sudo service docker start
      
    • 在 macOS 或 Windows 上,运行以下命令:

      docker-machine restart
      

Docker 界面

  1. 打开 Docker 的偏好设置菜单。
  2. 点击守护进程
  3. 点击高级。在 JSON 字段中,添加一个值为 https://mirror.gcr.ioregistry-mirrors 键:

    {
      "registry-mirrors" : [
        "https://mirror.gcr.io"
      ]
    }
    
  4. 点击应用并重启 (Apply & Restart)。

如需验证缓存是否已正确配置,请运行以下命令:

docker system info

输出应包含 Registry Mirrors,并且应类似如下所示:

Containers: 2
 Running: 0
 Paused: 0
 Stopped: 2
Images: 2
Server Version: 17.03.1-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
...
Registry Mirrors:
 https://mirror.gcr.io

拉取缓存的映像

Artifact Registry 会将经常请求的映像添加到缓存中,以供未来请求使用。它还会定期移除不再被请求的映像。

将 Docker 守护程序配置为使用 Artifact Registry 缓存后,当您使用 docker pull 命令拉取公共 Docker Hub 映像时,Docker 会执行以下步骤:

  1. Docker 守护程序会检查 Artifact Registry 缓存并提取相关映像(如果存在)。如果守护程序配置包含其他 Docker 镜像,守护程序会检查每个镜像,以便获取映像的缓存副本。
  2. 如果仍未找到该映像,Docker 守护进程将从 Docker Hub 上的规范代码库中提取该映像。

拉取缓存的映像不会计入 Docker Hub 速率限制。但是,无法保证特定映像将会长时间保持缓存状态。通过 配置 Docker 守护程序,仅在 mirror.gcr.io 上获取缓存的映像。

如需对未缓存在 mirror.gcr.io 上的映像进行 Docker Hub 身份验证, 请使用 Artifact Registry 远程代码库。远程代码库支持对 Docker Hub 进行身份验证。我们建议您对 Docker Hub 进行身份验证,即使您仅使用公共映像也是如此,因为这会提高您的下载速率限制。如需详细了解 Docker Hub 下载速率限制, 请参阅 Docker Hub 速率限制

注意事项

使用 Artifact Registry Docker Hub 缓存时,请考虑以下事项:

  • Artifact Registry 仅充当您存储在 Docker Hub 上的映像的缓存。它不会验证、扫描或修复从 Docker Hub 缓存的映像中的漏洞。 Google Cloud 您有责任确保您存储在 Docker Hub 上的映像符合您组织的安全和合规性要求。如果您需要主动漏洞 扫描,请考虑使用 Artifact Analysis

  • Artifact Registry 缓存旨在提高稳定性,并且不会在映像从 Docker Hub 中移除后立即清除映像。 从 Docker Hub 中删除的映像可能会在 Artifact Registry 缓存中保留长达数天,然后才会从缓存中移除。 Google Cloud 预先配置缓存 使用情况的服务(例如 Cloud Build 和 Google Kubernetes Engine)可能会继续 自动使用 Artifact Registry 缓存中未清除的映像。

后续步骤