harbor私有镜像仓库

一、harbor私有镜像仓库

1. harbor概述

harbor是采用go语言开发的私有镜像仓库服务;

Harbor 是一个开源的、企业级的容器镜像仓库,用于安全地存储、分发和管理云原生环境中的制品(Artifacts)。它最初由 VMware 公司中国研发团队于 2014 年启动,2016 年开源,并于 2020 年成为云原生计算基金会(CNCF)的毕业项目,标志着其成熟度和广泛的市场认可。

Harbor 的核心价值在于,它在标准的 Docker Registry 基础上,扩展了企业级用户必需的一系列高级功能,解决了企业在使用公共或基础镜像仓库时遇到的安全、权限和合规性等痛点。

核心功能

Harbor 提供了一系列企业级特性,使其成为生产环境的理想选择:

  • 安全与合规

    • **基于角色的访问控制 (RBAC)**:支持精细的权限管理,确保不同团队或项目只能访问其被授权的镜像资源。
    • 漏洞扫描:集成 Trivy 或 Clair 等扫描器,在上传镜像时或按策略自动进行安全漏洞扫描。
    • 镜像签名与验证:通过内容信任机制(如 Notary)对镜像进行数字签名,确保镜像的来源可信和内容完整性。
    • 审计日志:记录所有对镜像和仓库的操作,便于安全审计和故障排查。
  • 管理与运维

    • 多租户支持:通过“项目(Project)”进行隔离,允许多个团队或部门在同一 Harbor 实例中安全地共享和管理镜像。
    • **图形化管理界面 (UI)**:提供直观的 Web 界面,方便用户进行镜像的上传、下载、搜索和管理,降低了使用门槛。
    • 镜像复制:支持在多个 Harbor 实例或不同地域的仓库之间同步和复制镜像,用于灾难恢复和内容分发。
    • 垃圾回收:自动清理未被引用的镜像层,释放存储空间。

技术架构

Harbor 采用微服务架构设计,其核心组件各司其职:

  • Harbor Core:核心服务,提供主要的 REST API,处理身份验证、授权、项目管理等核心业务逻辑。
  • Harbor Portal:为用户提供的图形化 Web 界面。
  • Harbor Registry:负责镜像的实际存储和检索,基于 Docker Distribution 项目实现。
  • Harbor Job Service:管理后台异步任务,如镜像复制、漏洞扫描和垃圾回收等。
  • **Database (PostgreSQL)**:存储用户、项目、策略等所有元数据信息。
  • Redis:用作缓存和消息代理,提升系统性能。
  • 存储后端:镜像层数据可以存储在本地文件系统,也支持 S3、Azure、GCS 等云存储服务。

总而言之,Harbor 不仅仅是一个镜像存储服务器,更是一个全面的云原生制品管理平台。它通过集成安全、管理和合规性功能,为企业在 Kubernetes 和 Docker 等环境中运行关键业务应用提供了可靠的基础设施。

2. 安装部署

在Vmware中实现本次安装,镜像是Ubuntu22.04 LTS,安装后优化教程在此网站搜索栏搜索优化,下载安装包需要科学上网。

准备harbor主机

主机名ip地址
harbor0110.0.0.131

准备环境

注意:要想安装harbor服务必须主机满足两个条件:

  • 必须安装了docker环境;
  • 必须安装了docker-compose环境

1. 安装部署docker

#1,下载docker安装包
[root@harbor01 ~]# cd /opt/
[root@harbor01 opt]# wget https://download.docker.com/linux/static/stable/x86_64/docker-29.6.2.tgz

#2. 查看
[root@harbor01 opt]# ls -l
total 85268
-rw-r--r-- 1 root root 87312398 Jul 21 00:59 docker-29.6.2.tgz

#3. 解压软件包
[root@harbor01 opt]# tar xf docker-29.6.2.tgz

#4. 授权docker执行文件
[root@harbor01 opt]# chown root.root docker/*

#5. 将命令文件移动到PATH路径
[root@harbor01 opt]# cp docker/* /usr/bin/

#6. 配置linux的内核转发
[root@harbor01 opt]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@harbor01 opt]# sysctl -p
net.ipv4.ip_forward = 1

#7. 编辑systemctl启动文件
[root@harbor01 opt]# vim /lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
#启动docker时,需要什么程序已经准备好???(没启动成功页没关系)
After=network-online.target containerd.service   
#如果这个程序没准备好,依旧可以启动docker
Wants=network-online.target

