Harbor 详解:企业级容器镜像仓库 一、Harbor 是什么? 1. 官方定义 vs 通俗理解 官方定义:
Harbor 是一个企业级的容器镜像仓库 ,提供镜像的存储、分发、安全扫描、漏洞分析、签名验证、复制和管理功能。
通俗比喻:
概念
类比
说明
GitHub
代码图书馆
存放源代码的地方
Docker Hub
公共应用商店
所有人都能下载的免费软件
Harbor
企业私有仓库
公司内部的私有软件仓库
镜像
软件安装包
包含完整运行环境的软件包
更形象的比喻:
1 2 3 4 你的公司需要管理各种软件: - 公共软件(如 Office、Chrome)→ Docker Hub(公共镜像) - 公司内部软件(自研系统、内部工具)→ Harbor(私有镜像) - 带敏感信息的软件(数据库、财务系统)→ Harbor + 安全控制
2. Harbor 的核心定位 1 2 Harbor = Docker Registry 增强版 + 企业级功能 (基础镜像存储) (安全+管理+高可用)
二、为什么需要 Harbor?Docker Hub 不够用吗? 对比表:Docker Hub vs Harbor
特性
Docker Hub(公共)
Harbor(私有)
企业需求
隐私性
❌ 公共或有限私有
✅ 完全私有
保护商业机密
安全性
⭐ 基础扫描
⭐⭐⭐ 深度扫描+策略
安全合规
控制权
⭐ 有限控制
⭐⭐⭐ 完全控制
自主管理
网络速度
⭐ 依赖外网
⭐⭐⭐ 内网高速
快速部署
成本
💰 免费+付费套餐
🆓 开源免费
成本控制
高可用
✅ 但不可控
✅ 自主部署
业务连续性
定制化
❌ 不可定制
✅ 完全定制
符合企业流程
数据主权
❌ 数据在国外
✅ 数据在企业内部
数据合规
实际场景对比 1 2 3 4 5 6 7 8 9 10 11 12 13 14 docker pull mysql:8.0 1. 从国外下载,速度慢 2. 无法控制版本更新 3. 可能有安全漏洞 4. 公司审计无法追踪 docker pull harbor.mycompany.com/library/mysql:8.0
三、Harbor 的核心功能架构 1. 整体架构图 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ┌─────────────────────────────────────────────────────────┐ │ Harbor 服务集群 │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ Core │ │ Registry│ │ Job │ │ Portal │ │ │ │ 服务 │ │ 服务 │ │ 服务 │ │ Web界面 │ │ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 存储后端 │ │ │ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │ │ │ 文件│ │ S3 │ │ GCS │ │ Swift│ │ │ │ │ │系统 │ │ │ │ │ │ │ │ │ │ │ └─────┘ └─────┘ └─────┘ └─────┘ │ │ │ └─────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────┘
2. 八大核心功能模块 功能1:镜像存储与分发(基础) 1 2 3 4 5 作用:安全地存储和管理 Docker 镜像 场景: - 开发者 push 新版本的镜像 - 测试环境 pull 镜像进行测试 - 生产环境部署时快速拉取
功能2:镜像安全扫描(核心) 1 2 3 4 5 6 7 8 扫描引擎:Trivy、Clair、Anchore 扫描内容: 1. OS 包漏洞(CVE 数据库) 2. 应用依赖漏洞(npm, pip, maven) 3. 配置安全问题 4. 许可证合规检查 示例:推送镜像后的自动扫描
1 2 3 4 5 6 7 8 docker push harbor.mycompany.com/myapp:v1.0 1. 下载最新 CVE 数据库 2. 扫描镜像每一层 3. 生成漏洞报告 4. 根据策略决定是否阻止部署
功能3:镜像签名与验证 1 2 3 4 5 作用:确保镜像来源可信,防止篡改 流程: 开发者 → 签名镜像 → 推送到 Harbor → 验证签名 → 部署 实现:Notary 服务(TUF 框架)
功能4:多租户与权限控制 1 2 3 4 5 6 7 8 9 10 企业组织结构: 公司(Organization) ├── 研发部(Projects) │ ├── 前端组(frontend-team)→ 读写权限 │ ├── 后端组(backend-team)→ 读写权限 │ └── 测试组(qa-team)→ 只读权限 ├── 运维部(Projects) │ └── 基础设施组(infra-team)→ 管理员权限 └── 外部合作伙伴(Projects) └── 供应商(vendor)→ 受限访问权限
功能5:镜像复制与同步 1 2 3 4 5 6 7 8 9 10 场景:多数据中心、混合云部署 北京数据中心 ←─镜像复制─→ 上海数据中心 ↓ ↓ 生产环境 灾备环境 配置方式: 1. 基于策略的复制(定时/实时) 2. 过滤规则(只复制特定标签) 3. 带宽控制
功能6:垃圾回收 1 2 3 4 5 问题:镜像被删除后,底层数据仍占用空间 解决:Harbor 自动清理未被引用的数据层 示例:镜像 myapp:v1.0 和 myapp:v2.0 共享基础层 删除 v1.0 → 只删除独有层,共享层保留
功能7:Webhook 与集成 1 2 3 4 5 6 7 8 触发事件:镜像推送、扫描完成、复制完成 目标系统:Jenkins、K8s、监控系统、通知系统 示例流程: 1. 镜像推送到 Harbor 2. Harbor 触发 Webhook 3. Jenkins 收到通知,开始部署 4. 发送部署结果到 Slack
功能8:审计日志 1 2 3 4 5 6 7 记录所有操作: - 谁(用户/机器人) - 什么时候(时间戳) - 做了什么(操作类型) - 对什么资源(镜像/项目) 合规要求:满足 SOC2、ISO27001 等审计要求
四、企业使用 Harbor 的完整工作流 场景:电商公司的容器化部署流程 graph TD
A[开发完成代码] --> B[Git提交触发CI]
B --> C[Jenkins构建镜像]
C --> D[推送到Harbor]
D --> E[Harbor自动安全扫描]
E --> F{扫描通过?}
F -->|是| G[标记为可部署]
F -->|否| H[通知开发修复]
G --> I[同步到生产Harbor]
I --> J[K8s拉取镜像部署]
J --> K[监控运行状态]
详细步骤说明: 步骤1:开发与构建 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 stage('Build and Push to Harbor' ) { steps { script { // 1. 构建镜像 docker.build("myapp:${BUILD_NUMBER} " ) // 2. 打上 Harbor 标签 docker.tag( "myapp:${BUILD_NUMBER} " , "harbor.mycompany.com/dev/myapp:${BUILD_NUMBER} " ) // 3. 登录 Harbor withCredentials([usernamePassword( credentialsId: 'harbor-dev' , usernameVariable: 'HARBOR_USER' , passwordVariable: 'HARBOR_PASS' )]) { sh "" " docker login harbor.mycompany.com \ -u ${HARBOR_USER} \ -p ${HARBOR_PASS} " "" } // 4. 推送到 Harbor docker.push("harbor.mycompany.com/dev/myapp:${BUILD_NUMBER} " ) } } }
步骤2:安全扫描与审批 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Harbor Web 界面显示: ================================= 镜像:harbor.mycompany.com/dev/myapp:123 安全状态:⚠️ 有风险 漏洞统计: - 高危:2个 - 中危:5个 - 低危:12个 详细漏洞: 1. CVE-2023-1234(高危) - 影响:openssl 版本 < 1.1.1t - 修复:升级到 openssl 1.1.1u - 所在层:base layer 2. CVE-2023-5678(中危) - 影响:python 3.9 漏洞 - 修复:升级到 python 3.9.16 - 所在层:dependency layer ================================= 操作:❌ 阻止推送到生产环境
步骤3:镜像晋级流程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 version: 1.0 rules: - name: "开发到测试晋级" source_project: "dev" target_project: "test" conditions: - type: "vulnerability" severity: "high" max_count: 0 - type: "vulnerability" severity: "medium" max_count: 3 - type: "signature" required: true actions: - type: "replication" trigger: "manual" override: true - name: "测试到生产晋级" source_project: "test" target_project: "prod" conditions: - type: "vulnerability" severity: "high,medium" max_count: 0 - type: "approval" required: true - type: "test_result" required: true
步骤4:生产环境部署 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 apiVersion: apps/v1 kind: Deployment metadata: name: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: imagePullSecrets: - name: harbor-pull-secret containers: - name: myapp image: harbor.mycompany.com/prod/myapp:v1.2.3 ports: - containerPort: 8080
五、Harbor 在企业中的实际应用场景 场景1:金融行业 - 安全合规 需求特点:
严格的监管要求(银保监会、证监会)
敏感数据不能出境
完整的审计追溯
强制安全扫描
Harbor 配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 security: scan_on_push: true severity_threshold: medium require_signature: true enable_content_trust: true project_creation_restriction: adminonly tag_immutability: true
场景2:游戏公司 - 全球分发 需求特点:
全球多个数据中心
大镜像文件(游戏客户端)
快速部署更新
版本灰度发布
Harbor 配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 replication: endpoints: - name: "beijing-dc" url: "https://harbor-bj.mycompany.com" credential: access_key: "..." access_secret: "..." - name: "shanghai-dc" url: "https://harbor-sh.mycompany.com" credential: access_key: "..." access_secret: "..." - name: "frankfurt-dc" url: "https://harbor-de.mycompany.com" credential: access_key: "..." access_secret: "..." policies: - name: "prod-replication" description: "生产镜像全球同步" src_registry: "beijing-dc" dest_registry: ["shanghai-dc" , "frankfurt-dc" ] filters: - kind: "name" value: "prod/.*" - kind: "tag" value: "v[0-9]+.*" trigger: type: "event_based" trigger_settings: cron: "" deletion: false override: true enabled: true
场景3:制造业 - 边缘计算 需求特点:
工厂环境网络不稳定
设备资源有限
离线部署需求
版本一致性要求
解决方案:
1 2 3 4 5 6 7 8 9 10 11 中心 Harbor(总部) ↓ 镜像同步 边缘 Harbor(工厂1) 边缘 Harbor(工厂2) 边缘 Harbor(工厂3) ↓ ↓ ↓ 生产线设备 生产线设备 生产线设备 特点: 1. 中心统一管理所有镜像 2. 边缘缓存常用镜像 3. 网络断开时仍可部署 4. 统一的版本控制
六、Harbor 部署架构 1. 单机部署(小型企业) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 单台服务器: ┌─────────────────────────────────┐ │ Harbor 单节点 │ │ ┌─────────────────────────┐ │ │ │ Nginx(反向代理) │ │ │ ├─────────────────────────┤ │ │ │ Harbor Core │ │ │ ├─────────────────────────┤ │ │ │ Registry │ │ │ ├─────────────────────────┤ │ │ │ PostgreSQL(数据库) │ │ │ ├─────────────────────────┤ │ │ │ Redis(缓存) │ │ │ └─────────────────────────┘ │ └─────────────────────────────────┘
2. 高可用部署(中大型企业) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 多节点集群: ┌─────────────────────────────────────────────────┐ │ 负载均衡器(HAProxy/Nginx) │ ├──────────────┬──────────────┬──────────────┤ │ Harbor节点1 │ Harbor节点2 │ Harbor节点3 │ │ │ │ │ ├──────────────┼──────────────┼──────────────┤ │ 共享存储 │ 共享存储 │ 共享存储 │ │ (Ceph/S3) │ (Ceph/S3) │ (Ceph/S3) │ └──────────────┴──────────────┴──────────────┘ │ ┌─────┴─────┐ │ 外部数据库 │ │ PostgreSQL│ │ 集群 │ └───────────┘
3. 部署配置示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 hostname: harbor.mycompany.com http: port: 80 https: port: 443 certificate: /data/cert/server.crt private_key: /data/cert/server.key database: password: "root123" max_idle_conns: 50 max_open_conns: 100 data_volume: /data storage_service: filesystem: rootdirectory: /data/registry s3: region: us-east-1 bucket: my-harbor-bucket accesskey: AKIAIOSFODNN7EXAMPLE secretkey: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY secure: true v4auth: true chunksize: 5242880 rootdirectory: /harbor replication: enabled: true trivy: enabled: true ignore_unfixed: false severity: high,medium,low skip_update: false offline_scan: false notification: webhook_job_max_retry: 3 log: level: info rotate_count: 50 rotate_size: 200M location: /var/log/harbor
七、Harbor 与其他工具集成 1. 与 Kubernetes 集成 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 kubectl create secret docker-registry harbor-secret \ --docker-server=harbor.mycompany.com \ --docker-username=admin \ --docker-password=Harbor12345 \ --docker-email=admin@mycompany.com \ -n production apiVersion: apps/v1 kind: Deployment spec: template: spec: imagePullSecrets: - name: harbor-secret containers: - name: app image: harbor.mycompany.com/prod/myapp:v1.0
2. 与 Jenkins 集成 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 pipeline { environment { HARBOR_URL = 'harbor.mycompany.com' HARBOR_PROJECT = 'dev' } stages { stage('Build and Push' ) { steps { script { docker.build("${HARBOR_URL}/${HARBOR_PROJECT}/myapp:${BUILD_NUMBER}" ) withCredentials([usernamePassword( credentialsId: 'harbor-credentials' , usernameVariable: 'HARBOR_USER' , passwordVariable: 'HARBOR_PASS' )]) { sh """ docker login ${HARBOR_URL} \ -u ${HARBOR_USER} \ -p ${HARBOR_PASS} """ } docker.push("${HARBOR_URL}/${HARBOR_PROJECT}/myapp:${BUILD_NUMBER}" ) } } } stage('Wait for Security Scan' ) { steps { script { def scanResult = waitForHarborScan( image: "${HARBOR_URL}/${HARBOR_PROJECT}/myapp:${BUILD_NUMBER}" , timeout: 300 ) if (scanResult.vulnerabilities.critical > 0 ) { error('镜像存在严重漏洞,部署被阻止' ) } } } } } }
3. 与 GitLab 集成 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 variables: HARBOR_URL: "harbor.mycompany.com" HARBOR_PROJECT: "ci" stages: - build - test - push build-image: stage: build script: - docker build -t ${HARBOR_URL}/${HARBOR_PROJECT}/${CI_PROJECT_NAME}:${CI_COMMIT_SHA} . push-to-harbor: stage: push script: - echo $HARBOR_PASSWORD | docker login ${HARBOR_URL} -u ${HARBOR_USERNAME} --password-stdin - docker push ${HARBOR_URL}/${HARBOR_PROJECT}/${CI_PROJECT_NAME}:${CI_COMMIT_SHA} only: - main
八、Harbor 运维管理 1. 监控指标 关键监控项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 harbor_storage_used_bytes harbor_storage_available_bytes harbor_project_count harbor_repository_count harbor_artifact_count harbor_http_request_duration_seconds harbor_http_requests_total harbor_scan_completed_total harbor_scan_failed_total harbor_vulnerability_count harbor_replication_tasks_total harbor_replication_success_total harbor_replication_failed_total
2. 备份与恢复 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 BACKUP_DIR="/backup/harbor-$(date +%Y%m%d) " docker-compose -f /opt/harbor/docker-compose.yml down pg_dump -h localhost -U postgres registry > ${BACKUP_DIR} /registry.sql pg_dump -h localhost -U postgres notaryserver > ${BACKUP_DIR} /notaryserver.sql pg_dump -h localhost -U postgres notarysigner > ${BACKUP_DIR} /notarysigner.sql cp -r /opt/harbor/harbor.yml ${BACKUP_DIR} /cp -r /data/secret ${BACKUP_DIR} /cp -r /data/registry ${BACKUP_DIR} /docker-compose -f /opt/harbor/docker-compose.yml up -d tar -czf ${BACKUP_DIR} .tar.gz ${BACKUP_DIR}
3. 性能优化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 database: max_idle_conns: 100 max_open_conns: 200 conn_max_lifetime: 300 redis: pool: max_active: 200 max_idle: 50 idle_timeout: 300 core: workers: 10 proxy: cache: enabled: true expire_hours: 24
九、Harbor vs 其他镜像仓库 功能对比表
特性
Harbor
Docker Registry
Nexus
GitLab Registry
JFrog Artifactory
开源免费
✅
✅
✅
✅(内置)
❌ 商业
企业级功能
✅⭐⭐
❌
✅⭐
✅⭐
✅⭐⭐⭐
安全扫描
✅ 内置
❌
✅ 插件
✅ 集成
✅ 高级
镜像签名
✅ Notary
❌
❌
❌
✅
多租户
✅
❌
✅
✅
✅
复制同步
✅
❌
✅ 有限
✅ 有限
✅
Web UI
✅ 优秀
❌
✅
✅
✅
RBAC
✅ 精细
❌
✅
✅
✅
Helm 支持
✅
❌
✅
❌
✅
部署复杂度
中等
简单
中等
简单
复杂
选型建议 1 2 3 4 5 6 7 8 9 10 11 12 选择 Harbor 当: 1. 需要完全开源的解决方案 2. 有严格的安全合规要求 3. 需要多数据中心复制 4. 预算有限但需要企业功能 5. 团队熟悉 Docker 生态 选择其他方案当: 1. 只需要基础镜像存储 → Docker Registry 2. 已经有 GitLab → GitLab Registry 3. 需要全语言包管理 → Nexus/Artifactory 4. 企业级商业支持 → JFrog Artifactory
十、实际案例:大型互联网公司的 Harbor 实践 案例背景
公司规模:5000+ 员工,200+ 开发团队
镜像数量:50,000+ 个镜像
日均推送:3000+ 次
存储量:50TB+
全球部署:5个数据中心
Harbor 集群架构 1 2 3 4 5 6 7 8 9 10 11 12 全局 Harbor 集群: ┌─────────────────────────────────────────────────┐ │ 全局管理 Harbor(北京) │ │ (只管理元数据) │ └─────────────────────────────────────────────────┘ ↓ 配置同步 ┌──────────┬──────────┬──────────┬──────────┐ │ 区域Harbor│ 区域Harbor│ 区域Harbor│ 区域Harbor│ │ 北京 │ 上海 │ 深圳 │ 美国 │ └──────────┴──────────┴──────────┴──────────┘ ↓ ↓ ↓ ↓ 华北业务 华东业务 华南业务 海外业务
实施效果 实施前:
1 2 3 4 5 6 1. 镜像存储在各自团队的服务器上 2. 安全漏洞无法统一管理 3. 镜像版本混乱,回滚困难 4. 跨国部署速度极慢 5. 审计日志不完整
实施后:
1 2 3 4 5 6 ✅ 统一管理:所有镜像集中存储 ✅ 安全可控:每个镜像都经过安全扫描 ✅ 快速部署:区域缓存,秒级拉取 ✅ 版本清晰:完整的版本历史和晋级流程 ✅ 合规审计:满足各种监管要求 ✅ 成本节约:减少重复存储,优化带宽
关键配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 deployment: mode: cluster replicas: 3 storage: type: s3 s3: endpoint: https://s3.mycompany.com bucket: harbor-prod encryption: true cache: redis: cluster: true nodes: - redis-1:6379 - redis-2:6379 - redis-3:6379 scanning: concurrency: 10 offline_update: true replication: max_concurrency: 5
总结:Harbor 的核心价值 一句话总结 Harbor 是企业级私有容器镜像仓库,提供安全、可靠、高效的镜像全生命周期管理。
三大核心价值 1. 安全合规价值 1 2 3 4 输入:不可信的镜像 处理:安全扫描 + 签名验证 + 访问控制 输出:可信的、安全的镜像 结果:降低安全风险,满足合规要求
2. 运维管理价值 1 2 3 问题:镜像分散、版本混乱、部署缓慢 方案:集中存储 + 版本管理 + 智能复制 结果:标准化流程,提升部署效率
3. 成本控制价值 1 2 3 节省:重复存储、跨境带宽、人工管理 实现:存储优化、区域缓存、自动化流程 效果:降低IT成本,提升资源利用率
适用场景判断 应该使用 Harbor 当:
✅ 公司有超过 20 个微服务
✅ 需要满足安全合规要求
✅ 有多个环境(开发、测试、生产)
✅ 团队分布在多个地理位置
✅ 需要完整的审计追溯
可以不用 Harbor 当:
❌ 个人学习或小型项目
❌ 只有几个简单的容器应用
❌ 不需要安全扫描和签名
❌ 所有服务都在单地域部署
Harbor 不是:
❌ 不是代码仓库(那是 Git)
❌ 不是 CI/CD 工具(那是 Jenkins/GitLab CI)
❌ 不是容器编排平台(那是 Kubernetes)
❌ 不是监控系统(那是 Prometheus)
Harbor 是:
✅ 容器镜像的”保险库” + “质检中心” + “分发中心”
✅ 连接开发(构建)和运维(部署)的关键桥梁
✅ 企业容器化转型的基础设施
通过 Harbor,企业可以实现从”能用容器”到”用好容器”的跨越,真正发挥容器技术的全部潜力。