Harbor私有仓库部署与管理

一、harbor简介

Harbor是VMware公司的开源级的企业级DockerRegistry(仓库)项目,项目地址为 https://github.com/vmware/harbor.
Harbor的目标是帮助用户迅速搭建一个企业级的DockerRegistry服务。
Harbor以docker公司开源的registry为基础,提供了管理UI,基于角色的访问控制(Role Based Access Control),AD/LDAP集成,以及审计日志(Auditlogging)等企业用户需求的功能,同时还原生支持中文。
Harbor的每个组件都是以Docker容器的形式构建的,使用docker-compose来对它进行部署。用于部署Harbor的docker-compose模板位于/usr/local/bin/harbor/docker-compose.yml(自定义)
Docker harbor有可视化的web管理界面,可以方便管理Docker镜像,又提供了多个项目的镜像权限管理及控制功能

二、harbor的优势

1、基于角色控制:用户与Docker镜像仓库通过"项目"进行组织管理,一个用户可以对多个镜像仓库在统一命名空间(projec)里有不同的权限
2、图形化用户界面:用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间
3、审计管理:所有这怒地镜像仓库的错都可以被记录追溯,用于审计管理
4、基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制。
5、支持LDAP认证:Harbor的用户授权可以使用已经存在的用户。
6、镜像删除和垃圾回收:image可以被删除并且回收image占用的空间。
7、简单的部署功能:harbor提供了online、offline安装,此外还提供了virtualappliance安装
8、harbor和docker registry的关系:harbor实质上是对docker registry做了封装,扩展了自己的业务模板。

三、harbor的简易架构

harbor主要有6大模块,默认的每个harbor的组件都被封装成一个docker container,所以可以通过compose来部署harbor,总共分为8个容器运行,通过docker-compose ps来查看

在这里插入图片描述

●Proxy
  通过以一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务
●Registry
  负载存储Docker镜像,并处理docker push/pull命令
●Core services
  Harbor的核心功能,包括UI、webhook、token服务
●Database
  为core services提供数据库服务
●Log collector
  负责收集其他组件的log,供日后进行分析

四、部署harbor服务

1.确保docker-compose已能使用
[root@localhost ~]# mv docker-compose /usr/local/bin/
[root@localhost ~]# chmod +x /usr/local/bin/docker-compose
[root@localhost ~]# docker-compose -v
docker-compose version 1.21.1, build 5a3f1a3
2.将harbor-offline-installer-v1.2.2.tgz软件包上传到/root目录下,解压到/usr/local/目录下
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
3. 配置 Harbor 参数文件
vim /usr/local/harbor/harbor.cfg
//5 hostname = 14.0.0.20
4.启动 Harbor
[root@localhost ~]# cd /usr/local/harbor/
[root@localhost harbor]# ls
common                     docker-compose.yml     harbor.v1.2.2.tar.gz  NOTICE
docker-compose.clair.yml   harbor_1_1_0_template  install.sh            prepare
docker-compose.notary.yml  harbor.cfg             LICENSE               upgrade
[root@localhost harbor]# sh install.sh  
5. 查看 Harbor 启动镜像
//查看镜像 docker images
//查看容器 docker ps -a
//查看compose编排的容器 docker-compose ps
6.打开浏览器访问 http://14.0.0.20的管理页面
默认的管理员用户名和密码是 admin/Harbor12345

7.添加项目并且填写名称 添加项目并且填写名称
在这里插入图片描述

新建项目myimages
在这里插入图片描述

此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下,
Register 服务器在端口 80 上侦听。

//登录 docker login -u admin -p Harbor12345 http://127.0.0.1
//下载镜像进行测试 下载镜像进行测试 
docker pull nginx
//镜像打标签 
docker tag nginx 127.0.0.1/myimages/nginx:v1
//上传镜像到 上传镜像到 Harbor 
docker push 127.0.0.1/myimages/nginx:v1

以上操作都是在 Harbor 服务器本地操作。如果其他客户端上传镜像到 Harbor,就会报如下错误。出现这问题的原因 Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以下错误。