[Service]
Type=notify  #systemd配置,表示,docker进程启动好running/active之后再进行下一步操作;
#服务启动时执行的命令
ExecStart=/usr/bin/dockerd
# 重启进程,$MAINPID表示docker的pid变量(systemd生成的)
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0    #docker停止时等待时间,0表示伊吾县等待其优雅停止,避免强制杀死

LimitNOFILE=infinity    #不限制文件打开数
LimitNPROC=infinity     #不限制系统进程打开数

[Install]
WantedBy=multi-user.target


# 启动docker
[root@harbor01 opt]# systemctl daemon-reload
[root@harbor01 opt]# systemctl enable --now docker.service
[root@harbor01 opt]# docker -v
Docker version 29.6.2, build dfc4efb

2. 安装部署docker-compose

#1. 下载docker-compose文件
[root@harbor01 opt]# wget https://github.com/docker/compose/releases/download/v5.3.1/docker-compose-linux-x86_64

#2. 将文件改名
[root@harbor01 opt]# mv docker-compose-linux-x86_64 docker-compose

#3. 给docker-compose文件执行权限
[root@harbor01 opt]# chmod +x docker-compose 

#4. 将docker-compose文件移动到PATH目录
[root@harbor01 opt]# cp docker-compose /usr/local/bin/

#5. 查看版本
[root@harbor01 opt]# docker-compose version
Docker Compose version v5.3.1

官网下载harbor安装包

注意:需要科学上网哦

https://github.com/goharbor/harbor/releases

注意:选择最新的稳定版即可

harbor私有镜像仓库-Daemon
# 选择离线安装版本
    - 下滑选择【harbor-offine-installer-v2.13.2.tgz】
harbor私有镜像仓库-Daemon

# 右键复制链接地址
# wget下载harbor软件包或者浏览器下载后拉到虚拟机中
[root@harbor01 ~]# wget https://github.com/goharbor/harbor/releases/download/v2.15.2/harbor-offline-installer-v2.15.2.tgz

# 查看软件包
[root@harbor01 opt]# ls -l
...
-rw-r--r-- 1 root root 730279437 Jul 27 09:47 harbor-offline-installer-v2.15.2.tgz

解压harbor安装包

1. 解压harbor到安装目录

[root@harbor01 opt]# tar xf harbor-offline-installer-v2.15.2.tgz -C /etc/
[root@harbor01 opt]# ls -l /etc/harbor/
total 718264
-rw-r--r-- 1 root root      3646 Jul  1 15:38 common.sh
-rw-r--r-- 1 root root 735455741 Jul  1 15:38 harbor.v2.15.2.tar.gz
-rw-r--r-- 1 root root     14657 Jul  1 15:38 harbor.yml.tmpl
-rwxr-xr-x 1 root root      1975 Jul  1 15:38 install.sh
-rw-r--r-- 1 root root     11347 Jul  1 15:38 LICENSE
-rwxr-xr-x 1 root root      2211 Jul  1 15:38 prepare

2. 修改配置文件

复制一份临时harbor配置文件,将后缀tmpl去掉

[root@harbor01 opt]# cp /etc/harbor/harbor.yml.tmpl /etc/harbor/harbor.yml

开始编辑harbor的配置文件

[root@harbor01 opt]# vim /etc/harbor/harbor.yml
# 定义 Harbor 服务的外部访问地址。客户端(如 Docker、Helm)将使用这个地址来访问 Harbor。
# 必须设置为 IP 或域名,并且不能是 `localhost` 或 `127.0.0.1`。
hostname: reg01.msp.com

# HTTP 协议配置
http:
  # Harbor 服务监听 HTTP 请求的端口。默认为 80。
  port: 80

# HTTPS 协议配置。如果配置了 HTTPS,HTTP 端口将自动重定向到 HTTPS 端口。
https:
  # Harbor 服务监听 HTTPS 请求的端口。默认为 443。
  port: 443
  # SSL 证书公钥。
  certificate: /etc/harbor/certs/harbor_ca.crt
  # SSL 证书私钥。
  private_key: /etc/harbor/certs/harbor.key

# Harbor 系统管理员admin的初始密码。
harbor_admin_password: 123456

