在 Docker 客户端中拉取和推送镜像

Harbor 可选地支持 HTTP 连接,但是 Docker 客户端始终尝试首先使用 HTTPS 连接到注册表。如果 Harbor 配置为 HTTP,则必须配置 Docker 客户端,使其可以连接到不安全的注册表。如果您的 Docker 客户端未配置为不安全的注册表,则在尝试拉取或推送镜像到 Harbor 时,将看到以下错误

Error response from daemon: Get https://myregistrydomain.com/v1/users/: dial tcp myregistrydomain.com:443 getsockopt: connection refused.

有关如何将不安全的注册表添加到 Docker 客户端的信息,请参阅通过 HTTP 连接到 Harbor

如果 Harbor 使用带有未知 CA 证书的 HTTPS,您也会看到此错误。在这种情况下,请获取注册表的 CA 证书,并将其复制到 /etc/docker/certs.d/myregistrydomain.com/ca.crt

Harbor 仅支持 Registry V2 API。推送和拉取镜像时,必须使用 Docker 客户端 1.6.0 或更高版本。

拉取镜像

如果镜像所属的项目是私有的,则必须先登录

docker login <harbor_address>

您现在可以拉取镜像了

docker pull <harbor_address>/library/ubuntu:14.04
Harbor 通过 Cosign 和 Notation 支持内容信任。如果您在项目中强制执行了内容信任,则将无法拉取未签名的镜像。阅读有关实施内容信任的更多信息。

推送镜像

在可以将镜像推送到 Harbor 之前,必须在 Harbor 界面中创建一个相应的项目。有关如何创建项目的信息,请参阅创建项目

要将 Windows 镜像推送到 Harbor 实例,您还必须将 docker daemon 设置为 allow-nondistributable-artifacts。有关更多信息,请参阅推送 Windows 镜像

您无法将镜像推送到代理缓存项目。请参阅有关代理缓存项目的更多信息。

首先,从 Docker 客户端登录

docker login <harbor_address>

标记镜像

docker tag ubuntu:14.04 <harbor_address>/demo/ubuntu:14.04

推送镜像

docker push <harbor_address>/demo/ubuntu:14.04

推送 Windows 镜像

如果您计划将 Windows 镜像推送到 Harbor 实例,则必须配置 docker daemon 以允许推送受限的制品,方法是在 daemon.json 文件中设置 allow-nondistributable-artifacts

{
"allow-nondistributable-artifacts" : ["myregistrydomain.com:5000"]
}

有关 allow-nondistributable-artifacts 设置的更多信息,请参阅Docker 的文档

向仓库添加描述

推送镜像后,项目管理员可以添加信息来描述仓库。

进入仓库并选择信息选项卡,然后单击编辑按钮。输入描述,然后单击保存以保存描述。

edit info

下载 Harbor 证书

用户可以单击注册表证书按钮来下载注册表证书。如果没有注册表证书按钮,请将服务器证书复制到目录 <your-data_volume>/ca_download/ 并将其命名为 ca.cert

browse project

删除仓库

删除仓库涉及两个步骤。

首先,在 Harbor 界面中删除仓库。这是软删除。您可以删除整个仓库或仅删除其标签之一。软删除后,仓库不再由 Harbor 管理,但是,仓库文件仍保留在 Harbor 存储中。

browse project

接下来,通过在 Harbor 界面中运行垃圾回收来删除仓库文件。

在 Kubernetes 中从 Harbor 拉取镜像

Kubernetes 用户可以轻松地部署带有存储在 Harbor 中的镜像的 Pod。这些设置与任何其他私有注册表类似。有两点需要注意

  1. 当您的 Harbor 实例托管 HTTP 并且证书是自签名时,您必须修改集群中每个工作节点上的 daemon.json。有关信息,请参阅https://docs.docker.net.cn/registry/insecure/#deploy-a-plain-http-registry
  2. 如果您的 Pod 引用私有项目下的镜像,则必须使用有权从项目拉取镜像的用户的凭据创建一个 secret。有关信息,请参阅https://kubernetes.ac.cn/docs/tasks/configure-pod-container/pull-image-private-registry/