logo

从零搭建Docker Harbor镜像仓库及Pull操作全指南

作者:快去debug2025.10.10 18:45浏览量:3

简介:本文详细介绍如何搭建Docker Harbor私有镜像仓库,并演示如何通过Pull命令从仓库拉取镜像,适用于企业级私有化部署场景。

一、Docker Harbor镜像仓库概述

Docker Harbor是由VMware开源的企业级Docker Registry项目,基于Docker Distribution构建,提供基于角色的访问控制、镜像安全扫描、审计日志等企业级功能。相较于原生Docker Registry,Harbor的核心优势体现在三个方面:

  1. 权限管理体系:支持项目级、镜像级细粒度权限控制,可与LDAP/AD集成
  2. 安全增强功能:内置Clair漏洞扫描引擎,支持镜像签名验证
  3. 高可用架构:支持主从复制、多节点集群部署

典型应用场景包括:

  • 金融行业等对数据安全要求高的企业私有云环境
  • 需要隔离测试/生产环境镜像的开发团队
  • 跨地域多数据中心镜像同步场景

二、Harbor镜像仓库搭建指南

1. 环境准备要求

组件 最低配置要求 推荐配置
操作系统 CentOS 7+/Ubuntu 18.04+ CentOS 8/Ubuntu 20.04
内存 4GB 8GB+
磁盘空间 40GB(根据镜像存储量调整) 100GB+(SSD优先)
网络带宽 100Mbps 1Gbps

需提前安装:

  1. # Docker CE安装示例(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. 标准化部署流程

离线安装包方式(推荐生产环境)

  1. 从GitHub Release页面下载最新版本(如v2.4.1):

    1. wget https://github.com/goharbor/harbor/releases/download/v2.4.1/harbor-offline-installer-v2.4.1.tgz
    2. tar xvf harbor-offline-installer-v2.4.1.tgz
    3. cd harbor
  2. 修改配置文件harbor.yml.tmpl关键参数:

    1. hostname: registry.example.com # 必须使用域名(可配置本地hosts解析)
    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_idle_conns: 50
    11. max_open_conns: 100
  3. 执行安装脚本:

    1. ./prepare
    2. ./install.sh

在线安装方式(测试环境)

  1. curl -L https://github.com/goharbor/harbor/releases/download/v2.4.1/harbor-online-installer-v2.4.1.tgz -o harbor-online-installer.tgz
  2. tar xvf harbor-online-installer.tgz
  3. cd harbor
  4. # 修改harbor.yml后执行
  5. ./install.sh --with-trivy # 包含漏洞扫描组件

3. 初始化配置要点

  1. 证书配置:生产环境必须使用正规CA签发的证书,自签名证书需配置客户端信任
  2. 存储后端:支持本地存储、NFS、S3兼容对象存储
    1. storage_driver:
    2. name: filesystem
    3. options:
    4. rootpath: /var/lib/registry
    5. # 或配置S3存储
    6. # name: s3
    7. # s3:
    8. # accesskey: xxx
    9. # secretkey: xxx
    10. # region: us-west-1
    11. # bucket: harbor-registry
  3. 日志轮转:配置logrotate防止日志文件过大
    1. /var/log/harbor/*.log {
    2. daily
    3. rotate 7
    4. compress
    5. missingok
    6. notifempty
    7. }

三、镜像Pull操作全解析

1. 基础Pull操作

  1. # 登录Harbor仓库(首次操作需要)
  2. docker login registry.example.com
  3. Username: admin
  4. Password:
  5. # 拉取镜像
  6. docker pull registry.example.com/library/nginx:latest

2. 高级使用场景

跨项目镜像复制

  1. # 创建系统级复制策略(需管理员权限)
  2. curl -X POST -u "admin:Harbor12345" \
  3. -H "Content-Type: application/json" \
  4. -d '{
  5. "name": "prod-to-dev",
  6. "src_registry": {
  7. "url": "https://registry.example.com",
  8. "insecure": false
  9. },
  10. "dest_registry": {
  11. "url": "https://dev-registry.example.com",
  12. "insecure": false
  13. },
  14. "dest_namespace": "dev-images",
  15. "trigger": {
  16. "type": "immediate"
  17. },
  18. "filters": [
  19. {
  20. "type": "name",
  21. "value": "prod-*/.*"
  22. }
  23. ]
  24. }' \
  25. "https://registry.example.com/api/v2.0/replication/policies"

