Docker搭建Harbor私有镜像仓库全攻略(命令行模式)

一、引言:为何需要Harbor私有镜像仓库?

在容器化技术广泛应用的今天,Docker镜像作为应用部署的核心载体,其安全性和管理效率直接影响开发运维流程。Harbor作为VMware开源的企业级私有镜像仓库,提供了权限控制、镜像复制、漏洞扫描等核心功能,尤其适合以下场景:

  • 内网环境隔离:金融、政务等敏感行业需避免镜像暴露在公网
  • 多团队协同:支持项目级权限隔离,避免镜像冲突
  • 镜像安全管控:内置漏洞扫描和签名验证机制
  • 混合云架构:支持跨数据中心镜像同步

本文将聚焦命令行模式下的Harbor部署,相比GUI方式更适用于自动化运维和CI/CD流水线集成。

二、环境准备:前置条件与依赖检查

1. 硬件资源要求

组件 最低配置 推荐配置
服务器 2核4G 4核8G+
磁盘空间 40GB(仅存储) 100GB+(含备份)
网络带宽 100Mbps 1Gbps

2. 软件依赖清单

  1. # 必须软件包
  2. sudo apt-get install -y docker.io docker-compose
  3. # 可选工具(推荐安装)
  4. sudo apt-get install -y curl wget jq

3. Docker服务优化

  1. # 修改Docker存储驱动(推荐overlay2)
  2. echo '{"storage-driver": "overlay2"}' | sudo tee /etc/docker/daemon.json
  3. sudo systemctl restart docker
  4. # 配置镜像加速(以阿里云为例)
  5. sudo mkdir -p /etc/docker
  6. echo '{
  7. "registry-mirrors": ["https://<your-mirror>.mirror.aliyuncs.com"]
  8. }' | sudo tee /etc/docker/daemon.json
  9. sudo systemctl daemon-reload
  10. sudo systemctl restart docker

三、Harbor核心组件安装

1. 下载安装包

  1. # 获取最新版本(以2.5.0为例)
  2. VERSION=2.5.0
  3. wget https://github.com/goharbor/harbor/releases/download/v${VERSION}/harbor-online-installer-v${VERSION}.tgz
  4. tar xzf harbor-online-installer-v*.tgz
  5. cd harbor

2. 配置文件详解

编辑harbor.yml关键配置项:

  1. hostname: registry.example.com # 必须为FQDN或IP
  2. http:
  3. port: 80
  4. https:
  5. certificate: /path/to/cert.pem
  6. private_key: /path/to/key.pem
  7. harbor_admin_password: Harbor12345 # 初始管理员密码
  8. database:
  9. password: root123
  10. max_idle_conns: 50
  11. max_open_conns: 100
  12. storage_driver:
  13. name: filesystem
  14. filesystem:
  15. rootdirectory: /var/lib/registry

配置要点

  • 生产环境必须启用HTTPS(使用Let’s Encrypt免费证书)
  • 数据库密码需满足复杂度要求(至少8位含大小写和数字)
  • 存储目录建议使用独立磁盘分区

3. 安装执行流程

  1. # 生成自签名证书(测试环境)
  2. openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  3. -keyout /etc/ssl/private/harbor.key \
  4. -out /etc/ssl/certs/harbor.crt \
  5. -subj "/CN=registry.example.com"
  6. # 修改配置后执行安装
  7. sudo ./install.sh --with-notary --with-trivy # 可选组件

安装过程输出示例:

  1. [Step 0]: checking installation environment ...
  2. [Step 1]: loading Harbor images ...
  3. [Step 2]: preparing environment ...
  4. [Step 3]: starting Harbor ...
  5. Creating network "harbor_harbor" with the default driver
  6. Creating harbor-portal ... done
  7. Creating harbor-db ... done
  8. ...
  9. --Harbor has been installed and started successfully.

四、核心功能配置与验证

1. 基础服务验证

  1. # 检查容器状态
  2. docker-compose -f /path/to/harbor/docker-compose.yml ps
  3. # 验证Web访问
  4. curl -I https://registry.example.com
  5. # 应返回HTTP 200且包含Server: Harbor

2. 镜像操作实战

  1. # 登录Harbor
  2. docker login registry.example.com
  3. # 输入用户名admin和配置的密码
  4. # 推送镜像示例
  5. docker tag nginx:latest registry.example.com/library/nginx:v1
  6. docker push registry.example.com/library/nginx:v1
  7. # 拉取镜像示例
  8. docker pull registry.example.com/library/nginx:v1

