Harbor镜像仓库

需求:

在生产一线,往往需要把镜像发布到几十台、上百台节点,这时单台 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 镜像存储

 

4)访问http://reg.wuxc.com

默认账号密码: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镜像同步成功

 

posted @ 2021-08-28 14:23  杰宏唯一  阅读(672)  评论(0编辑  收藏  举报