所有分类
  • 所有分类
  • 未分类

Docker Compose–安装harbor–方法/实例

简介

本文用实例介绍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个容器:

  1. harbor-portal:在比较旧的版本叫做admin server,是harbor应用的门户。即:前端web服务应用界面。本质也是nginx,用于部署前端应用。
  2. harbor-core:这是Harbor的核心后端服务,主要token的发放与验证、webhook等服务及部分tpl UI界面。
  3. harbor-db:harbor-db是harbor的数据库,这里保存了系统的job以及项目、人员权限管理。
  4. harbor-jobservice:harbor-jobservice 是harbor的job管理模块,job在harbor里面主要是为了实现镜像在仓库之间同步;
  5. harbor-log:harbor-log是harbor的日志服务,统一管理harbor的日志。通过inspect可以看出容器统一将日志输出的syslog。
  6. nginx:充当逆向代理服务网关的功能,负责流量转发和安全验证。
  7. redis:缓存、session等
  8. registry:registry就是docker原生的仓库,负责保存docker镜像。
  9. 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.访问页面

访问:http://192.168.5.193:15001

(如果使用了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信息,都不管用) 。

0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录