拉取缓存的 Docker Hub 映像

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

Container Registry 镜像中的缓存映像具有以下特点:

  • 存储在 Google 拥有的代码库中。
  • 不易受 Docker Hub 服务中断影响。
  • 与 Google Cloud 生态系统轻松集成。
  • 与 Docker Hub 保持同步。Container Registry 镜像会在 30 分钟或更短时间内捕获到 Docker Hub 中的更改。

配置 Docker 守护程序

要将 Docker 守护程序配置为从 Container Registry 镜像中拉取映像,请执行以下操作:

CLI

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

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

      {
        "registry-mirrors": ["https://mirror.gcr.io"]
      }
      
    • 在启动守护程序时,传入 Container 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

拉取缓存的映像

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

由于无法保证特定映像会长时间缓存,因此请仅通过将 Docker 守护程序配置为检查缓存的映像来使用镜像,而不是直接从 mirror.gcr.io 中拉取映像。

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

  • Docker 守护程序会检查 Container Registry 镜像并提取相关映像(如果存在)。如果您配置了多个镜像,Docker 守护程序会检查每个镜像,直到找到所需映像为止。
  • 如果未找到该映像,Docker 守护进程将从 Docker Hub 上的规范代码库中提取该映像。

查看镜像映像列表

您可以在特定代码库中查看代码库列表以及标记和 digest 列表。

  • 如需查看 Container Registry 镜像中的代码库列表,请运行以下命令:

    gcloud container images list --repository=mirror.gcr.io
    

    此命令会输出直接位于 mirror.gcr.io 下的代码库列表。其中一些代码库是嵌套的,例如 mirror.gcr.io/library 下面嵌套了更多代码库。

    您可以使用以下命令查看嵌套代码库的列表:

    gcloud container images list --repository=REPOSITORY
    

    其中 REPOSITORYmirror.gcr.io 下的代码库,例如 mirror.gcr.io/library

    此命令会输出直接位于您指定的代码库下的代码库列表。

  • 如需查看其中一个代码库的标记和摘要,请使用以下命令:

    gcloud container images list-tags mirror.gcr.io/REPOSITORY
    

    其中 REPOSITORY 是嵌套在 mirror.gcr.io 下的代码库之一。

后续步骤