# 数据库配置。Harbor 使用 PostgreSQL 数据库来存储元数据(项目、用户、镜像列表等,不是镜像文件本身)。
database:
  # 用于连接 PostgreSQL 数据库的密码。
  password: root123
  # 连接池中保持的最大空闲连接数。有助于提升性能,避免频繁建立新连接。
  max_idle_conns: 100
  # 数据库打开的最大连接数。根据服务器硬件和负载调整。
  max_open_conns: 900
  # 一个连接可被重用的最长时间。超过此时间后,连接将在被放回池中时关闭。
  conn_max_lifetime: 5m
  # 一个连接在空闲状态下的最长存活时间。0 表示没有限制。
  conn_max_idle_time: 0

# Harbor 用于存储数据的目录。
# 包括镜像文件、图表(Chart)文件以及数据库数据(如果使用内部数据库)。
data_volume: /harbor/data

# Trivy 配置。Trivy 是 Harbor 集成的漏洞扫描器。
trivy:
  # 是否忽略未提供修复方案的漏洞。`false` 表示不忽略,会报告所有漏洞。
  ignore_unfixed: false
  # 在启动时是否跳过更新 Trivy 的漏洞数据库。`false` 表示自动更新,建议生产环境保持更新。
  skip_update: false
  # (特定于Java) 是否跳过更新 Java 索引数据库。`false` 表示更新。
  skip_java_db_update: false
  # 是否启用离线扫描模式。如果为 `true`,则仅使用本地数据库,不尝试从网络获取更新。
  offline_scan: false
  # 扫描的安全检查类型。`vuln` 表示漏洞扫描。
  security_check: vuln
  # 是否允许 Trivy 使用不安全的连接(如自签名证书)下载漏洞数据库。
  insecure: false
  # 扫描超时时间。如果一次扫描超过此时间,将被终止。
  timeout: 5m0s

# Jobservice 配置。Jobservice 是 Harbor 中处理异步任务(如镜像复制、扫描等)的组件。
jobservice:
  # 最大并发工作线程数。决定了可以同时执行的任务数量。
  max_job_workers: 10
  # 一个任务的最长运行时间(小时)。超过此时间的任务将被标记为失败。
  max_job_duration_hours: 24
  # 任务日志的输出方式。
  # STD_OUTPUT: 输出到标准输出(通常会被 Docker 日志捕获)
  # FILE: 输出到文件(在 `data_volume` 指定的目录下)
  job_loggers:
    - STD_OUTPUT
    - FILE
  # 日志清理器运行的频率(天)。每隔 `1` 天,它会清理过期的任务日志文件。
  logger_sweeper_duration: 1 #days

# Webhook 通知配置。当发生推送镜像、删除镜像等事件时,Harbor 可以向外部系统发送通知。
notification:
  # 发送 webhook 通知失败后的最大重试次数。
  webhook_job_max_retry: 3
  # 发送 webhook 通知请求时的 HTTP 客户端超时时间(秒)。
  webhook_job_http_client_timeout: 3 #seconds

# 日志配置。
log:
  # 全局日志级别。可选值:debug, info, warning, error, fatal。
  level: info
  # 本地文件日志配置。
  local:
    # 保留的日志文件轮转数量。例如 50,表示最多保留 50 个旧的日志文件。
    rotate_count: 50
    # 每个日志文件的最大大小。超过此大小会触发轮转。200M 表示 200MB。
    rotate_size: 200M
    # Harbor 组件日志文件的存储位置。
    location: /var/log/harbor

# Harbor 的配置版本。此字段由 Harbor 自身维护,通常不需要手动修改。
_version: 2.15.2

# 代理服务器配置。如果 Harbor 所在服务器需要通过代理才能访问外部网络(如下载 Trivy 数据库),则需要在此配置。
proxy:
  # HTTP 代理服务器的地址。
  http_proxy:
  # HTTPS 代理服务器的地址。
  https_proxy:
  # 不需要通过代理访问的地址列表,用逗号分隔。
  no_proxy:
  # 哪些 Harbor 组件需要使用代理。这里配置了 core, jobservice, trivy。
  components:
    - core
    - jobservice
    - trivy

# 上传缓存清理策略。
# 当客户端上传文件(如镜像层)失败或中断时,会留下临时文件。此功能用于自动清理这些文件。
upload_purging:
  # 是否启用自动清理。`true` 为启用。
  enabled: true
  # 清理多久之前的临时文件。`168h` 表示 168 小时(7 天)前的文件将被清理。
  age: 168h
  # 清理作业的运行间隔。`24h` 表示每 24 小时运行一次清理任务。
  interval: 24h
  # 是否仅模拟运行(dry run)。`true` 时只会打印要清理的文件列表而不会实际删除,用于测试。`false` 会实际执行删除。
  dryrun: false

