在CentOS 7上搭建Harbor镜像仓库:企业级容器管理指南

一、Harbor镜像仓库概述

Harbor是由VMware开源的企业级Docker Registry管理工具,提供基于角色的访问控制、镜像签名、漏洞扫描等安全功能。相较于原生Docker Registry,Harbor通过Web界面、REST API和CLI工具实现更精细化的镜像管理,特别适合需要构建私有镜像仓库的企业环境。

核心功能模块包括:

  1. 项目管理:支持多级命名空间隔离
  2. 用户管理:集成LDAP/AD认证
  3. 复制策略:实现镜像跨Registry同步
  4. 审计日志:记录完整操作轨迹
  5. 漏洞扫描:集成Clair安全扫描引擎

二、CentOS 7环境准备

2.1 系统要求

  • CentOS 7.6及以上版本(建议使用Minimal安装)
  • 4核CPU/8GB内存基础配置(生产环境建议8核16GB)
  • 40GB以上磁盘空间(根据镜像存储需求调整)
  • 静态IP地址配置

2.2 依赖安装

  1. # 安装基础开发工具
  2. yum install -y wget curl git vim net-tools
  3. # 配置Docker CE
  4. sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  5. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  6. sudo yum install -y docker-ce docker-ce-cli containerd.io
  7. sudo systemctl enable docker
  8. sudo systemctl start docker
  9. # 配置Docker存储驱动(建议使用overlay2)
  10. cat > /etc/docker/daemon.json <<EOF
  11. {
  12. "storage-driver": "overlay2",
  13. "insecure-registries": ["harbor.example.com"]
  14. }
  15. EOF
  16. sudo systemctl restart docker

2.3 网络配置

  1. # 配置防火墙规则
  2. sudo firewall-cmd --permanent --add-port=80/tcp # HTTP访问
  3. sudo firewall-cmd --permanent --add-port=443/tcp # HTTPS访问
  4. sudo firewall-cmd --permanent --add-port=4443/tcp # 控制台端口
  5. sudo firewall-cmd --reload

三、Harbor安装部署

3.1 下载安装包

  1. # 获取最新版本(示例使用v2.7.0)
  2. wget https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgz
  3. tar xvf harbor-offline-installer-v2.7.0.tgz
  4. cd harbor

3.2 配置修改

编辑harbor.yml配置文件:

  1. hostname: harbor.example.com # 必须与证书CN匹配
  2. http:
  3. port: 80
  4. https:
  5. port: 443
  6. certificate: /data/cert/harbor.crt
  7. private_key: /data/cert/harbor.key
  8. harbor_admin_password: Harbor12345 # 默认管理员密码
  9. database:
  10. password: root123
  11. max_idle_conns: 50
  12. max_open_conns: 100
  13. storage_driver:
  14. name: filesystem
  15. fs_driver:
  16. rootdirectory: /var/lib/registry

3.3 证书生成(自签名示例)

  1. mkdir -p /data/cert
  2. openssl req -newkey rsa:4096 -nodes -sha256 -keyout /data/cert/harbor.key \
  3. -x509 -days 3650 -out /data/cert/harbor.crt \
  4. -subj "/C=CN/ST=Beijing/L=Beijing/O=DevOps/CN=harbor.example.com"

3.4 安装执行

  1. # 安装前检查依赖
  2. ./prepare
  3. # 执行安装(需要root权限)
  4. sudo ./install.sh

安装完成后验证服务状态:

  1. docker-compose ps
  2. # 正常应显示以下服务运行中:
  3. # harbor-core
  4. # harbor-db
  5. # harbor-jobservice
  6. # harbor-portal
  7. # nginx
  8. # registry
  9. # registryctl

四、进阶配置与管理

