Docker(十六):基于Docker的Harbor私有镜像仓库部署全攻略

Docker(十六):基于Docker的Harbor私有镜像仓库部署全攻略

一、为什么需要Harbor私有镜像仓库?

在容器化部署场景中,公有镜像仓库(如Docker Hub)存在网络依赖、安全性不足、镜像管理混乱等问题。Harbor作为VMware开源的企业级私有镜像仓库,提供以下核心价值:

  1. 安全隔离:通过RBAC权限控制、镜像签名验证、漏洞扫描等功能,构建安全的镜像分发体系。
  2. 性能优化:支持P2P镜像分发、多级缓存,显著提升内网镜像拉取速度。
  3. 管理便捷:提供Web界面、API接口及CLI工具,支持项目级镜像管理、复制策略配置。
  4. 合规要求:满足金融、政府等行业的镜像存储合规性需求。

二、部署前环境准备

2.1 硬件要求

组件 最低配置 推荐配置
服务器 2核4G 4核8G+
磁盘空间 40GB(系统盘) 200GB+(数据盘)
网络带宽 100Mbps 1Gbps+

2.2 软件依赖

  • Docker Engine 19.03+
  • Docker Compose 1.25+
  • 操作系统:CentOS 7/8、Ubuntu 18.04/20.04等主流Linux发行版

2.3 域名与证书配置

建议配置独立域名(如harbor.example.com),并生成TLS证书:

  1. # 生成自签名证书(生产环境建议使用CA签发)
  2. openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  3. -keyout /etc/docker/certs.d/harbor.example.com/harbor.key \
  4. -out /etc/docker/certs.d/harbor.example.com/harbor.crt \
  5. -subj "/CN=harbor.example.com"

三、Docker部署Harbor全流程

3.1 下载安装包

  1. wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-offline-installer-v2.9.0.tgz
  2. tar xvf harbor-offline-installer-v2.9.0.tgz
  3. cd harbor

3.2 配置harbor.yml

编辑配置文件(关键参数说明):

  1. hostname: harbor.example.com
  2. http:
  3. port: 80
  4. https:
  5. port: 443
  6. certificate: /etc/docker/certs.d/harbor.example.com/harbor.crt
  7. private_key: /etc/docker/certs.d/harbor.example.com/harbor.key
  8. harbor_admin_password: Harbor12345 # 初始管理员密码
  9. database:
  10. password: root123 # 数据库密码
  11. storage_driver:
  12. name: filesystem
  13. fs_driver:
  14. rootdirectory: /var/data/harbor

3.3 执行安装脚本

  1. # 安装前确保Docker服务已启动
  2. systemctl start docker
  3. # 执行安装(自动拉取镜像并启动容器)
  4. ./install.sh --with-trivy # 包含漏洞扫描组件

3.4 验证部署结果

  1. # 检查容器状态
  2. docker-compose ps
  3. # 访问Web界面
  4. https://harbor.example.com # 使用admin/Harbor12345登录
  5. # 测试镜像推送
  6. docker login harbor.example.com
  7. docker tag nginx:latest harbor.example.com/library/nginx:v1
  8. docker push harbor.example.com/library/nginx:v1

四、高级配置与管理

4.1 项目与权限管理

  1. 创建项目:Web界面 → 项目 → 新建项目
  2. 设置成员权限:
    • 开发者:可推送/拉取镜像
    • 访客:仅可拉取镜像
    • 管理员:完整权限

4.2 复制策略配置

实现跨区域镜像同步:

  1. # 在项目设置中添加复制规则
  2. {
  3. "name": "region-sync",
  4. "dest_registry": {
  5. "url": "https://harbor-secondary.example.com",
  6. "username": "admin",
  7. "password": "secret"
  8. },
  9. "dest_namespace": "library",
  10. "trigger": {
  11. "type": "immediate" # 或"schedule"定时同步
  12. },
  13. "filters": ["nginx:*"] # 只同步nginx镜像
  14. }

