docker 镜像仓库 Harbor 部署 以及 跨数据复制

时间:2023-03-08 16:31:04
docker 镜像仓库 Harbor 部署  以及 跨数据复制

docker 镜像仓库 Harbor 部署 跨数据复制

Harbor 是 Vmwar 公司开源的 企业级的 Docker Registry 管理项目

它主要 提供 Dcoker Registry 管理UI,可基于角色访问控制, AD/LDAP 集成,日志审核等功能,完全的支持中文。

Harbor 的所有组件都在 Dcoker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。

注: 由于 Harbor 是基于 Docker Registry V2 版本,所以 docker 版本必须 > = 1.10.0 docker-compose >= 1.6.0

开源项目地址:https://github.com/vmware/harbor

一、 使用docker compose 快速部署:

首先用 git 下载 源码。

git clone https://github.com/vmware/harbor

下载完以后 进入 harbor/Deploy 目录

初始化配置, 配置文件为harbor.cfg

## Configuration file of Harbor
# hostname 设置访问地址,支持IP,域名,主机名,禁止设置127.0.0.1
hostname = reg.mydomain.com # 访问协议,可设置 http,https
ui_url_protocol = http # 邮件通知, 配置邮件通知。
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false # harbor WEB UI登陆使用的密码
harbor_admin_password = Harbor12345 # 认证方式,这里支持多种认证方式,默认是 db_auth ,既mysql数据库存储认证。
# 这里还支持 ldap 以及 本地文件存储方式。
auth_mode = db_auth # ldap 服务器访问地址。
ldap_url = ldaps://ldap.mydomain.com
ldap_basedn = uid=%s,ou=people,dc=mydomain,dc=com # mysql root 账户的 密码
db_password = root123
self_registration = on
use_compressed_js = on
max_job_workers = 3
verify_remote_cert = on
customize_crt = on # 一些显示的设置.
crt_country = CN
crt_state = State
crt_location = CN
crt_organization = organization
crt_organizationalunit = organizational unit
crt_commonname = example.com
crt_email = example@example.com

修改为配置文件以后 运行./prepare脚本更新配置, 出现如下信息表示 更新完毕.

Generated configuration file: ./config/ui/env
Generated configuration file: ./config/ui/app.conf
Generated configuration file: ./config/registry/config.yml
Generated configuration file: ./config/db/env
Generated configuration file: ./config/jobservice/env
Clearing the configuration file: ./config/ui/private_key.pem
Clearing the configuration file: ./config/registry/root.crt
Generated configuration file: ./config/ui/private_key.pem
Generated configuration file: ./config/registry/root.crt
The configuration files are ready, please use docker-compose to start the service.

执行完毕会生成一个 docker-compose.yml  文件

配置 docker-compose.yml 文件中的 挂载目录,启动方式等选项。

使用 pip install docker-compose 安装 docker-compose

执行 docker-compose up -d 构建docker 容器

docker hub 下载镜像实在是慢, Harbor 提供了一个 配置本地镜像的配置: cd harbor/contrib/prebuild-install

运行 update_compose.sh 配置本地的镜像仓库

我们也可以配置 --registry-mirror= 来加速下载 使用 daocloud 提供的 mirror http://b438f72b.m.daocloud.io

[root@localhost Deploy]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
deploy_jobservice latest be822b50163d minutes ago 804.6 MB
deploy_mysql latest 5015ce56c9d5 minutes ago 328.8 MB
deploy_ui latest 8596c12dbeba About an hour ago 808.1 MB
deploy_log latest 6a74c6f52a2b About an hour ago 187.9 MB
mysql 5.6 5e0f1b09e25e days ago 328.8 MB
ubuntu 14.04 0ccb13bf1954 days ago 187.9 MB
golang 1.6. 8ecba0e9bd48 weeks ago 753.5 MB
nginx 1.9 c8c29d842c09 weeks ago 182.7 MB
registry 2.4. 8b162eee2794 months ago 171.1 MB
[root@localhost Deploy]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9704f42b05d5 deploy_jobservice "/go/bin/harbor_jobse" minutes ago Up minutes deploy_jobservice_1
0f8ff9b099d2 library/nginx:1.9 "nginx -g 'daemon off" minutes ago Up minutes 0.0.0.0:->/tcp, 0.0.0.0:->/tcp deploy_proxy_1
6b0159939874 deploy_ui "/go/bin/harbor_ui" minutes ago Up minutes /tcp deploy_ui_1
6f2298da0f67 deploy_mysql "docker-entrypoint.sh" minutes ago Up minutes /tcp deploy_mysql_1
2dbca506e1ea library/registry:2.4. "/bin/registry serve " minutes ago Up minutes /tcp, 0.0.0.0:->/tcp deploy_registry_1
fc5b1a201c72 deploy_log "/bin/sh -c 'cron && " minutes ago Up minutes 0.0.0.0:->/tcp deploy_log_1

完成以后,使用 http://userIP/ 访问 Harbor