漏洞镜像拦截

  1. 在Harbor Web控制台启用”阻止未扫描镜像”和”阻止高危漏洞镜像”策略
  2. 客户端Pull被拦截时的处理:

    1. # 查看镜像漏洞详情
    2. trivy image --severity CRITICAL registry.example.com/library/nginx:latest
    3. # 重新扫描并修复后推送
    4. docker push registry.example.com/library/nginx:patched

3. 性能优化建议

  1. 网络优化

    • 配置HTTP/2协议支持(需Nginx反向代理配置)
    • 启用镜像分块传输(chunk_size参数调整)
  2. 缓存配置

    1. # 在harbor.yml中配置
    2. proxy:
    3. http_proxy: http://proxy.example.com:8080
    4. https_proxy: http://proxy.example.com:8080
    5. no_proxy: registry.example.com,127.0.0.1
  3. 并发控制

    1. # Nginx配置示例
    2. upstream harbor {
    3. server 127.0.0.1:8080;
    4. keepalive 32;
    5. }
    6. server {
    7. location / {
    8. client_max_body_size 5000m;
    9. proxy_http_version 1.1;
    10. proxy_set_header Connection "";
    11. }
    12. }

四、运维管理最佳实践

1. 日常监控指标

指标类别 关键监控项 告警阈值
系统资源 磁盘使用率、内存使用率 >85%持续5分钟
业务指标 每秒Pull请求数、镜像存储量 突增50%
安全指标 未扫描镜像数量、高危漏洞镜像数 >0

2. 备份恢复方案

  1. 数据库备份

    1. # 每日自动备份脚本示例
    2. BACKUP_DIR=/var/lib/harbor-backup
    3. mkdir -p $BACKUP_DIR
    4. docker exec -it harbor-db pg_dump -U postgres -h 127.0.0.1 registry > $BACKUP_DIR/registry-$(date +%Y%m%d).sql
  2. 配置文件备份

    1. # 备份关键配置
    2. tar czvf harbor-config-$(date +%Y%m%d).tar.gz /etc/harbor/harbor.yml /etc/harbor/pki/

3. 升级注意事项

  1. 版本兼容性检查

    1. # 查看当前版本
    2. docker run -it --rm goharbor/harbor-db:v2.4.1 psql -U postgres -h harbor-db -l
    3. # 升级前检查
    4. ./prepare --check-upgrade
  2. 分阶段升级步骤

    1. graph TD
    2. A[备份数据] --> B[下载新版本安装包]
    3. B --> C[停止服务]
    4. C --> D[执行升级脚本]
    5. D --> E[验证服务]
    6. E --> F{升级成功?}
    7. F -->|是| G[恢复服务]
    8. F -->|否| H[回滚操作]

五、常见问题解决方案

1. Pull镜像超时问题

现象Error response from daemon: Get https://registry.example.com/v2/: net/http: request canceled while waiting for connection

解决方案

  1. 检查DNS解析是否正常:
    1. dig registry.example.com
  2. 调整客户端Docker配置:
    1. # /etc/docker/daemon.json
    2. {
    3. "max-concurrent-downloads": 10,
    4. "registry-mirrors": ["https://registry-mirror.example.com"]
    5. }

2. 证书信任问题

现象x509: certificate signed by unknown authority

解决方案

  1. 将CA证书复制到客户端:
    1. sudo mkdir -p /etc/docker/certs.d/registry.example.com
    2. sudo cp ca.crt /etc/docker/certs.d/registry.example.com/
  2. 重启Docker服务:
    1. sudo systemctl restart docker

3. 权限拒绝问题

现象error pulling image configuration: denied: requested access to the resource is denied

解决方案

  1. 检查项目成员权限:
    1. # 查看用户所属项目
    2. curl -u "user:password" https://registry.example.com/api/v2.0/projects
  2. 添加用户到项目:
    1. curl -X POST -u "admin:Harbor12345" \
    2. -H "Content-Type: application/json" \
    3. -d '{"role_id": 1, "username": "devuser"}' \
    4. "https://registry.example.com/api/v2.0/projects/1/members"

通过以上系统化的部署和运维方案,可构建高可用、安全的Docker Harbor镜像仓库,满足企业级应用场景的需求。实际部署时建议先在测试环境验证完整流程,再逐步推广到生产环境。

相关文章推荐

发表评论

活动