1、概述
Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
Harbor 的所有组件都在 Dcoker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。
由于 Harbor 是基于 Docker Registry V2 版本,所以 docker 版本必须 > = 1.10.0 docker-compose >= 1.6.0
Harbor的目标是帮助用户迅速搭建一个企业级的Docker registry服务。它以Docker公司开源的registry为基础,额外提供了如下功能:
- 基于角色的访问控制(Role Based Access Control)
- 基于策略的镜像复制(Policy based image replication)
- 镜像的漏洞扫描(Vulnerability Scanning)
- AD/LDAP集成(LDAP/AD support)
- 镜像的删除和空间清理(Image deletion & garbage collection)
- 友好的管理UI(Graphical user portal)
- 审计日志(Audit logging)
- RESTful API
- 部署简单(Easy deployment)
1.1 架构图
Harbor的每个组件都是以Docker容器的形式构建的,可以使用Docker Compose来进行部署。如果环境中使用了kubernetes,Harbor也提供了kubernetes的配置文件。
Harbor大概需要以下几个容器组成:ui(Harbor的核心服务)、log(运行着rsyslog的容器,进行日志收集)、mysql(由官方mysql镜像构成的数据库容器)、Nginx(使用Nginx做反向代理)、registry(官方的Docker registry)、adminserver(Harbor的配置数据管理器)、jobservice(Harbor的任务管理服务)、redis(用于存储session)。
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,整体架构还是很清晰的。架构图如下:
2、安装docker
Harbor要依赖Docker,所以要先安装,见:Ubuntu20.04安装Docker
3、下载Harbor
访问harbor release page,下载Harbor软件tgz压缩包。
4、解压
tar -zxvf harbor-offline-installer-v2.9.4.tgz
解压后出现一个 hardor 的文件夹,进去之后查看
此时还没有 harbor.yml 和 docker-compose.yml,复制一份harbor.yml.tmpl ,然后进行修改
cp harbor.yml.tmpl harbor.yml
主要改下面地方,填上hostname,port,注释掉https相关
5、安装
在当前 harbor 目录下执行./install.sh
等待安装成功。会出现上面提到的 docker-compose.yml文件,里面包含了harbor依赖的镜像和对应容器创建的信息。
6、安装docker-compose
# 安装
curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 授权
chmod +x /usr/local/bin/docker-compose
7、执行docker-compose
在harbor的目录下执行以下命令
# 启动
docker-compose up -d
# 停止
docker-compose down
启动后使用docker ps -a
查看harbor相关容器启动情况(总计9个):
8、访问
根据上面的配置的IP,访问 http://172.28.168.223:5180
默认用户 和登录密码 可以从 harbor.yml 中找到,官网有个地方也有说明
admin / Harbor12345
登录成功
9、使用
9.1 创建用户和项目
首先有一个 public 的 library 项目,在里面创建对应的用户即可pull 和 push镜像,也可以创建其它项目
9.2 docker配置 harbor
结合docker实现镜像上传和下载,在/etc/docker/daemon.json
添加以下内容
IP为harbor的IP地址和端口,端口如果是80可省略
# 仓库IP地址和端口,或者是域名,要加上http或https
"insecure-registries":["http://172.28.168.223:5180"],
"registry-mirrors":["http://172.28.168.223:5180"]
registry-mirrors
:配置的是阿里云镜像加速,该文的问题不需要配置该项insecure-registries
:允许 Docker 客户端连接到没有使用 HTTPS 或使用了自签名证书的 Docker 镜像仓库
registry-mirrors
:必须配置你的harbor仓库!!!否则可能造成,docker login是成功的,但是push镜像时出现相同的问题
重启docker:service docker restart
重启harbor
# 停止
docker-compose down
# 启动
docker-compose up -d
9.3 登录仓库
docker login -u 'admin' -p 'Harbor12345' http://172.28.168.223:5180
9.2 上传镜像到harbor
在上传镜像前,需要为镜像打上标签,命令如下:
docker tag <image_name> <harbor_host>/<project_name>/<image_name>:<tag>
以redis镜像为例:
docker tag redis:5.0.10 172.28.168.223:5180/library/redis:5.0.10
上传镜像,命令如下:
docker push <harbor_host>/<project_name>/<image_name>:<tag>
上传redis镜像到harbor
docker push 172.28.168.223:5180/library/redis:5.0.10
登录harbor控制台查看,在library项目下有redis镜像
9.3 harbor拉取镜像
先删除上面本地的redis镜像172.28.168.223:5180/library/redis:5.0.10
docker rmi 172.28.168.223:5180/library/redis:5.0.10
拉取镜像的命令
# image_name是要拉取的镜像名称,project_name是Harbor中的项目名称,tag是镜像的版本号
docker pull <harbor_host>/<project_name>/<image_name>:<tag>
拉取redis镜像
docker pull 172.28.168.223:5180/library/redis:5.0.10