# 缓存配置(通常指项目的元数据缓存,用于加速 UI 显示)。
cache:
  # 是否启用缓存。`false` 表示不启用。
  enabled: false
  # 缓存数据的过期时间(小时)。`24` 表示 24 小时后缓存失效。
  expire_hours: 24

生成SSL证书

1. 创建证书目录

[root@harbor01 opt]# mkdir -p /etc/harbor/certs
[root@harbor01 opt]# cd /etc/harbor/certs

2. 生成CA根证书

# 生成CA私钥
[root@harbor01 certs]# openssl genrsa -out ca.key 2048

# 生成CA公钥
[root@harbor01 certs]# openssl req -new -x509 -days 3650 -key ca.key -out ca.crt \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT/CN=MyRootCA"

3. 生成harbor证书

# 生成harbor服务私钥
[root@harbor01 certs]# openssl genrsa -out harbor.key 2048

# 生成证书请求文件CSR
[root@harbor01 certs]# openssl req -new -key harbor.key -out harbor.csr \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT/CN=reg01.msp.com"
  
# 生成harbor服务公钥,后面要搭建harbor仓库高可用这里就生成一份证书都能用
[root@harbor01 certs]# openssl x509 -req -in harbor.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
  -out harbor.crt -days 3650 -sha256 \
  -extensions san -extfile <(printf "[san]\nsubjectAltName=DNS:reg01.msp.com,DNS:reg02.msp.com,DNS:harbor01,DNS:harbor02,DNS:localhost,IP:127.0.0.1,IP:10.0.0.131,IP:10.0.0.132")

4. ca公钥与harbor服务公钥合并(选做)

# 将服务器证书和CA证书合并为一个链文件
[root@harbor01 certs]# cat harbor.crt ca.crt > harbor_ca.crt

5. 查看生成的证书

[root@harbor01 certs]# ls -l 
total 24
-rw-r--r-- 1 root root 1334 Jul 27 20:28 ca.crt
-rw------- 1 root root 1704 Jul 27 20:28 ca.key
-rw-r--r-- 1 root root 2774 Jul 27 20:33 harbor_ca.crt
-rw-r--r-- 1 root root 1440 Jul 27 20:33 harbor.crt
-rw-r--r-- 1 root root 1009 Jul 27 20:33 harbor.csr
-rw------- 1 root root 1704 Jul 27 20:28 harbor.key

开始安装

# 回到安装目录
[root@harbor01 certs]# cd /etc/harbor/

# 查看目录下文件
[root@harbor01 harbor]# ls -l
total 718276
drwxr-xr-x 2 root root      4096 Jul 27 20:33 certs
-rw-r--r-- 1 root root      3646 Jul  1 15:38 common.sh
-rw-r--r-- 1 root root 735455741 Jul  1 15:38 harbor.v2.15.2.tar.gz
-rw-r--r-- 1 root root      5513 Jul 27 20:27 harbor.yml
-rw-r--r-- 1 root root     14657 Jul  1 15:38 harbor.yml.tmpl
-rwxr-xr-x 1 root root      1975 Jul  1 15:38 install.sh
-rw-r--r-- 1 root root     11347 Jul  1 15:38 LICENSE
-rwxr-xr-x 1 root root      2211 Jul  1 15:38 prepare

# 执行安装脚本
[root@harbor01 harbor]# ./install.sh 

浏览器访问

10.0.0.131
harbor私有镜像仓库-Daemon

用户:admin
密码:123456
harbor私有镜像仓库-Daemon

3. docker主机链接harbor仓库

harbor创建项目

# 点击导航栏【项目】
    - 点击【新建项目】
    - 编辑【项目名称】
    - 勾选访问级别【公开】
    - 确定
harbor私有镜像仓库-Daemon

# 创建完成后,查看项目;
harbor私有镜像仓库-Daemon

docker主机添加harbor私有仓库

1. docker主机做harbor的hosts解析

[root@docker01 ~]$ vim /etc/hosts
......
10.0.0.131  reg01.msp.com

# 测试解析
[root@docker01 ~]#  ping -c3 reg01.msp.com
PING reg01.msp.com (10.0.0.131) 56(84) bytes of data.
64 bytes from reg01.msp.com (10.0.0.131): icmp_seq=1 ttl=64 time=1.14 ms
64 bytes from reg01.msp.com (10.0.0.131): icmp_seq=2 ttl=64 time=1.02 ms
64 bytes from reg01.msp.com (10.0.0.131): icmp_seq=3 ttl=64 time=0.425 ms