[root@localhost ~]# docker login -u admin -p Harbor12345 http://14.0.0.20
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://14.0.0.20/v2/: dial tcp 14.0.0.20:443: connect: connection refused

如何解决:

[root@client ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// -- insecure-registry 14.0.0.30 -- containerd=/run/containerd/containerd.sock
[root@client ~]# systemctl daemon-reload 
[root@client ~]# systemctl restart docker
[root@client ~]# docker login -u admin -p Harbor12345 http://14.0.0.20

[root@localhost ~]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
14.0.0.20/myimages/nginx   v1                  7e4d58f0e5f3        13 days ago         133MB
[root@localhost ~]# docker tag 14.0.0.20/myimages/nginx:v1 14.0.0.20/myimages/nginx:v2
[root@localhost ~]# docker push 14.0.0.20/myimages/nginx:v2

在这里插入图片描述

五、维护管理harbor

可以使用 docker-compose 来管理 Harbor。一些有用的命令如下所示,必须在与
docker-compose.yml 相同的目录中运行。
修改 Harbor.cfg 配置文件
要更改 Harbour 的配置文件时,请先停止现有的 Harbor 实例并更新 Harbor.cfg;然
后运行 prepare 脚本来填充配置;最后重新创建并启动 Harbor 的实例。

1.停止现有的 Harbor 实例
docker-compose down -v
[root@localhost harbor]# pwd
/usr/local/harbor
[root@localhost harbor]# ls
common                     docker-compose.yml     harbor.v1.2.2.tar.gz  NOTICE
docker-compose.clair.yml   harbor_1_1_0_template  install.sh            prepare
docker-compose.notary.yml  harbor.cfg             LICENSE               upgrade
2.更新 Harbor.cfg
[root@localhost harbor]# vim Harbor.cfg
3.运行 prepare 脚本来填充配置
[root@localhost harbor]# ./prepare
4.重新创建并启动 Harbor 的实例
如果出现如下报错: docker-compose up -d
Creating network "harbor_harbor" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables -- wait -t nat -I DOCKER -i br-25094fc09b3c -j RETURN: iptables: No chain/target/match by that name.
(exit status 1))
解决方法:关闭防火墙后, 解决:关闭防火墙后, docker需要重启 
systemctl restart docker 
docker-compose up -d

//创建用户chen,并将其创建为myimages项目的开发人员
在这里插入图片描述
在这里插入图片描述

#在客户端上操作:使用新创建的开发人员用户登录

[root@localhost ~]# docker logout 14.0.0.20
Removing login credentials for 14.0.0.20
[root@localhost ~]# docker login 14.0.0.20
Username: chen      #使用新创建的开发人员用户
Password:
[root@localhost ~]# docker pull 14.0.0.20/myimages/nginx:v1
v1: Pulling from myimages/nginx
Digest: sha256:794275d96b4ab96eeb954728a7bf11156570e8372ecd5ed0cbc7280313a27d19
Status: Image is up to date for 14.0.0.20/myimages/nginx:v1
14.0.0.20/myimages/nginx:v1
[root@localhost ~]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
14.0.0.20/myimages/nginx   v1                  7e4d58f0e5f3        13 days ago         133MB
14.0.0.20/myimages/nginx   v2                  7e4d58f0e5f3        13 days ago         133MB

#移除 Harbor 服务容器同时保留镜像数据/数据库

//在 Harbor服务器上操作 docker-compose down -v
Stopping nginx ... done
Stopping harbor-jobservice ... done
Stopping harbor-ui ... done
Stopping registry ... done
Stopping harbor-db ... done
...省略内容

如需重新部署,需要移除 Harbor 服务容器全部数据
持久数据,如镜像,数据库等在宿主机的/data/目录下,日志在宿主机的/var/log/Harbor/目录下。

rm -rf /data/database/
rm -rf /data/registry/

猜你喜欢

转载自blog.csdn.net/chengu04/article/details/108770872