Harbor Registry(又称 Harbor 云原生制品仓库或 Harbor 镜像仓库)。由 VMware 公司中国研发中心云原生实验室原创,并于 2016 年 3 月开源。
harbor的通信默认为https,但想使用https则需颁发证书,如果不想使用https通信则需修改docker和containerd的配置。(配置方法见后文)
演示架构如下:共三台服务器组成。
docker | harbor | containerd |
26.91 | 26.93 | 26.92 |
制作镜像 | 镜像仓库 | 拉取镜像 |
harbor的安装:
在26.93这台服务器上,安装docker并修改daemon.json,然后重启dcoker。
{
"registry-mirrors": ["https://frz7i079.mirror.aliyuncs.com"],
"insecure-registries":["192.168.26.93"]
}
json每行以逗号隔开。
安装docker-compose
yum install docker-compose或将准备的离线安装包解压,然后进入到harbor目录中,
其中harbor.v2.3.5.tar.gz为离线镜像,使用docker load -i harbor.v2.3.5.tar.gz将其导入。
harbor.yml.tmp为模板文件, cp harbor.yml.tmp harbor.yml,vi harbor.yml进行配置修改:
hostname:改为本机地址x.x.26.93,删除https及其端口这两行。再往下可看到管理员密码为Harbor12345 ,wq 。
运行prepare脚本 ./ prepare , 运行 ./install.sh ,结束后打开web输入ip即可访问harbor,用户名admin ,密码为Harbor12345 。
在web中可进行创建用户创建项目等操作,其中用户可以设置身份,如管理员、访客等;其中的项目和镜像命名法中的分类为一个意思。(仓库地址/分类/镜像名:tag,例如docker.io/library/nginx:latest)。此处创建一个名为tom的管理员作为后面用来登录的账号。
我们需创建一个项目用来存放上传的镜像,项目名cka,访问级别:公开(指匿名用户拉取无需登录,但无论是否公开,推送镜像时都需登录),存储容量:-1 GiB (指无容量上限)。
到此harbor端基本配置完毕,需注意的是:推送镜像前需要对镜像做分类。
把镜像命名为 192.168.26.93/cka/镜像名:tag 192.168.26.93是harbor服务器,cka是分
类(项目)
docker tag nginx 192.168.26.93/cka/nginx:v1
我们需要配置推送端26.91的daemon.json,此处添加的地址仍为harbor,然后wq后重启26.91的docker。
{
"registry-mirrors":["https://frz7i079.mirror.aliyuncs.com"],
"insecure-registries":["192.168.26.93"]
}
一切准备就绪,登录harbor服务器:docker login 192.168.26.93 -u tom -p xxxxx (用户名和密码也可不写在命令中),登陆后会出现一个文件来记录登录信息,可使用ls .docker/ 查看到config.json。其中auth后的这串字符为用户名和密码,可使用echo 字符 | base64 -d来解密。
登录成功后可以docker push 192.168.26.93/cka/nginx:v1来推送镜像至harbor仓库。
在26.92服务器上下载26.91推送至harbor仓库的镜像时,需先编辑/etc/containerd/config.toml,找到mirrors,复制粘贴并修改,添加harbor端ip,并将第二行https改为http,
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://frz7i079.mirror.aliyuncs.com"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.26.93"]
endpoint = ["http://192.168.26.93"]
然后重启containerd,此时crictl可拉取harbor仓库的镜像。
如想使用nerdctl拉取镜像可在拉取命令中添加参数 --insecure-registry 来拉取:
nerdctl --insecure-registry pull 192.168.26.93/cka/nginx:1
如果不想加参数来拉取则需修改配置文件/etc/nerdctl/nerdctl.toml,将insecure_registry = fales 改为true。即可拉取。
需注意的是crictl没有登录功能,如果遇到项目访问级别为私有的镜像,则需登录。但是nerdctl有登录功能。
如果想重启harbor服务,则需进入harbor目录下,然后docker-compose stop ,然后docker-compose up -d 即可,等待运行完成。