搭建Harbor仓库
一、安装 docker
rm -rf /etc/yum.repos.d/* #CentOS 7 安装docker依赖三个yum源:Base,Extras,docker-ce wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum clean all yum -y install docker-ce #启动Docker服务并设置开机自启 systemctl enable --now docker #查看docker版本 docker version
二、安装docker compose
通过pip安装
yum -y install python3 pip3 install --upgrade pip pip3 install docker-compose
三、下载Harbor安装包并解压缩
wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.6.tgz mkdir /apps tar xvf harbor-offline-installer-v1.7.6.tgz -C /apps
四、修改harbor配置文件
[root@Harbor1 ~]#vim /apps/harbor/harbor.cfg #只需要修改下面两行 hostname = 192.168.18.71 #修改此行,指向当前主机IP 或 FQDN harbor_admin_password = 123456 #修改此行指定harbor登录用户admin的密码,默认用户/密 码:admin/Harbor12345
五、运行harbor安装脚本
[root@Harbor1 ~]# /apps/harbor/install.sh
安装harbor后会自动开启很多相关容器
[root@Harbor1 ~] # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e03e58e5dc0 goharbor/nginx-photon:v1.7.6 "nginx -g ‘daemon of…" 13 seconds ago Up 12 seconds (health: starting) 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:4443->4443/tcp, :::4443->4443/tcp nginx
2364ac8789ae goharbor/harbor-portal:v1.7.6 "nginx -g ‘daemon of…" 14 seconds ago Up 12 seconds (health: starting) 80/tcp harbor-portal
f440ce09e7c1 goharbor/harbor-jobservice:v1.7.6 "/harbor/start.sh" 14 seconds ago Up 12 seconds harbor-jobservice
fede4fceed84 goharbor/harbor-core:v1.7.6 "/harbor/start.sh" 15 seconds ago Up 13 seconds (health: starting) harbor-core
dff6b5c68d3c goharbor/harbor-adminserver:v1.7.6 "/harbor/start.sh" 16 seconds ago Up 14 seconds (health: starting) harbor-adminserver
01f192ad44d0 goharbor/harbor-db:v1.7.6 "/entrypoint.sh post…" 16 seconds ago Up 14 seconds (health: starting) 5432/tcp harbor-db
16e252af4e21 goharbor/redis-photon:v1.7.6 "docker-entrypoint.s…" 16 seconds ago Up 14 seconds 6379/tcp redis
1b863e398f01 goharbor/harbor-registryctl:v1.7.6 "/harbor/start.sh" 16 seconds ago Up 14 seconds (health: starting) registryctl
e0a62d3e51f8 goharbor/registry-photon:v2.6.2-v1.7.6 "/entrypoint.sh /etc…" 16 seconds ago Up 14 seconds (health: starting) 5000/tcp registry
77f844cb252b goharbor/harbor-log:v1.7.6 "/bin/sh -c /usr/loc…" 17 seconds ago Up 16 seconds (health: starting) 127.0.0.1:1514->10514/tcp harbor-log
六、登陆harbor的web页面,并创建项目
- 用浏览器访问 http://192.168.18.71/
- 用户名: admin
- 密码: 123456 即前面harbor.cfg中指定的密码
七、命令行登录harbor并上传镜像到仓库
编辑/etc/docker/daemon.json,添加 "insecure-registries":["http://192.168.18.71"]
[root@Harbor1 ~]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://kroknwmp.mirror.aliyuncs.com"], "insecure-registries":["http://192.168.18.71"] }
[root@Harbor1 ~]# systemctl restart docker
命令行登陆harbor
[root@Harbor1 ~]# docker login 192.168.18.71 Username: admin Password: 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
给本地镜像打标签并上传到harbor
修改 images 的名称,不修改成指定格式无法将镜像上传到 harbor 仓库
[root@centos7 ~]# docker tag alpine:latest 192.168.18.71/test/alpine:latest [root@centos7 ~]# docker push 192.168.18.71/test/alpine:latest The push refers to repository [192.168.18.71/test/alpine] e2eb06d8af82: Pushed latest: digest: sha256:69704ef328d05a9f806b6b8502915e6a0a4faa4d72018dc42343f511490daf8a size: 528
访问harbor网站验证上传镜像成功
实现Harbor的高可用
Harbor支持基于策略的Docker镜像复制功能,这类似于MySQL的主从同步,其可以实现不同的数据中
心、不同的运行环境之间同步镜像,并提供友好的管理界面,大大简化了实际运维中的镜像管理工作,
已经有用很多互联网公司使用harbor搭建内网docker仓库的案例,并且还有实现了双向复制功能
一、在另一台主机上搭建Harbor
参照上述步骤,在第二台主机上搭建Harbor
注意:
- harbor.cfg中配置文件中 hostname 修改为本机地址
[root@Harbor2 ~]#vim /apps/harbor/harbor.cfg hostname = 192.168.18.72 harbor_admin_password = 123456
- 编辑/etc/docker/daemon.json,添加 "insecure-registries":["http://192.168.18.72"]
[root@Harbor2 ~]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://kroknwmp.mirror.aliyuncs.com"], "insecure-registries":["http://192.168.18.72"] }
二、第二台harbor上新建项目
参考第一台harbor服务器的项目名称,在第二台harbor服务器上新建与之同名的项目
三、第二台harbor上仓库管理中新建目标
参考第一台主机信息,新建复制(同步)目标信息,将第一台主机设为复制的目标
输入第一台harbor服务器上的主机和用户信息
四、第二台harbor上新建复制规则实现到第一台harbor的单向复制
在第二台harbor上建立复制的目标主机,即第一台harbor主机,将第二台harbor上面的镜像复制到第一台harbor上
五、在第一台harbor主机上重复上面操作
以上操作,只是实现了从第二台harbor主机192.168.18.72到第一台harbor主机192.168.18.71的单向同步
在第一台harbor上再执行下面操作,才实现双向同步
六、确认同步成功
在第二台harbor主机上可以查看到从第一台主机同步过来的镜像
七、在第二台harbor上传镜像验证是否可以双向同步
[root@Harbor2 ~]# docker login 192.168.18.72 [root@Harbor2 ~]# docker tag httpd-busybox:v1.0 192.168.18.72/test/httpd-busybox:v1.0 [root@Harbor2 ~]# docker push 192.168.18.72/test/httpd-busybox:v1.0 The push refers to repository [192.168.18.72/test/httpd-busybox] e5adc4f4e456: Pushed 5b8c72934dfc: Pushed v1.0: digest: sha256:885a1ebcb2d75b3981abbe0167ba278705e4a1ba755db5ffef1c4dddf07ad999 size: 734
两台Harbor已实现双向同步