简介
本文用实例介绍Docker Compose安装harbor的方法。
harbor是公司内部的镜像库,类似于Java中的maven私库。镜像直接上传到harbor上边,其他服务器就都可以从harbor上拉取了。
harbor基于docker registry v2的基础上为用户提供了图形管理界面。docker registry v2是私有镜像仓库,在实际的企业级生产环境中很少会直接使用docker registry v2,而是使用harbor。
备注
harbor的docker compose的资源内容很多,无法像其他工具一样直接写在docker-compose.yml中然后拉取,必须要手动下载一下它的压缩包(里边会包含docker-compose.yml、镜像文件等)。
1.下载压缩包
github地址:https://github.com/goharbor/harbor/releases/
本处我下载的版本是:2.10.0
2.将压缩包上传到服务器
本处我上传到服务器的此路径:/work/devops/harbor。解压命令为:
tar xf harbor-offline-installer-v2.10.0.tgz
解压结果如下:
3.修改配置
1.将harbor.yml.tmpl复制为harbor.yml文件
cp harbor.yml.tmpl harbor.yml
2.创建一个用于存放harbor数据的文件夹
mkdir -p /work/devops/harbor/harbor/data
3.修改harbor.yml配置
- hostname : 设置成外网ip或者局域网ip(不要设置为localhost或者127.0.0.1)
- port: 设置访问端口
- https:https的配置内容(本处先不用http,将它注释掉。配置http的方法:certificate放置.crt文件;private_key放置.key文件。)。
- harbor_admin_password:admin账户的密码。默认不用更改。账号:admin 密码:Harbor12345
- data_volume:配置data目录(设置本处我设置为上边创建的目录:/work/devops/harbor/harbor/data)
如下图所示:
4.安装harbor
注意
harbor在安装时,会同时创建几个docker容器:nginx、redis,名字也是nginx、redis。如果项目里有相应名字的容器,需要先将它重命名,否则harbor安装会报错:Error response from daemon: Conflict. The container name “/redis“ is already in use by container
运行如下命令:
./install.sh
注意
无需运行./prepare
结果
可以看到:启动了9个容器:
- harbor-portal:在比较旧的版本叫做admin server,是harbor应用的门户。即:前端web服务应用界面。本质也是nginx,用于部署前端应用。
- harbor-core:这是Harbor的核心后端服务,主要token的发放与验证、webhook等服务及部分tpl UI界面。
- harbor-db:harbor-db是harbor的数据库,这里保存了系统的job以及项目、人员权限管理。
- harbor-jobservice:harbor-jobservice 是harbor的job管理模块,job在harbor里面主要是为了实现镜像在仓库之间同步;
- harbor-log:harbor-log是harbor的日志服务,统一管理harbor的日志。通过inspect可以看出容器统一将日志输出的syslog。
- nginx:充当逆向代理服务网关的功能,负责流量转发和安全验证。
- redis:缓存、session等
- registry:registry就是docker原生的仓库,负责保存docker镜像。
- registryctl:harbor与registry交互控制服务
5.启动与关闭
在上一步安装完harbor之后,会生成一个docker-compose.yml文件,是个普通的docker compose配置文件。直接通过它启动和关闭harbor即可,命令如下:
# 启动 docker compose start # 停止 docker compose stop # 停止并删除 docker-compose down # 创建并启动容器,参数“-d”表示后台运行命令 docker-compose up -d
6.访问页面
(如果使用了ip形式的SSL证书支持https,就这样访问:https://192.168.5.193:端口号。端口号对应的是上边harbor.yml的https: port对应的端口号)
输入账号和密码(admin Harbor12345),然后登录
7.测试推送镜像
1.在页面上创建项目
结果:
2.配置docker支持http
(如果harbor已经支持https访问,则无需操作此步。)
修改客户端的docker配置:/etc/docker/daemon.json
添加如下内容:
"insecure-registries":["192.168.5.193:15001"]
我的整个daemon.json文件如下:
{ "registry-mirrors": ["https://ustc-edu-cn.mirror.aliyuncs.com"], "insecure-registries":["192.168.5.193:15001"] }
然后重新加载并重启docker
sudo systemctl daemon-reload sudo systemctl restart docker
注意:此时要启动一下harbor,因为重启docker后,harbor被关闭了:
docker compose start
3.登录harbor
docker login 192.168.5.193:15001
回车后输入账号和密码即可:
4.打标签
本处我将redis的docker镜像上传到harbor。
1.查看所有docker镜像
命令
docker images
结果
2.打标签
命令格式
docker tag image_id(本地需要push的镜像) ip:port/项目名/保存的镜像名(例如:xxx:version1)
本处执行的命令为:
docker tag nginx:latest 192.168.5.193:15001/custom_image/nginx:latest
或者
docker tag 605c77e624dd 192.168.5.193:15001/custom_image/nginx:latest
5.上传镜像
命令格式
docker push ip:port/项目名/保存的镜像名(例如:xxx:version1)
本处我执行的命令为:
docker push 192.168.5.193:15001/custom_image/nginx:latest
结果:
6.去页面查看
7.拉取镜像
命令格式
docker pull ip:port/项目名/保存的镜像名(例如:xxx:version1)
本处我执行的命令为:
docker pull 192.168.5.193:15001/custom_image/nginx:latest
注意
拉取镜像时,也必须要保证已经登录了harbor,否则会有401异常。
8.修改配置
如果后期需要修改harbor.yml配置,修改后需要先删除harbor容器:
docker compose down
然后重新安装:
./install.sh
问题解决
有时候突然访问不了harbor了,报错如下:
解决方法:
换个浏览器,或者Ctrl+Shift+N用匿名窗口打开。(我清浏览器缓存、清Application信息,都不管用) 。
请先
!