企业级 Docker 镜像仓库搭建:Harbor 超详细实战指南(附全流程步骤解析)

目录

一、Harbor 核心概念与架构解析

1. 什么是 Harbor?

2. 核心组件架构

二、环境准备:打造 Harbor 运行基石

2.1 基础环境配置

2.1.1 修改主机名

2.1.2 配置仅主机模式 IP

2.1.3 开启 IP 转发

2.1.4 配置主机映射

三、Docker 与 Docker Compose 安装:构建运行基础

3.1 安装 Docker 引擎

3.1.1 添加阿里云 Docker 源

3.1.2 安装 Docker 及插件

3.1.3 深度配置 Docker

3.1.4 启动与验证

3.2 安装 Docker Compose

3.2.1 下载二进制文件

3.2.2 安装与赋权

3.2.3 验证版本

四、Harbor 安装准备:离线包与证书配置

4.1 下载与解压 Harbor

4.2 生成 HTTPS 证书(生产级配置)

4.2.1 生成 CA 根证书

4.2.2 生成服务器证书

4.2.3 证书部署

五、Harbor 核心部署:从配置到启动

5.1 配置 Harbor 核心参数

5.1.1 复制配置模板

5.1.2 核心配置解析

5.2 加载镜像与启动服务

5.2.1 加载离线镜像

5.2.2 环境检查与配置生成

5.2.3 启动 Harbor 服务

5.2.4 查看容器状态

六、服务管理优化:systemd 实现便捷启停

6.1 编写 systemd 服务文件

6.2 激活服务

七、功能验证:从镜像操作到 API 调用

7.1 定制本地仓库

7.1.1 Windows 端配置域名解析

7.1.2 浏览器访问

7.2 镜像操作全流程

7.2.1 拉取与打标签

7.2.2 登录与推送

7.2.3 拉取验证

7.4 API 查看镜像列表

八、生产环境注意事项

1. 证书管理

2. 存储扩展

3. 安全加固

九、总结:Harbor 搭建的核心价值与最佳实践

1. 核心价值

2. 最佳实践


一、Harbor 核心概念与架构解析

1. 什么是 Harbor?

Harbor 是 VMware 开源的企业级 Docker 镜像仓库,基于 Docker Registry 二次开发,提供可视化管理、权限控制、镜像复制、漏洞扫描等企业级功能。相比原生 Registry,Harbor 解决了镜像管理不便、安全性不足、运维效率低等问题,是容器化部署的核心基础设施。

2. 核心组件架构

  • Proxy:Nginx 反向代理,分发 Web 界面与镜像传输流量,支持 HTTP/HTTPS 端口映射(如 80→8080,443→8443)。
  • UI 服务:Web 管理界面,基于 MySQL 存储元数据,提供镜像浏览、项目管理、用户认证等功能。
  • Registry:镜像存储引擎,通过 Webhook 通知 UI 创建 Repository,支持本地存储或分布式存储(如 S3、NFS)。
  • Admin Server:系统配置中心,管理存储配额、复制策略等全局参数,供 UI 和 Job Server 加载初始化配置。
  • Job Server:异步处理镜像复制任务,支持跨 Registry 的 Pull/Push,并记录任务日志。
  • Log 服务:集中收集各组件日志,通过 Docker 日志驱动实现统一管理。

二、环境准备:打造 Harbor 运行基石

2.1 基础环境配置

2.1.1 修改主机名
[root@localhost ~]# hostnamectl set-hostname harbor

作用:设置主机名为harbor,便于后续通过主机名访问本地服务,避免 IP 依赖。

2.1.2 配置仅主机模式 IP
[root@harbor ~]# nmcli connection modify ens160 ipv4.method manual \
  ipv4.addresses 192.168.128.20/24 \
  ipv4.gateway 192.168.128.2 \
  ipv4.dns "223.5.5.5 8.8.8.8" \
  connection.autoconnect yes
[root@harbor ~]# nmcli connection up ens160

网络规划

  • 分配固定 IP192.168.128.20给仅主机网卡(ens160),用于内部通信
  • 设置 DNS 服务器(阿里云 + Google)确保域名解析
  • autoconnect yes保证开机自动激活网络
2.1.3 开启 IP 转发
[root@harbor ~]# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
[root@harbor ~]# sysctl -p
net.ipv4.ip_forward = 1

必要性:允许容器网络与宿主网络通信,支持 Docker 容器跨主机通信(如 Kubernetes 节点间通信)。

