Docker+Harbor私有仓库搭建:从安装到推送全流程指南

一、背景与需求分析

在容器化开发中,镜像管理是核心环节。企业使用公有云镜像仓库(如Docker Hub)存在安全风险、网络依赖和速率限制等问题。私有镜像仓库可实现:

  1. 安全控制:通过权限管理限制镜像访问
  2. 性能优化:避免跨国网络延迟
  3. 合规要求:满足金融、政府等行业的敏感数据存储规范
    Harbor作为VMware开源的企业级Registry解决方案,提供RBAC权限控制、镜像复制、漏洞扫描等高级功能,是构建私有仓库的理想选择。

二、环境准备与依赖安装

2.1 服务器要求

  • 操作系统:CentOS 7/8或Ubuntu 20.04+
  • 硬件配置:建议4核8G内存以上(生产环境)
  • 存储空间:根据镜像存储量规划(建议SSD)

2.2 Docker安装

  1. # CentOS 7示例
  2. sudo yum install -y yum-utils
  3. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  4. sudo yum install docker-ce docker-ce-cli containerd.io
  5. sudo systemctl enable --now docker
  6. # 验证安装
  7. docker --version
  8. docker run hello-world

2.3 Harbor依赖检查

  • Docker Compose 1.18+
  • Python 3.6+(可选,用于脚本处理)
  • OpenSSL(用于生成证书)

三、Harbor安装配置全流程

3.1 下载安装包

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

3.2 配置文件修改

编辑harbor.yml核心配置项:

  1. hostname: reg.example.com # 需与DNS解析一致
  2. http:
  3. port: 80
  4. https:
  5. port: 443
  6. certificate: /data/cert/server.crt
  7. private_key: /data/cert/server.key
  8. harbor_admin_password: Harbor12345 # 初始管理员密码
  9. database:
  10. password: root123
  11. max_open_conns: 1000
  12. max_idle_conns: 100

3.3 HTTPS证书配置(生产环境必备)

  1. # 生成自签名证书(测试用)
  2. mkdir -p /data/cert
  3. openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  4. -keyout /data/cert/server.key -out /data/cert/server.crt \
  5. -subj "/CN=reg.example.com/O=MyCompany/C=CN"
  6. # 证书权限设置
  7. chmod 400 /data/cert/server.key
  8. chmod 644 /data/cert/server.crt

3.4 安装执行

  1. # 安装前检查
  2. ./prepare
  3. # 执行安装(需root权限)
  4. sudo ./install.sh
  5. # 验证服务状态
  6. docker-compose ps

四、Harbor核心功能配置

