需求:
在生产一线,往往需要把镜像发布到几十台、上百台节点,这时单台 Docker 主机上的镜像已无法满足,项目越来越多,都放到一台 Docker 主机上是不行的,我们需要一个像 Git 仓库一样的系统来管理镜像。我们这里部署的就是 Harbor 作为 docker镜像的registry。
Harbor是由 VMWare 公司开源的容器镜像仓库,事实上,Harbor 是在 Docker Registry 上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制,AD/LDAP集成以及审计日志等,足以满足基本需求。
官网:https://vmware.github.io/
1、Harbor特性介绍
1. 基于角色访问控制
每个人角色不同,需求也不同,因此就需要访问权限控制,根据角色分配相应的权限。例如,开发人员需要对项目构建这就需要用到读写权限(push/pull),测试人员只需要读权限(pull),运维一般管理镜像仓库,具备权限分配能力,项目经历具有所有权限。
在 Harbor 中,有三种角色:
(1)Guest:对指定项目有只读权限。
(2)Developer:开发,读写项目的权限。
(3)Admin:管理者,所有权限。
Anonymous:当用户未登录时,该用户被设为匿名用户。匿名用户不能访问私有项目,只能访问公开项目。
2. 镜像复制
可以将仓库中的镜像同步到远程的 Harbor。
3. LDAP
Harbor 支持 LDAP 认证,可以很轻易接入已有的 LDAP。
4. 镜像删除和空间回收
Harbor 支持在 Web 删除镜像,回收无用的镜像,释放磁盘空间。
5. 图形页面管理
用户很方面搜索镜像及项目管理
6. 审计
对仓库的所有操作都有记录
7. RESET API
完整的API,方便与外部集成。
2、离线部署Harbor
Harbor离线包
链接:https://pan.baidu.com/s/1dVMy7X0aWq15m2rrHwDsew
提取码:lupf
2.1 Http方式部署Harbor
1)安装docker-compose
Harbor 在部署和使用时需要借助 Docker 的单机编排工具 Docker compose
将docker-compose-Linux-x86_64上传至/usr/bin [root@docker01 ~]# mv docker-compose-Linux-x86_64 docker-compose [root@docker01 ~]# chmod +x docker-compose
2)离线部署Http Harbor
[root@docker01 ~]# tar -zxvf harbor-offline-installer-v2.0.0.tgz [root@docker01 ~]# cd harbor [root@docker01 harbor]# cp harbor.yml.tmpl harbor.yml [root@docker01 harbor]#vi harbor.yml #本地IP或域名均可(如果为域名请在hosts文件加解析) hostname: reg.wuxc.com # 本次为Http部署,故先注释https相关配置 # https related config # https: # https port for harbor, default is 443 # port: 443 # The path of cert and key files for nginx #Harbor初始密码 harbor_admin_password: Harbor12345 [root@docker01 harbor]# ./prepare [root@docker01 harbor]# ./install.sh [root@docker01 harbor]# docker-compose ps Name Command State Ports --------------------------------------------------------------------------------------------- harbor-core /harbor/entrypoint.sh Up (healthy) harbor-db /docker-entrypoint.sh Up (healthy) 5432/tcp harbor-jobservice /harbor/entrypoint.sh Up (healthy) harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp harbor-portal nginx -g daemon off; Up (healthy) 8080/tcp nginx nginx -g daemon off; Up (healthy) 0.0.0.0:80->8080/tcp redis redis-server /etc/redis.conf Up (healthy) 6379/tcp registry /home/harbor/entrypoint.sh Up (healthy) 5000/tcp registryctl /home/harbor/start.sh Up (healthy)
注:上述所有容器均为Up(healthy)代表harbor服务启动成功
3)Harbor组件介绍
模块 | 功能 |
harbor-core | 配置管理中心 |
harbor-db | MySQL 数据库 |
harbor-jobservice | 负责镜像复制 |
harbor-log | 记录操作日志 |
harbor-portal | Web 管理页面和 API |
nginx | 前端代理,负责前端页面和镜像上传/下载转发 |
redis | 会话缓存 |
registry | 镜像存储 |
默认账号密码:admin/Harbor12345
5)配置http镜像仓库可信任
1.添加可信任(如果没有daemon.json请新建一个) [root@docker01 ~]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"], "insecure-registries":["reg.wuxc.com"] //因为是http部署需要将仓库地址添加可信任 } 2.重启docker服务使其生效 [root@docker01 ~]# systemctl restart docker
6)验证镜像推送
1.登录reg.wuxc.com仓库 [root@docker01 ~]# docker login reg.wuxc.com Username: admin Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded 2.打tag标签并推送 [root@docker01 ~]# docker tag 9beeba249f3e reg.wuxc.com/library/nginx:v1 [root@docker01 ~]# docker push reg.wuxc.com/library/nginx:v1 The push refers to repository [reg.wuxc.com/library/nginx] 6c7de695ede3: Pushed 2f4accd375d9: Pushed ffc9b21953f4: Pushed v1: digest: sha256:8269a7352a7dad1f8b3dc83284f195bac72027dd50279422d363d49311ab7d9b size: 948 3.拉取镜像 [root@docker01 ~]# docker pull reg.wuxc.com/library/nginx:v1 v1: Pulling from library/nginx afb6ec6fdc1c: Pull complete b90c53a0b692: Pull complete 11fa52a0fdc0: Pull complete Digest: sha256:8269a7352a7dad1f8b3dc83284f195bac72027dd50279422d363d49311ab7d9b Status: Downloaded newer image for reg.wuxc.com/library/nginx:v1 reg.wuxc.com/library/nginx:v1
2.2 Https方式部署Harbor
1)上传证书脚本cfssl.sh和cert.sh
注意全量修改cert.sh中域名为本地IP或域名
[root@docker01 ~]# sh cfssl.sh
[root@docker01 ~]# sh certs.sh
[root@docker01 ~]# ls
ca-config.json ca-csr.json ca.pem cfssl.sh reg.wuxc.com-csr.json reg.wuxc.com.pem
ca.csr ca-key.pem certs.sh reg.wuxc.com.csr reg.wuxc.com-key.pem
2)修改harbor.yml https配置
https: # https port for harbor, default is 443 port: 443 # The path of cert and key files for nginx certificate: /data/harbor/ssl/reg.wuxc.com.pem //路径为本地reg.wuxc.com.pem实际路径 private_key: /data/harbor/ssl/reg.wuxc.com-key.pem //路径为本地reg.wuxc.com-key.pem实际路径
3)重新配置并部署Harbor
[root@docker01 harbor]# ./prepare
[root@docker01 harbor]# docker-compose down
[root@docker01 harbor]# docker-compose up –d
4)在其他Docker主机登录reg.wuxc.com仓库
将数字证书reg.wuxc.com.pem复制到Docker主机并重命名
[root@docker02 ~]# mkdir -p /etc/docker/certs.d/reg.wuxc.com [root@docker02 ~]# mv reg.wuxc.com.pem reg.wuxc.com.pem.crt [root@docker02 ~]# docker login reg.wuxc.com Username: admin Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
2.3 Harbor仓库主从复制
1)利用其镜像复制功能,实现双向复制保持数据一致,通过前置负载均衡分发请求
Harbor主从环境:
主harbor:https://reg.wuxc.com
备harbor:http://10.3.104.56
2)主从两台Harbor分别访问正常
3)在主Harbor【仓库管理】添加仓库管理
4)在主Harbor【复制管理】添加规则
5)验证Harbor主从同步
[root@docker01 ~]# docker tag 42b97d3c2ae9 reg.wuxc.com/library/busybox:v1
[root@docker01 ~]# docker push reg.wuxc.com/library/busybox:v1
注:登录备Harbor显示busybox镜像同步成功