如何用Docker+Docker-Compose快速部署Harbor私有镜像仓库

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

随着容器化技术的普及,Docker镜像的管理成为开发团队面临的核心问题。公有云提供的镜像仓库(如Docker Hub)存在隐私风险,且可能受限于网络访问速度;而自建私有仓库不仅能保障数据安全,还能通过本地化部署提升镜像拉取效率。Harbor作为CNCF(云原生计算基金会)毕业项目,具备权限控制、镜像扫描、日志审计等企业级功能,是当前最流行的私有镜像仓库解决方案之一。

1.1 核心优势

  • 权限管理:支持基于角色的访问控制(RBAC),可细粒度控制用户对项目、镜像的操作权限。
  • 镜像安全:集成Clair进行漏洞扫描,自动标记存在高危漏洞的镜像。
  • 高可用性:支持多节点部署,通过Notary实现镜像签名,防止篡改。
  • 兼容性:完全兼容Docker Registry API,支持Helm Chart存储。

二、环境准备与依赖检查

2.1 硬件要求

  • 最低配置:2核CPU、4GB内存、20GB磁盘空间(生产环境建议8核16GB+)
  • 操作系统:CentOS 7/8、Ubuntu 18.04/20.04等主流Linux发行版
  • 网络要求:开放443(HTTPS)、80(HTTP,可选)、22(SSH管理)端口

2.2 软件依赖

  1. # 安装Docker(以Ubuntu为例)
  2. sudo apt-get update
  3. sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  4. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  5. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  6. sudo apt-get update
  7. sudo apt-get install -y docker-ce docker-ce-cli containerd.io
  8. # 安装Docker-Compose
  9. sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  10. sudo chmod +x /usr/local/bin/docker-compose

2.3 域名与证书准备

Harbor强制要求HTTPS访问,需提前准备:

  • 域名(如harbor.example.com
  • SSL证书(PEM格式,包含全链证书与私钥)
  • 将证书文件放置于/data/cert/目录(后续配置引用)

三、使用Docker-Compose部署Harbor

3.1 下载配置模板

  1. wget https://raw.githubusercontent.com/goharbor/harbor/v2.4.1/harbor.yml.tmpl
  2. mv harbor.yml.tmpl harbor.yml

3.2 关键配置项说明

  1. # harbor.yml核心配置示例
  2. hostname: harbor.example.com # 必须与域名一致
  3. http:
  4. port: 80
  5. https:
  6. port: 443
  7. certificate: /data/cert/harbor.crt
  8. private_key: /data/cert/harbor.key
  9. harbor_admin_password: Harbor12345 # 初始管理员密码
  10. database:
  11. password: root123 # 数据库密码
  12. data_volume: /data # 数据持久化目录

3.3 启动服务

  1. # 生成配置并启动
  2. sudo mkdir -p /data/cert /data/database /data/registry
  3. sudo docker-compose -f docker-compose.yml up -d
  4. # 检查服务状态
  5. sudo docker-compose ps

3.4 验证部署

  1. # 登录测试
  2. docker login harbor.example.com
  3. # 输入用户名admin与配置的密码
  4. # 推送镜像测试
  5. docker tag nginx:latest harbor.example.com/library/nginx:latest
  6. docker push harbor.example.com/library/nginx:latest

四、进阶配置与优化

4.1 持久化存储配置

修改docker-compose.yml,将数据库与Registry数据挂载至宿主机:

  1. services:
  2. postgresql:
  3. volumes:
  4. - /data/database:/var/lib/postgresql/data
  5. registry:
  6. volumes:
  7. - /data/registry:/storage

4.2 配置自动备份

通过Cron定时任务备份数据库:

  1. # 每天凌晨2点备份
  2. 0 2 * * * docker exec harbor-db pg_dump -U postgres registry > /backup/registry_$(date +\%Y\%m\%d).sql

4.3 集成LDAP认证

  1. # 在harbor.yml中启用LDAP
  2. auth_mode: ldap
  3. ldap:
  4. url: ldaps://ldap.example.com
  5. search_dn: cn=admin,dc=example,dc=com
  6. search_password: ldap_password
  7. base_dn: dc=example,dc=com
  8. uid: uid
  9. filter: (objectClass=person)
  10. scope: 2

五、常见问题解决方案

5.1 端口冲突处理

若80/443端口被占用,可通过以下方式解决:

  1. # 修改harbor.yml中的端口映射
  2. http:
  3. port: 8080
  4. https:
  5. port: 8443
  6. # 并通过Nginx反向代理

5.2 镜像推送失败排查

  1. 检查docker login是否成功
  2. 验证网络连通性:curl -v https://harbor.example.com/v2/
  3. 查看Harbor日志:docker-compose logs registry

5.3 升级Harbor版本

  1. # 1. 备份数据
  2. sudo tar -czvf harbor_backup_$(date +%Y%m%d).tar.gz /data
  3. # 2. 下载新版本配置模板
  4. wget https://raw.githubusercontent.com/goharbor/harbor/v2.5.0/harbor.yml.tmpl
  5. # 3. 执行升级
  6. sudo ./prepare
  7. sudo docker-compose down
  8. sudo docker-compose up -d

六、生产环境最佳实践

  1. 高可用部署:使用共享存储(如NFS)挂载数据目录,部署多台Harbor实例通过负载均衡器访问。
  2. 安全加固
    • 定期轮换SSL证书
    • 启用双因素认证(配合OAuth2.0)
    • 限制管理员权限范围
  3. 监控告警:通过Prometheus+Grafana监控存储空间、请求延迟等指标。

七、总结

通过Docker+Docker-Compose部署Harbor,开发者可在30分钟内完成企业级私有镜像仓库的搭建。相比手动安装,容器化部署极大简化了依赖管理与服务编排,尤其适合快速迭代的开发环境。建议定期测试灾难恢复流程,确保业务连续性。