Harbor:企业级 Docker 镜像仓库

FreeGuideOnline 最新 2026-07-03

bash wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz tar xzvf harbor-offline-installer-v2.10.0.tgz cd harbor


### 配置 harbor.yml

复制模板文件并编辑:

```bash
cp harbor.yml.tmpl harbor.yml
vim harbor.yml

主要配置项说明:

hostname: your-registry.example.com   # 使用域名或 IP(无 HTTPS 时请用 IP)
http:
  port: 80                            # HTTP 端口
# https:                               # 如果启用 HTTPS,需取消注释并配置证书
#   port: 443
#   certificate: /path/to/cert.pem
#   private_key: /path/to/key.pem
harbor_admin_password: Harbor12345    # 管理员初始密码,安装后请立即修改
database:
  password: root123                    # PostgreSQL 密码
data_volume: /data                     # 数据存储路径

重要提示:生产环境必须启用 HTTPS。测试环境可暂时使用 HTTP,但 Docker 客户端需要配置 insecure-registries

配置 HTTPS(使用 Let's Encrypt 或自签证书)

若已拥有有效证书,直接将路径填入 https 段。若想用自签证书,可创建脚本生成:

mkdir -p /data/cert
openssl req -newkey rsa:4096 -nodes -sha256 -keyout /data/cert/harbor.key \
  -x509 -days 365 -out /data/cert/harbor.crt \
  -subj "/CN=your-registry.example.com"

然后在 harbor.yml 中指定证书路径。

运行安装脚本

harbor 目录下执行:

sudo ./install.sh --with-trivy

--with-trivy 会同时部署漏洞扫描器。脚本会检查环境并启动所有容器。成功后访问 http://your-domainhttps://your-domain,使用 admin 和配置的密码登录。

后续配置

  • 修改管理员密码:登录后进入“用户管理”即可修改。
  • 配置 Docker 客户端信任自签证书:将 harbor.crt 复制到 /etc/docker/certs.d/your-registry/ 下,并重命名为 ca.crt
  • 如果使用 HTTP,需要在 Docker 守护进程配置 insecure-registries 并重启 Docker。

快速使用指南

创建项目

Harbor 使用“项目”隔离镜像。登录后点击“项目”→ “新建项目”,设置为“公开”或“私有”。建议勾选“启用内容信任”和“漏洞扫描”。

推送镜像

本地登录 Harbor:

docker login your-registry.example.com

为镜像打标签并推送:

docker tag myapp:latest your-registry.example.com/myproject/myapp:latest
docker push your-registry.example.com/myproject/myapp:latest

在 Web 界面可查看推送的镜像、标签、大小,并可触发扫描。

从 Harbor 拉取镜像

docker pull your-registry.example.com/myproject/myapp:latest

用户与权限

在“项目”内,可添加用户并指定角色:访客(只读)、开发者(读写)、维护者(可删除标签)、管理员(管理项目)。可与企业 LDAP 集成后直接分配域用户。

镜像复制与远程注册表

Harbor 支持在多个实例间自动同步镜像:

  1. 进入“仓库管理”→“复制”。
  2. 新建目标远端注册表(另一个 Harbor、Docker Hub、AWS ECR 等)。
  3. 创建复制规则,指定源项目、过滤器(标签名或仓库名)、触发模式(手动、定时、事件驱动)。
  4. 执行后,符合条件的镜像会自动复制到目标 Registry。

这对跨区域部署和灾备非常有用。定时复制可设置 Cron 表达式。事件驱动则每当有推送或删除操作时触发。

漏洞扫描与安全策略

默认安装 Trivy 扫描器后,可以:

  • 手动扫描单个镜像:在镜像详情页点击“扫描”。
  • 自动扫描所有新推送的镜像:在“系统管理”→“配置”中勾选“漏洞扫描 - 自动扫描”。
  • 设置阻止策略:在项目“配置”中,可以设置“禁止运行带特定安全漏洞的镜像”,比如严重或高危漏洞的镜像无法被拉取。

扫描结果会显示 CVE 编号、风险等级和修复建议。

CI/CD 集成示例

在 GitLab CI 或 Jenkins 流水线中推送镜像到 Harbor:

GitLab CI 模板

variables:
  HARBOR_URL: "your-registry.example.com"
  HARBOR_PROJECT: "myproject"

build-and-push:
  image: docker:latest
  services:
    - docker:dind
  before_script:
    - docker login $HARBOR_URL -u $HARBOR_USER -p $HARBOR_PASSWORD
  script:
    - docker build -t $HARBOR_URL/$HARBOR_PROJECT/myapp:$CI_COMMIT_SHORT_SHA .
    - docker push $HARBOR_URL/$HARBOR_PROJECT/myapp:$CI_COMMIT_SHORT_SHA

HARBOR_USERHARBOR_PASSWORD 设置在 CI/CD 环境变量中(建议使用机器人账户)。

机器人账户

在 Harbor 中为用户创建“机器人账户”,生成专用的用户名和 Token,避免使用个人密码。可限制机器人账户的操作权限和过期时间。

高可用与扩展

对于大规模生产环境,单节点 Harbor 存在风险。官方提供了通过 Kubernetes 部署 Harbor 的 Helm Chart,也支持使用外部 PostgreSQL、Redis、共享存储(NFS、S3 等)来构建高可用集群。简单提升单节点可用性可参考:

  • 将数据目录挂载到外部共享存储,方便容器恢复。
  • 为多个 Harbor 实例共享同一个数据库和 Redis,前端使用负载均衡器。

详细方案请查阅 Harbor 官方 Kubernetes 部署文档。

日常运维要点

  • 数据备份:定期备份 PostgreSQL 数据库和 /data 目录(存储镜像层和注册表的说明文件)。
  • 垃圾回收:镜像删除并不会立即释放磁盘空间,需手动执行垃圾回收。
    docker exec -it harbor-registry-1 registry garbage-collect /etc/registry/config.yml