--- reg01.msp.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.425/0.862/1.143/0.313 ms

2. docker添加harbor仓库

daemin.json解释说明
"registry-mirrors" : ["https://reg01.oldboy.com"]【安全的仓库】表示有TLS加密的访问仓库
"insecure-registries" : ["http://10.0.0.131"]【不安全的仓库】表示没有TLS加密的访问仓库
[root@docker01 ~]$ vim /etc/docker/daemon.json
{
  "registry-mirrors" : ["https://reg01.msp.com"]
}

docker主机创建ca证书目录

[root@docker01 ~]$ mkdir -p /etc/docker/certs.d/reg01.msp.com/

harbor将ca公钥传给docker主机证书验证目录

[root@harbor01 harbor]# scp /etc/harbor/certs/ca.crt 10.0.0.121:/etc/docker/certs.d/reg01.msp.com/

重启docker

[root@docker01:~]$ systemctl restart docker.service

docker主机登录harbor

[root@docker01 ~]# docker login -uadmin -p123456 https://reg01.msp.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.

WARNING! Your credentials are stored unencrypted in '/root/.docker/config.json'.
Configure a credential helper to remove this warning. See
https://docs.docker.com/go/credential-store/

Login Succeeded

4. 推送本地镜像到仓库

· 给本地镜像打标签

1. 查看本地镜像

[root@docker01 ~]# docker images
                                                                         i Info →   U  In Use
IMAGE           ID             DISK USAGE   CONTENT SIZE   EXTRA
alpine:latest   28bd5fe8b56d         13MB         3.93MB        
nginx:stable    5cf90903deda        240MB           66MB        

2. 修改本地镜像的标签名

修改规则:[harbor仓库访问域名]/[项目名称]/[镜像名称]:[镜像tag]

# 修改本地镜像标签;
[root@docker01 ~]$ docker tag alpine:latest reg01.msp.com/docker_project/alpine:latest
[root@docker01 ~]$ docker tag nginx:stable reg01.msp.com/docker_project/nginx:stable

# 再次查看本地镜像列表
[root@docker01 ~]# docker images
                                                                         i Info →   U  In Use
IMAGE                                        ID             DISK USAGE   CONTENT SIZE   EXTRA
alpine:latest                                28bd5fe8b56d         13MB         3.93MB        
nginx:stable                                 5cf90903deda        240MB           66MB        
reg01.msp.com/docker_project/alpine:latest   28bd5fe8b56d         13MB         3.93MB        
reg01.msp.com/docker_project/nginx:stable    5cf90903deda        240MB           66MB  

· 推送本地镜像

[root@docker01 ~]# docker push reg01.msp.com/docker_project/alpine:latest
[root@docker01 ~]# docker push reg01.msp.com/docker_project/nginx:stable
harbor私有镜像仓库-Daemon

harbor页面查看

1. 查看项目列表变化

# 查看项目中的镜像数量

2. 查看项目中的镜像

# 点击进入【项目】中
harbor私有镜像仓库-Daemon

5. 拉取镜像从镜像仓库

删除所有镜像

[root@docker01 ~]$ docker image rm -f `docker images -aq`
[root@docker01 ~]# docker images -a
                                                                         i Info →   U  In Use
IMAGE   ID             DISK USAGE   CONTENT SIZE   EXTRA

拉取镜像

[root@docker01 ~]$ docker pull reg01.msp.com/docker_project/nginx:stable

# 拉取后再次查看镜像列表
[root@docker01 ~]# docker images
                                                                         i Info →   U  In Use
IMAGE                                       ID             DISK USAGE   CONTENT SIZE   EXTRA
reg01.msp.com/docker_project/nginx:stable   f0dab47df05c        238MB         63.1MB  

6. harbor的高可用配置

准备2个harbor主机环境

主机名ip地址描述
harbor0110.0.0.131已有环境,里面有项目,有镜像;
harbor0210.0.0.132新环境,什么都没有;

两个harbor主机解析域名

[root@harbor01 ~]# vim /etc/hosts
......
10.0.0.131 reg01.msp.com
10.0.0.132 reg02.msp.com
[root@harbor02 ~]# vim /etc/hosts
......
10.0.0.131 reg01.msp.com
10.0.0.132 reg02.msp.com

复制harbor01配置到harbor02

