Docker镜像仓库Harbor安装部署全流程指南

Docker镜像仓库Harbor安装部署全流程指南

一、Harbor简介与核心价值

Harbor是由VMware公司开源的企业级Docker镜像仓库,提供基于角色的访问控制(RBAC)、镜像签名、漏洞扫描、审计日志等企业级功能。相较于开源Docker Registry,Harbor通过Web界面、API接口和CLI工具实现更精细化的镜像管理,尤其适合需要合规性要求的企业私有云环境。

核心优势体现在三方面:

  1. 安全增强:支持HTTPS加密传输、镜像签名验证和基于OAuth2的认证
  2. 管理便捷:提供项目级权限控制、复制策略和垃圾回收机制
  3. 扩展性强:支持与LDAP/AD集成、CI/CD工具链对接和分布式部署

二、部署环境准备

硬件配置要求

  • 基础版:4核CPU、8GB内存、100GB磁盘(生产环境建议双倍配置)
  • 高可用版:需3节点以上集群,每节点配置16核CPU、32GB内存

软件依赖清单

组件 版本要求 安装方式
Docker 19.03+ 官方仓库安装
Docker Compose 1.25+ pip安装或二进制包
Python 3.6+ 系统包管理器安装
OpenSSL 1.1.1+ 系统自带或源码编译

网络拓扑设计

推荐采用三层架构:

  1. 前端负载均衡:Nginx或HAProxy实现SSL终止和请求分发
  2. 应用服务层:Harbor核心组件(Core、Jobservice、Registry)
  3. 数据存储层:独立存储节点部署PostgreSQL和Redis

三、安装部署详细步骤

1. 下载安装包

  1. # 选择稳定版本(以2.5.0为例)
  2. wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz
  3. tar xvf harbor-offline-installer-v2.5.0.tgz
  4. cd harbor

2. 配置文件修改

编辑harbor.yml核心配置项:

  1. hostname: registry.example.com # 必须为FQDN
  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_idle_conns: 50
  12. max_open_conns: 100
  13. storage_driver:
  14. name: filesystem
  15. fs_driver:
  16. rootdirectory: /var/lib/registry

3. 证书配置指南

生成自签名证书(生产环境应使用CA签发证书):

  1. mkdir -p /data/cert
  2. openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  3. -keyout /data/cert/server.key \
  4. -out /data/cert/server.crt \
  5. -subj "/CN=registry.example.com"

4. 执行安装命令

  1. # 安装前检查依赖
  2. ./prepare
  3. # 启动服务(会触发容器拉取和配置初始化)
  4. ./install.sh

四、关键组件配置详解

1. 认证系统集成

LDAP集成配置示例

  1. auth_mode: ldap
  2. ldap:
  3. url: ldap://ldap.example.com
  4. search_dn: uid=searchuser,ou=people,dc=example,dc=com
  5. search_password: searchpass
  6. base_dn: ou=people,dc=example,dc=com
  7. uid: uid
  8. filter: (objectClass=person)
  9. scope: 2
  10. timeout: 5

2. 复制策略配置

创建跨区域复制规则:

  1. # 通过API创建复制策略
  2. curl -X POST -u admin:Harbor12345 \
  3. -H "Content-Type: application/json" \
  4. -d '{
  5. "name": "prod-to-dev",
  6. "projects": [{"project_id": 1}],
  7. "targets": [{"id": 2}],
  8. "trigger": {
  9. "type": "manual"
  10. },
  11. "enable_rule": true,
  12. "replicate_deletion": false
  13. }' \
  14. http://registry.example.com/api/v2.0/replication/policies

3. 漏洞扫描配置

启用Clair扫描器:

  1. # 在harbor.yml中启用
  2. clair:
  3. url: http://clair:6060
  4. interval: 6h
  5. threshold:
  6. critical: 7
  7. high: 7
  8. medium: 7
  9. low: 7
  10. none: 7

五、运维管理最佳实践

1. 日常维护命令

  1. # 停止服务
  2. docker-compose down
  3. # 升级版本(从2.4.0升级到2.5.0)
  4. ./prepare --with-clair --with-trivy
  5. docker-compose pull
  6. docker-compose up -d
  7. # 垃圾回收(每月执行)
  8. docker run -it --name gc --rm --volumes-from registry \
  9. -e REGISTRY_STORAGE_DELETE_ENABLED=true \
  10. registry:2.7.1 garbage-collect /etc/registry/config.yml

