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

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

在容器化部署日益普及的今天,Docker镜像的管理成为开发者和运维人员的核心需求之一。公有镜像仓库(如Docker Hub)虽然方便,但存在以下痛点:

  1. 安全性风险:企业核心业务镜像暴露在公网,可能引发数据泄露或篡改。
  2. 网络依赖:国内用户访问海外仓库速度慢,影响CI/CD流水线效率。
  3. 权限控制缺失:公有仓库无法满足企业级细粒度权限管理需求。

Harbor作为VMware开源的企业级私有镜像仓库,完美解决了上述问题。其核心优势包括:

  • 基于角色的访问控制(RBAC)
  • 镜像签名与漏洞扫描
  • 多租户支持与审计日志
  • 与Kubernetes、Docker无缝集成

本文将通过命令行模式,从零开始搭建Harbor私有仓库,适用于Linux服务器环境(推荐CentOS/Ubuntu)。

二、环境准备与前置条件

1. 硬件要求

  • 最低配置:2核CPU、4GB内存、20GB磁盘空间
  • 推荐配置:4核CPU、8GB内存、100GB磁盘空间(支持高并发)

2. 软件依赖

  1. # 检查Docker版本(需19.03+)
  2. docker --version
  3. # 检查Docker Compose版本(需1.25+)
  4. docker-compose --version
  5. # 安装依赖(以CentOS为例)
  6. sudo yum install -y curl wget git

3. 网络配置

  • 开放端口:80(HTTP)、443(HTTPS)、4443(Notary服务)
  • 防火墙规则示例:
    1. sudo firewall-cmd --permanent --add-port={80,443,4443}/tcp
    2. sudo firewall-cmd --reload

三、Harbor安装部署流程

1. 下载安装包

  1. # 获取最新版本(替换为实际版本号)
  2. VERSION=2.9.0
  3. wget https://github.com/goharbor/harbor/releases/download/v${VERSION}/harbor-online-installer-v${VERSION}.tgz
  4. # 解压安装包
  5. tar -xzf harbor-online-installer-v*.tgz
  6. cd harbor

2. 配置Harbor

编辑harbor.yml核心配置文件(关键参数说明):

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

配置优化建议

  • 生产环境必须启用HTTPS(使用Let’s Encrypt免费证书)
  • 数据库密码建议使用32位随机字符串
  • 存储路径建议使用独立磁盘分区

3. 执行安装命令

  1. # 生成自签名证书(测试环境)
  2. sudo mkdir -p /data/cert
  3. sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  4. -keyout /data/cert/server.key -out /data/cert/server.crt \
  5. -subj "/CN=registry.example.com"
  6. # 启动安装(需root权限)
  7. sudo ./install.sh

安装过程输出示例:

  1. [Step 0]: checking installation environment ...
  2. [Step 1]: loading Harbor images ...
  3. [Step 2]: preparing environment ...
  4. [Step 3]: starting Harbor ...
  5. ----Harbor has been installed and started successfully.----

四、基础使用与验证

1. 登录Harbor仓库

  1. # 使用docker login命令(需替换实际地址)
  2. docker login registry.example.com
  3. Username: admin
  4. Password: Harbor12345

2. 推送镜像示例

  1. # 标记本地镜像
  2. docker tag nginx:latest registry.example.com/library/nginx:v1
  3. # 推送镜像
  4. docker push registry.example.com/library/nginx:v1

3. 常用管理命令

  1. # 停止Harbor服务
  2. cd /path/to/harbor
  3. docker-compose down
  4. # 升级Harbor版本
  5. 1. 备份数据库和配置文件
  6. 2. 下载新版本安装包
  7. 3. 修改harbor.yml后执行:
  8. ./prepare
  9. docker-compose up -d
  10. # 查看服务状态
  11. docker-compose ps

五、进阶配置与最佳实践

1. 高可用部署方案

  • 数据库集群:使用外部MySQL/PostgreSQL集群
  • 存储冗余:配置NFS/Object Storage作为后端存储
  • 负载均衡:Nginx/HAProxy实现多节点负载均衡

2. 安全加固措施

  1. # 修改默认密码策略(通过API)
  2. curl -X PUT -u admin:Harbor12345 \
  3. -H "Content-Type: application/json" \
  4. -d '{"password_policy":{"min_length":12,"uppercase":1,"lowercase":1,"number":1}}' \
  5. http://registry.example.com/api/v2.0/configurations
  6. # 启用镜像签名
  7. # 1. 初始化Notary服务
  8. # 2. 配置docker客户端信任目录
  9. export DOCKER_CONTENT_TRUST=1

3. 监控与日志

  • Prometheus监控:Harbor自带/metrics端点
  • 日志轮转:配置logrotate管理日志文件
    1. # logrotate配置示例
    2. /var/log/harbor/*.log {
    3. daily
    4. missingok
    5. rotate 14
    6. compress
    7. delaycompress
    8. notifempty
    9. copytruncate
    10. }

六、常见问题解决方案

1. 证书错误处理

现象x509: certificate signed by unknown authority
解决方案

  1. # 将自签名证书添加到系统信任库
  2. sudo cp /data/cert/server.crt /etc/pki/ca-trust/source/anchors/
  3. sudo update-ca-trust

2. 存储空间不足

现象no space left on device
解决方案

  1. 清理未使用的镜像:
    1. # 登录registry容器执行
    2. docker exec -it harbor-registry sh
    3. registry garbage-collect /etc/registry/config.yml
  2. 扩展存储容量或配置存储策略

3. 性能优化建议

  • 数据库调优:修改MySQL的innodb_buffer_pool_size
  • 缓存配置:在Nginx中启用proxy_cache
  • 并发限制:调整max_job_workers参数(默认5)

七、总结与展望

通过本文的详细指导,读者已掌握:

  1. 使用Docker命令行模式快速部署Harbor
  2. 完成基础配置与安全加固
  3. 解决常见部署问题

Harbor作为CNCF毕业项目,其2.x版本在性能、安全性方面有显著提升。未来发展方向包括:

  • 与Service Mesh深度集成
  • 增强AI模型仓库支持
  • 更细粒度的资源配额管理

建议读者定期关注Harbor官方文档,保持系统更新以获取最新功能。对于大规模生产环境,建议结合Kubernetes Operator实现自动化运维。

(全文约3200字)