Harbor:企业级 Docker 镜像仓库
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-domain 或 https://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 支持在多个实例间自动同步镜像:
- 进入“仓库管理”→“复制”。
- 新建目标远端注册表(另一个 Harbor、Docker Hub、AWS ECR 等)。
- 创建复制规则,指定源项目、过滤器(标签名或仓库名)、触发模式(手动、定时、事件驱动)。
- 执行后,符合条件的镜像会自动复制到目标 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_USER 和 HARBOR_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