使用 帐号 admin, 密码为 配置文件中 harbor_admin_password = Harbor12345 的密码 登陆

至此, Harbor 已经搭建完成,具体在 WEB UI 下面操作也是非常的简单,只有几个选项。

docker 需要上传 push 镜像,需要在 docker 中配置 --insecure-registry userIP 或者在nginx 中配置 https

配置完毕以后,重启 docker

使用 docker login userIP 登陆 Harbor

[root@swarm-manager ~]#docker login 10.6.0.192
Username (admin): admin
Password:
Login Succeeded

查看 本地 images

[root@swarm-manager ~]#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mongodb latest 8af05a33e512 weeks ago 958.4 MB
sath89/oracle-12c latest 7effebcd18ee weeks ago 5.692 GB
centos latest 778a53015523 months ago 196.7 MB

tag 修改 image 的名字. 格式为: userip/项目名/image名字:版本号

[root@swarm-manager ~]#docker tag mongodb 10.6.0.192/jicki/mongodb:1.0

[root@swarm-manager ~]#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.6.0.192/jicki/mongodb 1.0 8af05a33e512 weeks ago 958.4 MB
mongodb latest 8af05a33e512 weeks ago 958.4 MB
sath89/oracle-12c latest 7effebcd18ee weeks ago 5.692 GB
centos latest 778a53015523 months ago 196.7 MB

push 镜像到 Harbor

[root@swarm-manager ~]#docker push 10.6.0.192/jicki/mongodb:1.0
The push refers to a repository [10.6.0.192/jicki/mongodb]
c1e4cd91bcd4: Pushed
d9a948970255: Pushed
dd9b001e77ee: Pushed
625440e212f2: Pushed
75fa23acbccb: Pushed
fd269370dcf4: Pushed
44e3199c59b3: Pushed
db3474cfcfbc: Pushed
5f70bf18a086: Pushed
6a6c96337be1: Pushed
1.0: digest: sha256:c7d2e619d86089ffef373819a99df1390c4f2df4aeec9c1f7945c55d63edc670 size:

登陆 WEB UI , 选择项目, 项目名称 jicki , 进入 既可查看刚才上传的 image

docker 镜像仓库 Harbor 部署  以及 跨数据复制

至此, Harbor 都已经部署完成。

二、 配置Docker 镜像复制。

docker 镜像仓库 Harbor 部署  以及 跨数据复制

docker 镜像仓库 Harbor 部署  以及 跨数据复制

配置 2个 Harbor

IP 1 = 10.6.0.192

IP 2 = 10.6.0.196

在 10.6.0.192 上面我们已经push 了一个 镜像,所以我们将这台当作 主节点,10.6.0.196 为从复制节点。

进入 WEB UI 选择 项目, 选择项目为 jicki , 然后选择 复制 选项。

docker 镜像仓库 Harbor 部署  以及 跨数据复制

点击 新增策略

docker 镜像仓库 Harbor 部署  以及 跨数据复制

docker 镜像仓库 Harbor 部署  以及 跨数据复制

创建完毕以后,我们可以看 复制策略 已经有一栏。

复制任务里面 也已经有一个任务。

docker 镜像仓库 Harbor 部署  以及 跨数据复制

稍等一会,可以看到 复制任务里面 那个任务已经提示 完成。

docker 镜像仓库 Harbor 部署  以及 跨数据复制

登陆 10.6.0.196 的 WEB UI

docker 镜像仓库 Harbor 部署  以及 跨数据复制

我们可以看到, 镜像已经复制过来。而且连 日志操作 也会复制过来。

harbor 升级

一、

cd harbor/Deploy/

执行 docker-compose down

删除原有的容器

二、

备份整个目录

mv harbor/ /tm/harbor

三、

重新 下载新的源码

git clone https://github.com/vmware/harbor

四、
如果harbor 是迁移到其他服务器,请先执行数据备份

cd harbor/migration/

修改 migration.cfg 文件里面的 数据库 帐号密码

docker build -t migrate-tool .

五、
运行一个临时数据库容器,注意:/data/database 为你设置的挂载数据库的目录 /path/to/backup 数据备份的目录

数据库备份:
docker run -ti --rm -v /data/database:/var/lib/mysql -v /path/to/backup:/harbor-migration/backup migrate-tool backup

六、
数据库还原:
docker run -ti --rm -v /data/database:/var/lib/mysql migrate-tool up head

七、
对比一下配置文件:

cd harbor/Deploy/

diff harbor.cfg /tmp/harbor/Deploy/harbor.cfg

diff docker-compose.yaml /tmp/harbor/Deploy/docker-compose.yaml

如果修改了端口 必须更新 cd harbor/Deploy/config/nginx/nginx.conf 里面的端口

八、
执行 ./prepare 生成新的配置文件

cd /harbor/Deploy/

./prepare

九、
最后build 新的镜像,启动容器

cd /harbor/Deploy/

docker-compose up --build -d

十、
登陆 WEB UI 检查是否OK