# containerd教程 - 5 containerd使用Harbor镜像仓库
我们可以使用 Dockerhub 作为镜像仓库,但是在国外太慢了,使用阿里云的只能免费使用个人版,如果想搭建企业级的私有镜像仓库,还是推荐使用 Harbor。
下面讲解一下 containerd 使用 Harbor 作为私有镜像仓库。
# 5.1 Harbor环境准备
Harbor 的安装,可以参考本站的 Harbor教程 (opens new window) 中的 Harbor安装 (opens new window)。
这里就不赘述了。
# 5.2 配置containerd使用Harbor仓库
# 1 修改containerd主机域名解析
现在我这里 Harbor 是在主机 192.168.0.108
上。
containerd 是在主机 192.168.0.107
上。
这里我需要在 containerd 的主机上配置一个域名,指向 Harbor 主机地址,在 containerd 主机的 hosts 文件中配置如下:
192.168.0.108 harbor.local
这里的 harbor.local
是因为在安装 Harbor 的时候,指定了 Harbor 的 hostname
是 harbor.local
,所以这里与之对应。
hosts 配置完成,ping 一下看是否能访问 Harbor 主机,是否指向 Harbor 的主机地址:
ping harbor.local
# 2 修改containerd配置文件
编辑 containerd 配置文件 sodu vim /etc/containerd/config.toml
。
配置文件的内容比较多,在下面的地方添加:
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = "/etc/containerd/certs.d" # 要添加的内容
[plugins."io.containerd.grpc.v1.cri".registry.auths]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.headers]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".x509_key_pair_streaming]
2
3
4
5
6
7
8
9
10
11
12
/etc/containerd/certs.d
是一个文件夹,现在还没有,所以创建文件夹:
mkdir -p /etc/containerd/certs.d/harbor.local
harbor.local
是和 Harbor 域名相同的文件夹,如果不是 443
端口,那么还需要补充端口,例如 harbor.local:8080
。
现在在 harbor.local
文件夹下新建 hosts.toml
文件,内容如下:
server = "https://harbor.local"
[host."https://harbor.local"]
capabilities = ["pull", "resolve", "push"]
skip_verify = true
2
3
4
上面的配置不会验证 https 证书,如果要验证自签名的 https 证书,还需要配置 CA 证书:
server = "https://harbor.local"
[host."https://harbor.local"]
capabilities = ["pull", "resolve", "push"]
ca = "/etc/containerd/certs.d/harbor.local/ca.crt" # ca 证书
skip_verify = false
2
3
4
5
配置完成,重启一下containerd :
systemctl restart containerd
# 5.3 推送镜像到Harbor
# 1 准备镜像
首先从 dockerhub 下载一个镜像到本地:
ctr images pull docker.io/library/nginx:latest
待会把这个镜像上传到私有仓库。
# 2 给镜像打标签
在上传之前,需要先给镜像打标签:
ctr image tag docker.io/library/nginx:latest harbor.local/library/nginx:1.0.0
harbor.local
是私有仓库的主机;library
是 Harbor 中的项目名称,要与之对应;给 nginx
添加了 1.0.0
的tag。
打完标签,会多出一个镜像,这个镜像和原来的镜像是一样的,sha256 都是一样的。
# 3 推送镜像到Harbor
使用 pull
命令推送镜像:
ctr image push --platform linux/arm64 --hosts-dir "/etc/containerd/certs.d" -u admin:Harbor12345 harbor.local/library/nginx:1.0.1
ctr image push
:推送镜像的命令;--platform linux/arm64
:指定平台,不指定可能会报错;--hosts-dir "/etc/containerd/certs.d"
:指定主机配置文件的目录;-u admin:Harbor12345
:指定 Harbor 的用户名和密码;harbor.local/library/nginx:1.0.1
:镜像名称;
如果 Harbor 是 http 协议,可以添加 --plain-http
参数使用 http 协议:
ctr image push --platform linux/arm64 --plain-http --hosts-dir "/etc/containerd/certs.d" -u admin:Harbor12345 harbor.local/library/nginx:1.0.1
# 5.4 从Harbor下载镜像
上面已经将镜像上传到 Harbor 仓库了,现在可以从 Harbor 仓库拉取镜像了。
因为本地是已经存在了相同的镜像,所以先将本地的镜像删除,然后拉取镜像:
ctr image pull --hosts-dir "/etc/containerd/certs.d" harbor.local/library/nginx:1.0.0
如果镜像仓库不是公开的,还需要添加用户名和密码:
ctr image pull --hosts-dir "/etc/containerd/certs.d" -u admin:Harbor12345 harbor.local/library/nginx:1.0.0