2.1.4 配置主机映射
[root@harbor ~]# cat >> /etc/hosts <<EOF
192.168.10.20  harbor.registry.com harbor
EOF

[root@harbor ~]# systemctl is-active docker
active

作用:将 IP 与自定义域名harbor.registry.com绑定,方便通过域名访问 Harbor 服务,避免硬编码 IP。


三、Docker 与 Docker Compose 安装:构建运行基础

3.1 安装 Docker 引擎

3.1.1 添加阿里云 Docker 源
[root@harbor ~]# dnf install yum-utils -y
[root@harbor ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/rhel/docker-ce.repo

优势:阿里云源下载速度快,提供稳定的 Docker CE 版本,避免官方源网络波动。

3.1.2 安装 Docker 及插件
[root@harbor ~]# dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

包含组件

  • docker-ce:Docker 引擎
  • docker-compose-plugin:Docker Compose 插件(替代传统独立安装方式)
3.1.3 深度配置 Docker
[root@harbor ~]# cat > /etc/docker/daemon.json <<EOF
{
  "default-ipc-mode": "shareable",       # 容器间共享IPC命名空间
  "data-root": "/data/docker",           # 镜像数据存储目录(非系统盘)
  "exec-opts": ["native.cgroupdriver=systemd"],  # 使用systemd cgroup驱动
  "log-driver": "json-file",             # 日志驱动(默认)
  "log-opts": { "max-size": "100m", "max-file": "50" },  # 日志切割策略
  "insecure-registries": ["https://harbor.registry.com"],  # 信任自签名证书
  "registry-mirrors": [                  # 镜像加速地址(多源备份)
    "https://docker.m.daocloud.io",
    "https://docker.imgdb.de"
  ]
}
EOF

关键配置解析

  • data-root:避免镜像存储占用根分区,建议挂载独立磁盘
  • insecure-registries:允许访问未经验证的 HTTPS 仓库(用于自签名证书场景)
  • registry-mirrors:加速 Docker Hub 镜像拉取,提升部署效率
3.1.4 启动与验证
[root@harbor ~]# systemctl enable --now docker
[root@harbor ~]# docker info  # 验证cgroup驱动、存储路径等配置

3.2 安装 Docker Compose

3.2.1 下载二进制文件
[root@harbor ~]# wget https://github.com/docker/compose/releases/download/v2.35.1/docker-compose-linux-x86_64
3.2.2 安装与赋权
[root@harbor ~]# mv docker-compose-linux-x86_64 /usr/bin/docker-compose
[root@harbor ~]# chmod +x /usr/bin/docker-compose
3.2.3 验证版本
[root@harbor ~]# docker-compose --version  # 应输出v2.35.1

注意:Docker Compose 用于编排 Harbor 多容器组件,需与 Docker 引擎版本兼容。


四、Harbor 安装准备:离线包与证书配置

4.1 下载与解压 Harbor

[root@harbor ~]# mkdir -p /data/harbor && cd /data/harbor
[root@harbor data]# wget https://github.com/goharbor/harbor/releases/download/v2.13.0/harbor-offline-installer-v2.13.0.tgz
[root@harbor data]# tar -xzf harbor-offline-installer-v2.13.0.tgz 
[root@harbor data]# rm -f harbor-offline-installer-v2.13.0.tgz 
[root@harbor data]# ls
docker  harbor


#查看
[root@harbor data]# cd harbor/
[root@docker harbor]# ls
common.sh  harbor.v2.13.0.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare

#解压
[root@docker harbor]# docker load -i harbor.v2.13.0.tar.gz 
874b37071853: Loading layer  40.92MB/40.92MB
7824f74aeb34: Loading layer  16.73MB/16.73MB
6409b9df8a24: Loading layer  175.4MB/175.4MB
be0b74c61638: Loading layer  26.55MB/26.55MB
fa43dc6ea88a: Loading layer   18.8MB/18.8MB
129629e46413: Loading layer   5.12kB/5.12kB
......

优势:离线安装包适合网络隔离环境,包含所有依赖镜像(如 MySQL、Redis、Nginx 等)。

4.2 生成 HTTPS 证书(生产级配置)

这里我们可以查看官网中证书生成的代码

官网:Harbor docs | Configure HTTPS Access to Harbor

4.2.1 生成 CA 根证书

创建ssl并进入该目录中进行操作:

[root@harbor harbor]# mkdir ssl && cd ssl
[root@harbor ssl]# openssl genrsa -out ca.key 4096  # 4096位强加密私钥
[root@harbor ssl]# openssl req -x509 -new -nodes -sha512 -days 3650 \
  -subj "/C=CN/ST=Chongqing/L=Banan/O=example/OU=Personal/CN=MyPersonal Root CA" \
  -key ca.key -out ca.crt  # 生成自签名CA证书(有效期10年)
4.2.2 生成服务器证书

官网中创建CA证书的页面往下翻动:

# 生成服务器私钥
[root@harbor ssl]# openssl genrsa -out harbor.registry.com.key 4096

# 生成证书签名请求(CSR)
[root@harbor ssl]# openssl req -sha512 -new \
  -subj "/C=CN/ST=Chongqing/L=Banan/O=example/OU=Personal/CN=harbor.registry.com" \
  -key harbor.registry.com.key -out harbor.registry.com.csr

# 配置证书扩展(支持多域名)
[root@harbor ssl]# 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.registry.com  # 主域名
DNS.2 = harbor  # 别名
EOF

# 生成最终服务器证书
[root@harbor ssl]# openssl x509 -req -sha512 -days 3650 \
  -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial \
  -in harbor.registry.com.csr -out harbor.registry.com.crt

关键参数

  • subjectAltName:允许通过多个域名访问(如harbor.registry.comharbor
  • serverAuth:标识证书用于服务器认证
4.2.3 证书部署

# 1. 复制到Harbor证书目录
[root@harbor ssl]# mkdir /data/cert
[root@harbor ssl]# cp harbor.registry.com.crt harbor.registry.com.key /data/cert/

# 2. 转换格式供Docker使用
[root@harbor ssl]# openssl x509 -inform PEM -in harbor.registry.com.crt -out harbor.registry.com.cert

# 3. 配置Docker信任证书
[root@harbor ssl]# mkdir -p /etc/docker/certs.d/harbor.registry.com:443
[root@harbor ssl]# cp harbor.registry.com.cert harbor.registry.com.key ca.crt /etc/docker/certs.d/harbor.registry.com:443/

# 4. 重启Docker使证书生效
[root@harbor ssl]# systemctl restart docker

# 查看状态
[root@harbor ssl]# systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
     Active: active (running) since Sun 2025-05-11 11:01:05 CST; 4s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 3266 (dockerd)
      Tasks: 10
     Memory: 78.1M
        CPU: 412ms
     CGroup: /system.slice/docker.service
             └─3266 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

五、Harbor 核心部署:从配置到启动

5.1 配置 Harbor 核心参数

5.1.1 复制配置模板
[root@harbor harbor]# cp harbor.yml.tmpl harbor.yml
[root@harbor harbor]# vim harbor.yml  # 关键配置如下
5.1.2 核心配置解析
hostname: harbor.registry.com  # 必须与证书CN一致,否则HTTPS验证失败
http:
  port: 80  # HTTP端口,自动重定向到HTTPS(443)
https:
  port: 443  # HTTPS端口
  certificate: /data/cert/harbor.registry.com.crt  # 证书路径(与实际存储一致)
  private_key: /data/cert/harbor.registry.com.key  # 私钥路径
harbor_admin_password: Harbor12345  # 管理员初始密码(建议生产环境修改)
database:
  password: Harbor12345  # MySQL数据库密码(保持默认即可)

5.2 加载镜像与启动服务

5.2.1 加载离线镜像
[root@harbor harbor]# docker load -i harbor.v2.13.0.tar.gz

过程解析:解压并加载 Harbor 所需的 12 个镜像(如 harbor-db、nginx-photon 等),约 1.2GB。

5.2.2 环境检查与配置生成
[root@harbor harbor]# ./prepare  # 关键输出:生成/docker-compose.yml

作用

  • 验证 Docker 和 Docker Compose 版本
  • 生成各组件配置文件(如 nginx.conf、core/env 等)
  • 创建数据存储目录(/config、/data、/log)
5.2.3 启动 Harbor 服务
[root@harbor harbor]# ./install.sh  # 执行5步安装流程

输出解析

  1. 检查 Docker 和 Compose 版本
  2. 加载镜像(已完成,跳过)
  3. 准备环境(创建网络、数据卷)
  4. 生成配置(覆盖 prepare 生成的文件)
  5. 启动容器(10 个服务容器,状态需全部为Up (healthy)
5.2.4 查看容器状态
[root@harbor harbor]# docker-compose ps  # 确保所有容器健康运行

六、服务管理优化:systemd 实现便捷启停

6.1 编写 systemd 服务文件

[root@harbor harbor]# vim /usr/lib/systemd/system/harbor.service
[Unit]
Description=Harbor Docker Registry
After=docker.service systemd-networkd.service systemd-resolved.service  # 依赖Docker和网络服务
Requires=docker.service  # 确保Docker先启动

[Service]
Type=simple
Restart=on-failure  # 失败自动重启
RestartSec=5  # 重启间隔
ExecStart=/usr/bin/docker-compose -f /data/harbor/docker-compose.yml up  # 启动命令
ExecStop=/usr/bin/docker-compose -f /data/harbor/docker-compose.yml down  # 停止命令

[Install]
WantedBy=multi-user.target  # 加入多用户启动目标

6.2 激活服务

[root@harbor ~]# systemctl daemon-reload  # 重新加载配置
[root@harbor ~]# systemctl start harbor.service  # 启动服务
[root@harbor ~]# systemctl enable harbor.service  # 开启开机自启
[root@harbor ~]# systemctl status harbor  # 验证状态(active/running)

七、功能验证:从镜像操作到 API 调用

7.1 定制本地仓库

7.1.1 Windows 端配置域名解析
  • 修改C:\Windows\System32\drivers\etc\hosts,添加:

    plaintext

    192.168.10.20  harbor.registry.com
    

7.1.2 浏览器访问
  • 地址:https://harbor.registry.com
  • 登录:admin/Harbor12345(首次登录强制修改密码可选)

第一次登录会提醒不安全,继续访问登录即可。

7.2 镜像操作全流程

7.2.1 拉取与打标签
# 拉取Nginx镜像
[root@harbor ~]# docker pull nginx:1.28.0

# 打标签(格式:仓库地址/项目名/镜像名:版本)
[root@harbor ~]# docker tag nginx:1.28.0 harbor.registry.com/library/nginx:1.28.0
7.2.2 登录与推送
# 登录(忽略证书警告需加--insecure-registry,此处已配置信任)
[root@harbor ~]# docker login harbor.registry.com -u admin -p Harbor12345

# 推送镜像
[root@harbor ~]# docker push harbor.registry.com/library/nginx:1.28.0
7.2.3 拉取验证
# 删除本地镜像
[root@harbor ~]# docker rmi -f nginx:1.28.0 harbor.registry.com/library/nginx:1.28.0

# 从Harbor拉取
[root@harbor ~]# docker pull harbor.registry.com/library/nginx:1.28.0

7.4 API 查看镜像列表

[root@docker ~]# curl -k -u 'admin:Harbor12345' https://harbor.registry.com/api/v2.0/projects/library/repositories

输出解析:返回 JSON 数组,包含镜像名称、创建时间、拉取次数等元数据。


八、生产环境注意事项

1. 证书管理

  • 定期更换证书(建议每年更新)
  • 生产环境使用 CA 签发的正规证书(非自签名)

2. 存储扩展

# harbor.yml添加分布式存储配置
storage:
  filesystem:
    root: /data/harbor  # 本地存储
  # 或使用S3存储(需安装s3fs)
  # s3:
  #   accesskey: AKIAXXXXXXXX
  #   secretkey: XXXXXXXXXXXXXXX

3. 安全加固

  • 启用 HTTPS 强制加密传输
  • 配置 LDAP/AD 统一认证
  • 开启镜像漏洞扫描(Trivy 默认集成)

九、总结:Harbor 搭建的核心价值与最佳实践

1. 核心价值

  • 集中管理:通过 Web 界面实现镜像全生命周期管理,告别命令行低效操作
  • 安全增强:HTTPS 传输、用户认证、漏洞扫描保障镜像安全
  • 高效运维:Docker Compose 编排 + systemd 服务实现一键启停,支持大规模集群部署

2. 最佳实践

  • 环境准备:严格按照最小配置(2C/4G/100G)规划,生产环境建议配置 SSD 加速
  • 证书配置:使用正规 CA 证书,避免自签名证书带来的信任问题
  • 版本选择:跟进 Harbor 官方版本(当前 2.13.0),定期升级补丁修复漏洞

通过本文的超详细步骤解析,读者可完整掌握 Harbor 从环境准备到功能验证的全流程操作。在实际应用中,建议结合企业具体需求扩展存储、集成认证系统,并通过 API 实现与 CI/CD 流水线的深度整合,构建高效安全的容器镜像管理体系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值