3. 高级功能配置

3.1 用户与项目管理

  1. # 使用API创建项目(需先获取admin token)
  2. TOKEN=$(curl -u "admin:Harbor12345" \
  3. -X POST "https://registry.example.com/api/v2.0/users/current/sessions" \
  4. -H "accept: application/json" | jq -r '.token')
  5. curl -X POST "https://registry.example.com/api/v2.0/projects" \
  6. -H "accept: application/json" \
  7. -H "Authorization: Bearer $TOKEN" \
  8. -d '{"project_name": "devops", "public": false}'

3.2 镜像复制策略

  1. # 在harbor.yml中添加复制配置
  2. replication:
  3. - name: "aliyun-mirror"
  4. disabled: false
  5. src_registry:
  6. url: "https://registry.example.com"
  7. insecure: false
  8. dest_registry:
  9. url: "https://registry.cn-hangzhou.aliyuncs.com"
  10. insecure: false
  11. dest_namespace: "my-project"
  12. trigger:
  13. type: "manual"
  14. filters:
  15. tag_filter:
  16. pattern: "latest"

3.3 漏洞扫描配置

  1. # 启用Trivy扫描(需在install.sh时添加--with-trivy)
  2. # 扫描指定镜像
  3. curl -X POST "https://registry.example.com/api/v2.0/projects/library/repositories/nginx/artifacts/latest/scan" \
  4. -H "accept: application/json" \
  5. -H "Authorization: Bearer $TOKEN"

五、运维与故障排查

1. 日常维护命令

  1. # 查看日志
  2. docker-compose -f docker-compose.yml logs -f core
  3. # 备份数据
  4. sudo tar czf harbor-backup-$(date +%Y%m%d).tar.gz \
  5. /var/lib/registry \
  6. /data/database \
  7. /etc/harbor/harbor.yml
  8. # 升级流程
  9. wget https://github.com/goharbor/harbor/releases/download/v2.6.0/harbor-online-installer-v2.6.0.tgz
  10. sudo ./prepare --conf harbor.yml
  11. sudo docker-compose down
  12. sudo ./install.sh

2. 常见问题解决方案

问题1:502 Bad Gateway

原因:Nginx代理配置错误或后端服务未启动
解决

  1. # 检查Nginx容器状态
  2. docker ps | grep nginx
  3. # 查看Nginx错误日志
  4. docker logs harbor-nginx

问题2:镜像推送失败

原因:磁盘空间不足或权限问题
解决

  1. # 检查存储目录空间
  2. df -h /var/lib/registry
  3. # 检查Registry容器日志
  4. docker logs registry

问题3:HTTPS证书过期

解决

  1. # 更新证书后重启服务
  2. sudo cp new-cert.pem /etc/ssl/certs/harbor.crt
  3. sudo cp new-key.pem /etc/ssl/private/harbor.key
  4. sudo docker-compose down
  5. sudo docker-compose up -d

六、最佳实践建议

  1. 高可用架构

    • 使用Keepalived+Nginx实现负载均衡
    • 数据库采用主从复制模式
    • 存储使用分布式文件系统(如Ceph)
  2. 安全加固

    • 定期轮换管理员密码
    • 启用日志审计功能
    • 限制API访问速率(建议1000rps)
  3. 性能优化

    • 调整Registry缓存大小(/etc/registry/config.yml
      1. cache:
      2. blobdescriptor: redis
      3. layerinfo: redis
    • 启用Redis作为缓存后端
  4. CI/CD集成

    1. # GitLab CI示例
    2. push_to_harbor:
    3. stage: deploy
    4. script:
    5. - docker login registry.example.com -u $HARBOR_USER -p $HARBOR_PASS
    6. - docker build -t registry.example.com/$CI_PROJECT_PATH:$CI_COMMIT_SHA .
    7. - docker push registry.example.com/$CI_PROJECT_PATH:$CI_COMMIT_SHA
    8. only:
    9. - master

七、总结与展望

通过命令行模式部署Harbor私有镜像仓库,开发者可以获得:

  • 完全可控的镜像管理环境
  • 灵活的自动化运维能力
  • 与现有DevOps工具链的无缝集成

未来发展趋势包括:

  1. 支持Service Mesh架构的镜像分发
  2. 增强AI模型仓库的管理能力
  3. 与Kubernetes Operator深度整合

建议读者定期关注Harbor官方文档的更新,特别是安全补丁和功能增强。对于大型企业,可考虑使用Harbor Enterprise版本获取商业支持。