2. 监控指标收集

Prometheus配置示例:

  1. scrape_configs:
  2. - job_name: 'harbor'
  3. metrics_path: '/api/v2.0/metrics'
  4. static_configs:
  5. - targets: ['registry.example.com:80']
  6. basic_auth:
  7. username: 'prometheus'
  8. password: 'prompass'

3. 备份恢复方案

完整备份流程:

  1. # 备份配置文件
  2. tar czvf harbor-config-backup-$(date +%Y%m%d).tar.gz \
  3. /etc/harbor/harbor.yml \
  4. /data/cert/ \
  5. /var/lib/registry/
  6. # 数据库备份
  7. docker exec -it harbor-db \
  8. pg_dump -U postgres -h 127.0.0.1 registry > registry-db-backup.sql

六、常见问题解决方案

1. 登录失败排查

  1. 检查/var/log/harbor/core.log日志
  2. 验证密码策略配置:
    1. # 在harbor.yml中
    2. password_policy:
    3. min_length: 8
    4. require_uppercase: true
    5. require_lowercase: true
    6. require_number: true
    7. require_special: true

2. 镜像推送缓慢优化

  1. 调整Registry缓存配置:

    1. registry:
    2. storage:
    3. cache:
    4. blobdescriptor: redis
    5. redis:
    6. host: redis:6379
    7. password: redispass
  2. 启用HTTP/2协议(需Nginx 1.13+)

3. 高可用部署架构

推荐采用以下架构:

  1. 负载均衡层:F5/Nginx Plus(四层负载均衡)
  2. 应用服务层:3节点Harbor集群(使用共享存储)
  3. 数据库层:PostgreSQL集群(Patroni+Pgpool
  4. 缓存层:Redis集群(33从)
  5. 存储层:分布式文件系统(Ceph/GlusterFS

七、进阶功能应用

1. 与Kubernetes集成

创建镜像拉取Secret:

  1. kubectl create secret generic regcred \
  2. --from-file=.dockerconfigjson=/root/.docker/config.json \
  3. --type=kubernetes.io/dockerconfigjson

在Pod定义中引用:

  1. spec:
  2. containers:
  3. - name: myapp
  4. image: registry.example.com/library/nginx:latest
  5. imagePullSecrets:
  6. - name: regcred

2. 自动化构建流水线

Jenkinsfile示例片段:

  1. pipeline {
  2. agent any
  3. stages {
  4. stage('Build Image') {
  5. steps {
  6. script {
  7. docker.build("registry.example.com/${env.PROJECT_NAME}/${env.IMAGE_NAME}:${env.BUILD_NUMBER}")
  8. }
  9. }
  10. }
  11. stage('Push Image') {
  12. steps {
  13. script {
  14. docker.withRegistry('https://registry.example.com', 'harbor-credentials') {
  15. docker.image("registry.example.com/${env.PROJECT_NAME}/${env.IMAGE_NAME}:${env.BUILD_NUMBER}").push()
  16. }
  17. }
  18. }
  19. }
  20. }
  21. }

八、性能调优建议

1. 存储优化参数

  1. # 在harbor.yml中调整
  2. storage:
  3. redirect:
  4. disable: false # 启用重定向减少数据传输
  5. maintenance:
  6. upload_purging:
  7. enabled: true
  8. age: 168h # 保留7天未完成上传

2. 并发控制设置

  1. jobservice:
  2. worker_pool:
  3. workers: 10 # 根据CPU核心数调整
  4. backend: "redis"
  5. redis_pool:
  6. max_idle: 30
  7. max_active: 50

3. 网络优化方案

  1. 启用TCP BBR拥塞控制算法
  2. 调整内核参数:
    1. # 在/etc/sysctl.conf中添加
    2. net.core.somaxconn = 65535
    3. net.ipv4.tcp_max_syn_backlog = 65535
    4. net.ipv4.tcp_tw_reuse = 1

通过以上详细配置和优化,Harbor可稳定支持每秒1000+的镜像拉取请求,满足中大型企业的生产环境需求。建议每季度进行一次健康检查,包括存储空间分析、证书有效期验证和性能基准测试。