4.1 用户权限管理

  1. -- 通过数据库直接管理(生产环境建议使用API
  2. USE registry;
  3. INSERT INTO user (username, email, password, realname)
  4. VALUES ('devuser', 'dev@example.com', '$2a$10$...', 'Developer');
  5. INSERT INTO project (name, owner_id, public)
  6. VALUES ('dev-project', 1, 0);
  7. INSERT INTO member (user_id, project_id, role)
  8. VALUES (2, 1, 1); -- 1=开发者角色

4.2 镜像复制策略

  1. # 配置replicate.yml示例
  2. policies:
  3. - name: "sync-to-cloud"
  4. src_registry:
  5. url: "https://harbor.example.com"
  6. insecure: false
  7. dest_registry:
  8. url: "https://cloud-registry.example.com"
  9. insecure: false
  10. dest_namespace: "library"
  11. filters:
  12. - type: "name"
  13. pattern: "^library/.*"
  14. trigger:
  15. type: "manual"
  16. delete_remote_resources: false

4.3 性能优化建议

  1. 存储优化:

    • 使用NFS/iSCSI作为后端存储时,建议配置storage_driver.redis.namespace
    • 定期执行docker system prune -af清理无用镜像
  2. 数据库调优:

    1. # /etc/my.cnf 调整
    2. [mysqld]
    3. innodb_buffer_pool_size = 4G
    4. max_connections = 500
    5. query_cache_size = 64M
  3. 高可用方案:

    • 部署Keepalived+HAProxy实现负载均衡
    • 使用共享存储(如GlusterFS)存储镜像数据
    • 配置Harbor集群模式(需Enterprise版)

五、运维管理实践

5.1 备份恢复策略

  1. # 完整备份脚本示例
  2. #!/bin/bash
  3. BACKUP_DIR="/backup/harbor_$(date +%Y%m%d)"
  4. mkdir -p $BACKUP_DIR
  5. # 数据库备份
  6. docker exec -it harbor-db sh -c "mysqldump -uroot -proot123 registry > /tmp/registry.sql"
  7. docker cp harbor-db:/tmp/registry.sql $BACKUP_DIR/
  8. # 配置文件备份
  9. cp -r /data/config $BACKUP_DIR/
  10. cp -r /data/cert $BACKUP_DIR/
  11. # 镜像数据备份(可选)
  12. tar czf $BACKUP_DIR/registry_data.tar.gz /var/lib/registry

5.2 监控方案

  1. Prometheus配置示例:

    1. # /etc/prometheus/prometheus.yml
    2. scrape_configs:
    3. - job_name: 'harbor'
    4. metrics_path: '/api/v2.0/metrics'
    5. static_configs:
    6. - targets: ['harbor.example.com:443']
    7. scheme: https
    8. tls_config:
    9. insecure_skip_verify: true
  2. 关键监控指标:

    • harbor_project_count:项目数量
    • harbor_repository_count:仓库数量
    • harbor_artifact_count:镜像数量
    • harbor_jobservice_queue_length:任务队列积压

六、常见问题解决方案

6.1 证书问题处理

  1. # 证书不受信任错误处理
  2. sudo mkdir -p /etc/docker/certs.d/harbor.example.com
  3. sudo cp /data/cert/harbor.crt /etc/docker/certs.d/harbor.example.com/ca.crt
  4. sudo systemctl restart docker

6.2 性能瓶颈诊断

  1. # 检查Registry存储性能
  2. docker exec -it registry sh -c "df -h /storage"
  3. docker exec -it registry sh -c "iostat -x 1"
  4. # 检查数据库连接数
  5. docker exec -it harbor-db sh -c "echo 'SHOW STATUS LIKE \"Threads_connected\";' | mysql -uroot -proot123 registry"

6.3 升级注意事项

  1. 升级前必须执行完整备份
  2. 检查版本兼容性矩阵
  3. 使用./prepare脚本更新配置
  4. 执行docker-compose down && docker-compose up -d重启服务

七、最佳实践建议

  1. 定期审计:

    • 每月检查未使用的镜像(docker system df
    • 每季度审查用户权限
  2. 安全加固:

    • 启用镜像签名验证
    • 配置自动漏洞扫描(Clair)
    • 限制匿名访问
  3. 容量规划:

    • 预留20%的磁盘空间作为缓冲
    • 根据业务增长预测每季度扩容
  4. 灾备方案:

    • 异地双活部署
    • 定期演练恢复流程

通过以上完整部署方案,企业可以在CentOS 7环境下快速构建高可用的Harbor镜像仓库,实现容器镜像的全生命周期管理。实际部署时建议先在测试环境验证配置,再逐步推广到生产环境。