RockyLinux 9.5 部署 Docker Harbor
Harbor 是一个开源镜像仓库,通过策略和基于角色的访问控制来保护镜像,确保镜像经过扫描且没有漏洞,并将镜像签名为可信镜像。Harbor 是一个 CNCF(云原生计算基金会:Cloud Native Computing Foundation)毕业项目,提供合规性、性能和互操作性,帮助您在 Kubernetes 和 Docker 等云原生计算平台上一致且安全地管理镜像。
Harbor 是一个开源镜像仓库,通过策略和基于角色的访问控制来保护镜像,确保镜像经过扫描且没有漏洞,并将镜像签名为可信镜像。Harbor 是一个 CNCF(云原生计算基金会:Cloud Native Computing Foundation)毕业项目,提供合规性、性能和互操作性,帮助您在 Kubernetes 和 Docker 等云原生计算平台上一致且安全地管理镜像。
一、Harbor 安装先决条件
1、硬件 官网给出的部署 Harbor 的最小和推荐硬件配置
| 资源 | 最低 | 推荐 |
|---|---|---|
| CPU | 2 个 CPU | 4 个 CPU |
| 内存 | 4 GB | 8 GB |
| 硬盘 | 40 GB | 160 GB |
2、软件 下表列出了目标主机上必须安装的软件版本
| 软件 | 版本 | 描述 |
|---|---|---|
| Docker 引擎 | 版本 > 20.10 | Docker 引擎安装 |
| Docker Compose | Docker Compose > 2.3 | Docker Compose 是 Docker 引擎的一部分 |
| OpenSSL | 建议使用最新版本 | 用于生成 Harbor 的证书和密钥 |
3、网络端口 Harbor 需要在目标主机上打开以下端口。
| 端口 | 协议 | 描述 |
|---|---|---|
| 443 | HTTPS | Harbor 门户和核心 API 接受此端口上的 HTTPS 请求。您可以在配置文件中更改此端口。 |
| 80 | HTTP | Harbor 门户和核心 API 接受此端口上的 HTTP 请求。您可以在配置文件中更改此端口。 |
二、下载 Harbor 安装程序
1、Harbor 的官方发布版本托管在 GitHub
2、在对应的版本中,你可以找到以下文件:
harbor-offline-installer-<version>.tgz(离线安装包): 如果您要部署 Harbor 的主机无法连接到互联网,请使用离线安装包。离线安装包包含预构建的镜像,因此它比在线安装包更大。harbor-online-installer-<version>.tgz(在线安装包):在线安装包从 Docker Hub 下载 Harbor 镜像。因此,安装包体积非常小。
3、在线和离线安装包的安装过程几乎相同。如果无法访问 github,这里有离线安装包:harbor-offline-installer-v2.12.4.tgz,链接: https://pan.baidu.com/s/1Nha4oNY1GvyH0Pcy4q4Qpw?pwd=wxdw 提取码: wxdw
4、Harbor 中文参考地址
三、安装 Docker
1、安装 docker
# 添加阿里云docker-ce仓库
dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 列出当前系统中所有可安装的 docker-ce 版本,并按照版本号从高到低进行排序,同时显示重复的版本。
dnf list docker-ce --showduplicates | sort -r
# 安装最新版本 docker-ce,也可以指定版本安装(dnf install -y docker-ce-3:28.1.1-1.el9)
dnf install -y docker-ce
# 启用Docker Cgroup用于限制进程的资源使用量,如CPU、内存资源
# 创建目录,存放 docker 的配置文件
mkdir -p /etc/docker
# 创建并写入 /etc/docker/daemon.json 文件,设置 Docker 使用 systemd 作为 Cgroup 驱动
# registry-mirrors 配置:docker 镜像加速器的地址列表。
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://docker.m.daocloud.io"
]
}
EOF
# 设置 docker 开机自启,并启动 docker
systemctl enable docker --now
2、解压 harbor 离线安装包
# 根目录下创建 /data 目录
mkdir -p /data
# 解压缩 harbor-offline-installer-v2.12.4.tgz 内容到 /data 目录下
tar -zxvf harbor-offline-installer-v2.12.4.tgz -C /data
# 进入 /data/harbor/
cd /data/harbor/
# 将当前目录下的 harbor.yml.tmpl 文件复制一份到当前目录下
cp harbor.yml.tmpl harbor.yml
四、配置 Harbor 的 HTTPS 访问
默认情况下,Harbor 不附带证书。可以在没有安全性的情况下部署 Harbor,以便可以通过 HTTP 连接到它。在生产环境中,推荐始终使用 HTTPS。要配置 HTTPS,您必须创建 SSL 证书。您可以使用由受信任的第三方 CA 签名的证书,也可以使用自签名证书。
(1)本文使用的是阿里云提供的免费 SSL 证书,一个自然年内可以领取一次,数量为20,有效期三个月。(2)需要购买一个域名,直接在阿里云购买就可以,100块之内(3)如果只是本地部署测试,也可以用下面自签名证书
(一) 阿里云 CA 证书
1、创建证书