4.1 项目管理

  1. 登录Web控制台(默认https://reg.example.com
  2. 创建项目:library(公开)、dev-team(私有)
  3. 配置项目属性:
    • 镜像自动清理策略
    • 漏洞扫描级别
    • 复制策略(跨区域同步)

4.2 用户与权限管理

  1. -- 示例:通过API创建用户(需管理员权限)
  2. POST /api/v2.0/users
  3. {
  4. "username": "dev_user",
  5. "email": "dev@example.com",
  6. "password": "SecurePass123",
  7. "realname": "Developer"
  8. }
  9. -- 分配项目角色
  10. PUT /api/v2.0/projects/{project_id}/members/{user_id}
  11. {
  12. "role_id": 1 # 1=项目管理员, 2=开发者, 3=访客
  13. }

4.3 存储后端配置

支持多种存储驱动:

  • 本地存储/data/registry(默认)
  • S3兼容存储
    1. storage_service:
    2. s3:
    3. accesskey: AKIAIOSFODNN7EXAMPLE
    4. secretkey: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    5. region: us-west-1
    6. bucket: harbor-registry
    7. regionendpoint: https://s3.example.com

五、镜像推送实战操作

5.1 Docker客户端配置

  1. # 登录Harbor
  2. docker login reg.example.com
  3. Username: admin
  4. Password: Harbor12345
  5. # 标记镜像
  6. docker tag nginx:latest reg.example.com/library/nginx:v1
  7. # 推送镜像
  8. docker push reg.example.com/library/nginx:v1

5.2 镜像拉取测试

  1. # 从其他机器拉取(需先登录)
  2. docker pull reg.example.com/library/nginx:v1
  3. # 验证镜像完整性
  4. docker inspect reg.example.com/library/nginx:v1 | grep "RepoDigests"

5.3 自动化构建集成

示例GitLab CI配置:

  1. build_image:
  2. stage: build
  3. script:
  4. - docker build -t reg.example.com/$CI_PROJECT_PATH:$CI_COMMIT_SHA .
  5. - docker push reg.example.com/$CI_PROJECT_PATH:$CI_COMMIT_SHA
  6. only:
  7. - master

六、运维与故障排查

6.1 常见问题处理

  1. 502 Bad Gateway

    • 检查Nginx容器日志:docker logs harbor-nginx
    • 验证后端服务状态:docker-compose ps
  2. 证书错误

    • 更新客户端证书存储:
      1. sudo cp /data/cert/server.crt /etc/docker/certs.d/reg.example.com/ca.crt
      2. sudo systemctl restart docker
  3. 存储空间不足

    • 执行GC清理:
      1. docker exec -it harbor-registry /bin/sh
      2. registry garbage-collect /etc/registry/config.yml

6.2 性能优化建议

  1. 缓存配置

    1. # 在harbor.yml中启用
    2. cache:
    3. enabled: true
    4. layer_cache_size: 10GB
  2. 并发控制

    1. # 调整registry并发数
    2. registry:
    3. storage:
    4. delete:
    5. enabled: true
    6. cache:
    7. blobdescriptor: inmemory
    8. maintenance:
    9. uploadpurging:
    10. enabled: true
    11. age: 168h
    12. interval: 24h
    13. dryrun: false
    14. redis:
    15. addr: "harbor-redis:6379"
    16. db_index: 0
    17. dial_timeout: 10s
    18. read_timeout: 30s
    19. write_timeout: 30s
    20. pool:
    21. max_idle: 30
    22. max_active: 100
    23. idle_timeout: 300s

七、安全加固最佳实践

  1. 网络隔离

    • 限制Harbor管理端口(80/443)仅允许内网访问
    • 使用VPN或零信任网络架构
  2. 审计日志

    • 启用操作日志:
      1. # 在harbor.yml中
      2. audit_logger:
      3. enabled: true
      4. destination: file
      5. path: /var/log/harbor/audit.log
  3. 镜像签名验证

    1. # 生成GPG密钥
    2. gpg --full-generate-key
    3. # 导出公钥
    4. gpg --export --armor > pubkey.gpg
    5. # 在Harbor中配置信任密钥

八、进阶功能扩展

  1. 与K8s集成

    1. # 创建secret
    2. kubectl create secret docker-registry regcred \
    3. --docker-server=reg.example.com \
    4. --docker-username=admin \
    5. --docker-password=Harbor12345 \
    6. --docker-email=admin@example.com
    7. # 在Pod中使用
    8. imagePullSecrets:
    9. - name: regcred
  2. 多集群镜像同步

    1. # 配置复制规则
    2. replication:
    3. - name: sync-to-prod
    4. disabled: false
    5. projects:
    6. - name: "library"
    7. target_projects:
    8. - name: "library"
    9. project_id: 2
    10. triggers:
    11. - type: "manual"
    12. dest_registry:
    13. url: "https://reg-prod.example.com"
    14. insecure: false
    15. username: "admin"
    16. password: "ProdPass123"

通过本指南的系统学习,开发者可掌握从环境搭建到高级运维的全流程技能。实际部署时建议先在测试环境验证配置,再逐步迁移到生产环境。持续关注Harbor官方文档(https://goharbor.io/docs/)获取最新功能更新。