4.3 漏洞扫描集成

Harbor内置Trivy扫描器,可配置扫描策略:

  1. # 在harbor.yml中启用自动扫描
  2. scan:
  3. policy: daily # 每日自动扫描
  4. severity: critical # 只报告高危漏洞

五、运维优化建议

5.1 性能调优

  1. 存储优化

    • 使用NFS/Ceph作为后端存储
    • 配置storage_driver.redirect.disable=true减少重定向
  2. 缓存配置

    1. # 在harbor.yml中配置代理缓存
    2. proxy:
    3. http_proxy: http://proxy.example.com:8080
    4. https_proxy: http://proxy.example.com:8080

5.2 安全加固

  1. 网络隔离

    • 限制Harbor容器仅访问必要网络
    • 使用防火墙规则限制80/443端口访问
  2. 日志审计

    1. # 配置日志轮转
    2. cat > /etc/logrotate.d/harbor <<EOF
    3. /var/log/harbor/*.log {
    4. daily
    5. rotate 7
    6. compress
    7. missingok
    8. notifempty
    9. }
    10. EOF

5.3 备份恢复方案

  1. 数据库备份

    1. docker exec -it harbor-db pg_dump -U postgres -F c registry > registry_backup.dump
  2. 配置文件备份

    1. tar czvf harbor-config-backup.tar.gz /etc/docker/certs.d/harbor.example.com/ harbor/harbor.yml

六、常见问题解决方案

6.1 镜像推送失败

现象Error response from daemon: Get https://harbor.example.com/v2/: x509: certificate signed by unknown authority

解决

  1. 将自签名证书添加到Docker信任链:
    1. mkdir -p /etc/docker/certs.d/harbor.example.com
    2. cp harbor.crt /etc/docker/certs.d/harbor.example.com/ca.crt
    3. systemctl restart docker

6.2 性能瓶颈分析

工具推荐

  • 使用docker stats监控容器资源使用
  • 通过nginx:alpine容器测试镜像拉取速度:
    1. docker run --rm nginx:alpine time sh -c "apk add --no-cache curl && curl -O https://harbor.example.com/v2/_catalog"

七、升级与扩展指南

7.1 版本升级

  1. 备份当前数据:

    1. docker-compose down
    2. tar czvf harbor-data-backup.tar.gz /var/data/harbor
  2. 执行升级:

    1. wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz
    2. tar xvf harbor-offline-installer-v2.10.0.tgz
    3. cd harbor
    4. cp ../harbor.yml .
    5. ./prepare
    6. docker-compose up -d

7.2 高可用部署

采用Keepalived+Nginx实现负载均衡:

  1. # 主节点nginx配置
  2. upstream harbor {
  3. server 192.168.1.101:443;
  4. server 192.168.1.102:443 backup;
  5. }
  6. server {
  7. listen 443 ssl;
  8. server_name harbor.example.com;
  9. ssl_certificate /etc/nginx/certs/harbor.crt;
  10. ssl_certificate_key /etc/nginx/certs/harbor.key;
  11. location / {
  12. proxy_pass https://harbor;
  13. proxy_set_header Host $host;
  14. }
  15. }

八、最佳实践总结

  1. 镜像命名规范:采用<项目>/<镜像>:<标签>格式,如library/nginx:v1.22.1
  2. 生命周期管理:设置自动清理策略,删除超过90天的未使用镜像
  3. 监控告警:集成Prometheus+Grafana监控关键指标:
    • 镜像存储增长率
    • 认证失败次数
    • 扫描漏洞数量

通过以上部署方案,企业可在30分钟内完成Harbor私有仓库的标准化部署,实现镜像管理的安全、高效与可控。实际生产环境中,建议结合CI/CD流水线实现镜像的自动构建、扫描与推送,构建完整的DevOps镜像生命周期管理体系。