2、证书申请

3、三步验证 DNS

4、将域名解析到 IP 地址

5、下载证书

(二) 自签名证书
# 下面的 harbor.zhixu 可自行修改
# 创建目录并进入
mkdir -p /data/cert
cd /data/cert
# 生成 CA 私钥
openssl genrsa -out ca.key 4096
# 使用 CA 私钥生成自签名证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.zhixu" \
-key ca.key \
-out ca.crt
# 生成服务端私钥
openssl genrsa -out harbor.zhixu.com.key 4096
# 使用服务端私钥生成 CSR
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.zhixu" \
-key harbor.zhixu.com.key \
-out harbor.zhixu.com.csr
# 创建 v3.ext 文件定义扩展属性
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=harbor.zhixu.com
DNS.2=harbor.zhixu
DNS.3=redis
IP.1=192.168.31.116
EOF
# 使用 CA 签发服务器证书
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor.zhixu.com.csr \
-out harbor.zhixu.com.crt
# 创建目录,向 Docker 提供证书
# 如果将默认的 nginx 端口 443 映射到不同的端口,比如8443,请创建文件夹harbor.zhixu.com:8443
mkdir -p /etc/docker/certs.d/harbor.zhixu.com:443
# 将 harbor.zhixu.com.crt 转换为 harbor.zhixu.com.cert,供 Docker 使用
openssl x509 -inform PEM -in harbor.zhixu.com.crt -out harbor.zhixu.com.cert
# 将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中
cp harbor.zhixu.com.cert /etc/docker/certs.d/harbor.zhixu.com:443/
cp harbor.zhixu.com.key /etc/docker/certs.d/harbor.zhixu.com:443/
cp ca.crt /etc/docker/certs.d/harbor.zhixu.com:443/
# 自签名证书需要配置域名本地解析
echo -e "192.168.31.116 harbor.zhixu.com" | sudo tee -a /etc/hosts
# 为了使自签名证书能够正常工作,您需要确保使用该证书的客户端能够正确解析到Harbor服务的地址。这意味着您应该在计划访问Harbor仓库的每台客户端机器上配置域名的本地解析。
# Windows系统,编辑位于C:\Windows\System32\drivers\etc\hosts,对于Linux或MacOS系统,编辑位于/etc/hosts的文件
# 重启 Docker
systemctl restart docker
五、配置 Harbor 组件之间的内部 TLS 通信
默认情况下,Harbor 组件(harbor-core、 harbor-jobservice、proxy、harbor-portal、registry、registryctl、trivy_adapter、chartmuseum)之间的内部通信使用 HTTP 协议,这对于某些生产环境可能不够安全。自 Harbor v2.0 起,TLS 可以用于此内部网络。在生产环境中,始终建议使用 HTTPS。
此功能通过 harbor.yml 文件中的 internal_tls 引入。要启用内部 TLS,请将 enabled 设置为 true,并将 dir 值设置为包含内部证书文件的目录路径。
# 所有证书都可以通过 prepare 工具自动生成。
# 不加 -d 3650 默认有效期一年,加了之后十年
# 里面的版本号是v2.12.4,版本号如果不一致请自行修改
docker run -v /:/hostfs goharbor/prepare:v2.12.4 gencert -p /data/cert/tls/internal -d 3650
六、配置 Harbor YML 文件
1、必须设置的参数
# Harbor 的目标主机上的 IP 地址、主机名 或 域名
hostname: 192.168.31.116
# 使用 HTTPS 访问 Harbor 门户和令牌/通知服务。始终在生产环境和没有隔离的环境中使用 HTTPS。
https:
# HTTPS 的端口号,用于 Harbor 门户和 Docker 命令。默认值为 443,但是一定要与 external_url 参数的端口号一致
port: 443
# SSL 证书的路径
certificate: /data/cert/harbor.zhixu.com.cert
# SSL 密钥的路径
private_key: /data/cert/harbor.zhixu.com.key
# 是否启用强 SSL/TLS 加密套件,建议将此选项设置为 true
strong_ssl_ciphers: true
# 使用 HTTPS 在 Harbor 组件之间通信
internal_tls:
# 将此标志设置为 true 表示内部 tls 已启用
enabled: true
# 包含内部证书和密钥的目录的路径
dir: /data/cert/tls/internal/
# 启用此选项以使用外部代理。启用后,将不再使用主机名
external_url: https://harbor.zhixu.com:443
# Harbor 系统管理员设置初始密码
# 默认用户名和密码为 admin 和 Harbor12345
# 记住在启动 Harbor 后从 UI 更改管理员密码
harbor_admin_password: Harbor12345
# 使用本地 PostgreSQL 数据库。您可以选择配置外部数据库,在这种情况下,您可以停用此选项。
database:
# 设置本地数据库的 root 密码。您必须为生产部署更改此密码。
password: root123
# 空闲连接池中的最大连接数。如果它 <=0,则不保留任何空闲连接。
max_idle_conns: 100
# 到数据库的最大打开连接数。如果它 <= 0,则对打开连接数没有限制。
max_open_conns: 900
# 连接可以重复使用的最长时间。如果它 <= 0,则连接不会因为连接的年龄而关闭。
conn_max_lifetime: 5m
# 连接可以空闲的最长时间。如果它 <= 0,则连接不会因为连接的空闲时间而关闭。
conn_max_idle_time: 0
# 在目标主机上存储 Harbor 数据的位置。即使 Harbor 的容器被删除和/或重新创建,这些数据也会保持不变。路径需要你手动创建。
data_volume: /data/harbor-storage
2、配置 Trivy(Harbor 的漏洞扫描组件) 扫描器(可选)
trivy:
# 生产环境建议仅显示有官方修复方案的漏洞
ignore_unfixed: true
# 生产环境必须启用跳过自动更新(需手动维护漏洞数据库)
skip_update: true
# 生产环境建议跳过 Java 数据库自动更新
skip_java_db_update: true
# 启用离线扫描模式(避免依赖外部网络)
offline_scan: true
# 生产环境建议全安全检查(漏洞+配置+密钥)
security_check: vuln,config,secret
# 保持证书验证严格模式
insecure: false
# 根据实际镜像大小调整超时时间(建议 10-15 分钟)
timeout: 15m0s
# 在 air-gapped 环境需要注释以下 token
# github_token: your_github_token
七、运行安装脚本
1、两种方式运行安装脚本
# 进入目录 harbor
cd /data/harbor
# 方式一:默认安装,不含 Trivy
./install.sh
# 方式二:包含 Trivy 的安装
./install.sh --with-trivy
看到下面输出,说明安装成功
[Step 5]: starting Harbor ...
[+] Running 10/10
✔ Network harbor_harbor Created 0.3s
✔ Container harbor-log Started 1.5s
✔ Container registryctl Started 5.0s
✔ Container harbor-db Started 5.6s
✔ Container redis Started 5.1s
✔ Container registry Started 5.6s
✔ Container harbor-portal Started 5.4s
✔ Container harbor-core Started 6.8s
✔ Container harbor-jobservice Started 9.6s
✔ Container nginx Started 9.7s
✔ ----Harbor has been installed and started successfully.----
2、浏览器访问
# 通过浏览器访问 Harbor 控制台,访问 https://harbor.zhixu.com 或http://192.168.31.116
# 如果是自签名证书,浏览器会有警告
# 默认用户 admin,默认初始密码 Harbor12345(可在 harbor.yml 中修改)
# 此密码仅在 Harbor 首次启动时使用,登录后记得修改密码。在后续登录时,将忽略此设置。
(1) 登录页
(2) 右上角点击账户 admin -> 修改密码
(3) 新建项目 nginx
(4) 测试 Harbor 是否能正常上传、下载镜像
# 下载 nginx 镜像
docker pull nginx
# 查看所有本地镜像
docker images
# 为本地 nginx 镜像添加一个新的标签
docker tag nginx:latest harbor.zhixu.com:443/nginx/nginx:1.0
# 登录 Docker Harbor 镜像仓库,输入账号和密码
docker login harbor.zhixu.com:443
# 推送镜像
docker push harbor.zhixu.com:443/nginx/nginx:1.0
# 拉取镜像
docker pull harbor.zhixu.com:443/nginx/nginx:1.0
八、其它
1、如果你希望通过 HTTP 来访问 Docker Registry(包括 Harbor),你需要在 Docker 客户端进行额外的配置,因为默认情况下 Docker 只允许通过 HTTPS 访问 registry。这需要你在 Docker 的配置文件 daemon.json 中添加对应的不安全注册表(insecure registry)。
# 编辑 /etc/docker/daemon.json,添加
"insecure-registries" : ["192.168.31.116"]
# 更新 docker 服务配置
systemctl daemon-reload
# 重启 docker 服务
systemctl restart docker
2、版本问题:Harbor 2.12.3
v 2.12.3 注释掉 https 部分,可以正常部署,但是登录的时候会提示:用户名或者密码不正确。维护人员已与 2025-5-23 在 新版本 2.12.4 中修复 2.12.3 版本中 http 登录问题,所有上文中使用的版本已经改成 2.12.4
更多推荐

所有评论(0)