Harbor在架构上主要有Proxy、 Registry、 Core services、 Database ( Harbor-db)、Log collector ( Harbor-log)、Job services 六个组件。
1.Proxy: Harbor 的Registry、UI、Token 服务等组件,都处在nginx 反向代理后边。
2.Registry:负责储存Docker 镜像,并处理Docker push/pull 命令。
4.Database (harbor-db) :为core services提 供数据库服务,负责储存用户权限、审计日志、Docker镜像分组信息等数据。
5.Job services:主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上。
6.Log collector (harbor-log) :负责收集其他组件的日志到一个地方。
Harbor的每个组件都是以Docker 容器的形式构建的,因此,使用Docker Compose 来对它进行部署。
1.总共分为7个容器运行,通过在docker- compose . yml所在目录中执行docker-compose ps命令来查看,名称分别为: nginx、harbor-jobservice、harbor-ui、harbor-db、harbor-adminserver、registry、harbor-log。
2.其中harbor-adminserver主要是作为一个后端的配置数据管理,并没有太多的其他功能。harbor-ui所要操作的所有数据都通过harbor:-adminserver这样一个数据配置管理中心来完成。
所有的请求都经过proxy代理,proxy代理转发给Core services和Registry,其中Core services包括UI界面、token令牌和webhook网页服务功能,Registry主要提供镜像存储功能。如果要进行下载上传镜像,要经过token令牌验证然后从Registry获取或上传镜像,每一次下载或上传都会生成日志记录,会记入Log collector,而用户身份权限及一些镜像语言信息会被存储在Database中。
需求:通过Harbor创建Docker私有仓库
:图形化管理Docker私有仓库镜像
主机 | 操作系统 | IP地址 | 软件 |
---|---|---|---|
server | CentOS7.6 | 192.168.11.16 | docker、docker-compose、harbor-offline-v1.1.2 |
Harbor 被部署为多个 Docker 容器,因此可以部署在任何支持 Docker 的 Linux 发行版 上。
服务端主机需要安装 Python、Docker 和 Docker Compose。
cd /usr/local
rz docker-compose
chmod 777 docker-compose
mv docker-compose /usr/local/bin
docker-compose -v
rz harbor-offline-installer-v1.10.8.tgz
tar zxvf harbor-offline-installer-v1.10.8.tgz
cd harbor
[root local]# vim harbor.yul
#修改第五行
hostname = 192.168.11.16
sh /usr/local/harbor/install.sh
docker images
cd /usr/local/harbor/
docker-compose ps
查看整体的运行状态
浏览器访问访问http://192.168.111.20,默认的管理员用户名和密码是 admin/Harbor12345。
192.168.11.16
用户名:admin
密码:Harbor12345
添加项目并填写项目名称
此时可使用Docker命令在本地通过127.0.0.1来登录和推送镜像。默认情况下,Register服务器在端口80上侦听。
#登陆
docker login -u admin -p Harbor12345 http://127.0.0.1
#下载镜像进行测试
docker pull tomcat
#镜像打标签
docker tag tomcat 127.0.0.1/public/tomcat:v1
#上传镜像到Harbor
docker push 127.0.0.1/public/tomcat:v1
查看图形化界面
上述操作都是在Harbor服务器本地操作。如果其他客户端上传镜像到Harbor,就会报如下错误。出现这问题的原因Docker Registry交互默认使用的是HTTPS,但是搭建私有镜像默认使用的是HTTP服务,所以与私有镜像交互时出现以下错误。
docker login -u admin -p Harbor12345 http://192.168.11.14
vim /usr/lib/systemd/system/docker.service
#修改内容地方
......
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.11.14 --containerd=/run/containerd/containerd.sock
......
#重启服务
systemctl daemon-reload
systemctl restart docker
#再次登录
docker login -u admin -p Harbor12345 http://192.168.11.14
扩展:错误集
docker pull nginx
docker tag nginx:latest 192.168.11.14/public/nginx:v1
docker push 192.168.11.14/public/nginx:v1
图形界面查看
Harbor可以使用docker-compose来管理Harbor。一些有用的命令如下所示,必须在与docker-compose.yml相同的目录中运行。
修改Harbor.cfg配置文件所需选项的步骤:要更改Harbour的配置文件时,请先停止现有的Harbor实例并更新Harbor.cfg;然后运行prepare脚本来填充配置;最后重新创建并启动Harbour的实例
cd /usr/local/harbor/
docker-compose down -v
cd /usr/local/harbor/
vim harbor.cfg
cd /usr/local/harbor/
./prepare
cd /usr/local/harbor/
docker-compose up -d
docker logout 192.168.11.14
docker login 192.168.11.14
lisi
Lisi12345
docker images
docker rmi 192.168.11.14/public/nginx:v1
docker pull 192.168.11.14/public/nginx:v1
移除Harbor服务容器同时保留镜像数据/数据库
1. 在Harbor服务器上操作
cd /usr/local/harbor/
docker-compose down -v
2.把项目中的镜像数据进行打包
持久数据,如镜像,数据库等在宿主机的/data/目录下,日志在宿主机的/var/log/Harbor/目录下
ls /data/registry/docker/registry/v2/repositories/myproject-sk
cd /data/registry/docker/registry/v2/repositories/myproject-sk
tar zcvf sk-registry.tar.gz ./*
3.如需重新部署,需要移除Harbor服务容器全部数据,持久数据,如镜像。
#持久数据,如镜像,数据库等在宿主机的/data目录下,日志在宿主机的/var/log/Harbor目录下
rm -rf /data/database
rm -rf /data/registry
这些参数需要在配置文件Harbor.cfg 中设置。如果用户更新它们并运行install.sh 脚本重新安装Harbour,参数将生效。具体参数如下:
这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动Harbor后在WebUI.上进行更新。如果进入Harbor.cfg,只会在第一次启动Harbor 时生效,随后对这些参数的更新,Harbor.cfg 将被忽略。
注意:如果选择通过UI设置这些参数,请确保在启动Harbor后立即执行此操作。具体来说,必须在注册或在Harbor中创建任何新用户之前设置所需的auth_mode。当系统中有用户时(除了默认的admin用户),auth_mode不能被修改。