Docker企业级仓库Harbor,根据该文章搭建两台服务器用作Harbor。
系统环境
HOSTNAME | IP | OS | Hard |
---|---|---|---|
harbor1 | 192.168.1.12 | Centos 7.6 | 4c4g |
harbor2 | 192.168.1.13 | Centos 7.6 | 4c4g |
完成后在 harbor1 域名中添加 harbor2 的DNS记录,如果不添加的话,无法解析域名将不会复制成功
同样参考部署 Harbor 中最后测试部分,在 harbor2 上创建项目 goharbor。接下来要做双主复制同步镜像
因为使用了域名,且是 https 访问,所以两台服务器必须要互换证书
在 harbor1 创建 harbor2 的证书目录
mkdir /etc/docker/certs.d/harbor2.yanjiang.chai
在 harbor2 创建 harbor1 的证书目录
mkdir /etc/docker/certs.d/harbor1.yanjiang.chai
cd /usr/local/harbor/pki
scp harbor1.yanjiang.chai.cert harbor2.yanjiang.chai:/etc/docker/certs.d/harbor1.yanjiang.chai
scp harbor1.yanjiang.chai.key harbor2.yanjiang.chai:/etc/docker/certs.d/harbor1.yanjiang.chai
scp ca.crt harbor2.yanjiang.chai:/etc/docker/certs.d/harbor1.yanjiang.chai
scp harbor1.yanjiang.chai.crt harbor2.yanjiang.chai:/etc/pki/ca-trust/source/anchors
两台全部重启 docker
update-ca-trust
systemctl restart docker
因为docker的重启,harbor可能会宕掉
cd /usr/local/harbor
./install.sh
harbor1
登录web界面:https://harbor1.yanjiang.chai
进入仓库管理,在 harbor1 上添加 harbor2 的信息
填写 harbor2 的信息
目标名:自定义
描述: 自定义
目标URL:如果是域名的形式,必须在有域名服务可以解析域名,hosts是没用的,除非是ip的形式访问
访问ID:harbor2 的登录用户名,或者在 harbor2 创建的账户
访问密码:账户密码
验证远程证书:取消复选框(因为证书是自签证书,所以不需要验证)最后测试连接成功后,再确定
若测试失败,请查看
/var/log/harbor/core.log
添加成功如下
创建复制规则
过滤器的填写参考官网的 创建复制规则
创建成功
harbor2
harbor2 做和 harbor1 同样的操作
同步测试
现在由于两个harbor中都有 goharbor 项目仓库,就将启动harbor的镜像选择一台全部上传。
这里以 harbor2 为例上传
$ docker login -u admin -p Harbor12345 https://harbor2.yanjiang.chai
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
这里就用脚本上传了
#!/bin/bash
HARBOR_IMAGE=$(docker image ls | grep -v TAG | awk ‘{print $1":"$2}‘)
HARBOR_REGISTRY="harbor2.yanjiang.chai"
for SOURCE_IMG in $HARBOR_IMAGE
do
CHANAGE_TAG_IMG="${HARBOR_REGISTRY}/${SOURCE_IMG}"
docker tag $SOURCE_IMG $CHANAGE_TAG_IMG
docker push $CHANAGE_TAG_IMG > /dev/null
if [ $? = 0 ]; then
echo -e "\033[33m${HARBOR_REGISTRY}/${SOURCE_IMG}\033[0m pushed \033[32mSuccessful\033[0m"
docker image rm $CHANAGE_TAG_IMG
else
echo -e "\033[33m${HARBOR_REGISTRY}/${SOURCE_IMG}\033[0m pushed \033[31mFailed\033[0m"
fi
done
现在在 harbor1 和 harbor2 的web界面都可以看到 goharbor 项目中已存在镜像。