Harbor是VMware公司开源的一个企业级Docker Registry项目,项目地址:https://github.com/goharbor/harbor 。
Harbor作为一个企业级私有Registry服务器,提供了更好的性能和安全,提升了用户使用Registry构建和运行环境传输镜像的效率。虽然Harbor和Registry都是私有镜像仓库的选择,但是Harbor的企业级特性更强,因此也是更多企业级用户的选择。
Harbor实现了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制,也常常和K8S中的namespace结合使用。此外,Harbor还提供了图形化的管理界面,我们可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
1.下载离线安装包
这里选择版本为1.7.0,下载完成后传输到你的服务器上并解压: sudo wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.0.tgz sudo tar xf harbor-offline-installer-v1.7.0.tgz
2.安装好docker-compose来管理harbor的容器服务。
使用GitHub源 curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose 验证一下: docker-compose --version
3.在解压的harbor目录中编辑harbor.cfg文件,修改一下hostname,其它的可以先不做配置:
hostname = 172.16.14.112
4.修改完配置接下来在harbor目录下执行以下命令:
./prepare
5.然后再执行install这个shell脚本进行install:
./install.sh
出现successfully就表示安装成功了。
6.查看容器都正常启动了:
docker-compose ps
7.在浏览器输入http://172.16.14.112访问harbor,使用默认配置密码登录之后,可以看到如下管理界面:
8.新创建用户hejp:
9.创建一个test测试项目:
10.在另外一台客户机器上面推送镜像,先配置好信任来源,走http推送
编辑/etc/docker/daemon.json文件,添加harbor服务器ip: { "insecure-registries" : [ "172.16.14.112" ] }
11.把要推送的镜像打个tag:
docker tag 172.16.14.112:5000/nginx:2.1 172.16.14.112/test/nginx:2.1
12.使用刚刚的hejp用户登录,然后执行推送镜像命令。
docker push 172.16.14.112/test/nginx:2.1
13.查看推送到harbor的镜像:
14.在其他docker主机中把镜像pull下来,也是要先登录然后再执行pull命令:
docker login 172.16.14.112 docker pull 172.16.14.112/test/nginx:2.1
15.退出我们的私有仓库
docker logout 172.16.14.112
16.如果想要继续更改harbor.cfg.配置,那么改完后需要重新初始化Harbor:
docker-compose down -v # 暂停Harbor实例群 ./prepare # 生成配置文件,根据 harbor.cfg 配置生成docker-compose文件。 docker-compose up -d # 后台启动Harbor实例群
17.想要暂停和重启Harbor:
docker-compose stop # 暂停 Harbor
docker-compose start # 启动 Harbor
18.不用Harbor了,那么可以彻底删除Harbor的数据和镜像文件:
# 彻底地删除 Harbor 的数据和镜像 rm -r /data/database rm -r /data/registry
遇到的问题1:执行install.sh
后很多报错,很多容器无法启动。兼容问题, 之前用的是1.10版本,降低版本到1.7就正常了。
遇到的问题2:安装完成后,登录一直显示账号密码报错,查看容器adminiserver一直在重启。
解决办法: 把/data目录下的secret文件都删除掉,应该是之前高版本harbor创建的,导致现在的harbor无权限访问这些文件。重启后然后服务就正常了。