# harbor01上操作
[root@harbor01 ~]# cd /opt/
[root@harbor01 opt]# ls -l
total 830248
drwx--x--x 4 root root      4096 Jul 27 20:05 containerd
drwxr-xr-x 2 1001 1001      4096 Jul 17 00:22 docker
-rw-r--r-- 1 root root  87312398 Jul 21 00:59 docker-29.6.2.tgz
-rwxr-xr-x 1 root root  32564869 Jul 24 11:53 docker-compose
-rw-r--r-- 1 root root 730279437 Jul 27 09:47 harbor-offline-installer-v2.15.2.tgz  
[root@harbor01 opt]# scp -r ./* 10.0.0.132:/opt/

# harbor02上操作 
[root@harbor02 ~]# scp 10.0.0.131:/lib/systemd/system/docker.service /lib/systemd/system/
[root@harbor02 opt]# systemctl daemon-reload
[root@harbor02 opt]# systemctl enable --now docker.service
[root@harbor02 opt]# docker -v
Docker version 29.6.2, build dfc4efb
[root@harbor02 opt]# cp docker-compose /usr/local/bin/
[root@harbor02 opt]# docker-compose version
Docker Compose version v5.3.1
[root@harbor02 opt]# scp -r  10.0.0.131:/etc/harbor /etc/
[root@harbor02 opt]# sed -i "s/reg01.msp.com/reg02.msp.com/g" /etc/harbor/harbor.yml
[root@harbor02 opt]# cd /etc/harbor/
[root@harbor02 harbor]# ./install.sh

# docker01上操作
[root@docker01 ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors" : [
      "https://reg01.msp.com",
      "https://reg02.msp.com"]
}
[root@docker01 ~]# mkdir -p /etc/docker/certs.d/reg02.msp.com/
[root@docker01 ~]# scp 10.0.0.132:/etc/harbor/certs/ca.crt /etc/docker/certs.d/reg02.msp.com/   
[root@docker01 ~]# systemctl restart docker.service
[root@docker01 ~]# docker login -uadmin -p123456 https://reg02.msp.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.

WARNING! Your credentials are stored unencrypted in '/root/.docker/config.json'.
Configure a credential helper to remove this warning. See
https://docs.docker.com/go/credential-store/

Login Succeeded

两个harbor主机证书互信

harbor01和harbor02分别创建信任证书目录

  • harbor01创建:/etc/docker/certs.d/reg02.msp.com目录
  • harbor02创建:/etc/docker/certs.d/reg01.msp.com目录
[root@harbor01 ~]# mkdir -p /etc/docker/certs.d/reg02.msp.com
[root@harbor02 ~]# mkdir -p /etc/docker/certs.d/reg01.msp.com

分发证书:

  • harbor01将自己的ca证书发给harbor02
  • harbor02将自己的ca证书发给harbor01
[root@harbor01 ~]# scp /etc/harbor/certs/ca.crt 10.0.0.132:/etc/docker/certs.d/reg01.msp.com/
[root@harbor02 ~]#  scp /etc/harbor/certs/ca.crt 10.0.0.131:/etc/docker/certs.d/reg02.msp.com/

harbor设置推送规则

1. 添加仓库

# 仓库管理
    - 新建仓库
harbor私有镜像仓库-Daemon

harbor私有镜像仓库-Daemon

2. 推送镜像到harbor02

# 复制管理
    - 选择推送push
    - 仓库备份名
    - 设置定时任务:分时日月周
harbor私有镜像仓库-Daemon

# 5分钟后查看新仓库项目 10.0.0.132 可以看到,推送成功;

7. harbor的容器组件

容器组件功能作用
harbor-core【核心API、UI、"认证"组件】:主要用于API调用、用户管理、系统配置、复制任务、链接其他仓库 等
harbor-jobservice【执行后台任务】:复制镜像,漏洞扫描、垃圾回收等任务的详细执行日志;
harbor-portal【nginx服务】:用户访问UI的HTTP访问日志,通常错误会反向代理到 harbor-core
registry【pull、push分发镜像】:最底层的 docker push/pull 操作
harbor-dbPostgreSQL 数据库
redis缓存服务
harbor-log【日志收集器】:收集其他容器的日志(如果配置了)
# 如果是连接类错误,查看harbor-core的容器日志:
[root@harbor01 ~]# docker logs -f harbor-core

# 如果是页面访问问题,查看nginx的容器日志
[root@harbor01 ~]# docker logs -f nginx