Harbor安装全记录:从零到一的开源企业级镜像仓库搭建指南

一、Harbor简介:为何选择企业级镜像仓库?

Harbor是由VMware中国团队开源的企业级Docker Registry项目,提供权限管理、镜像复制、漏洞扫描等核心功能,解决开源Registry(如Docker Hub)在安全性、可扩展性和管理效率上的不足。其典型应用场景包括:

  • 多团队镜像隔离:通过项目(Project)划分权限,避免镜像命名冲突。
  • 镜像安全管控:集成Clair漏洞扫描,自动拦截高风险镜像。
  • 混合云部署:支持跨Region镜像同步,降低网络延迟。

相较于其他解决方案(如Nexus、JFrog Artifactory),Harbor的优势在于轻量化(基于Go语言开发)、完全开源(Apache 2.0协议)和Kubernetes原生集成(支持Helm Chart部署)。

二、安装前环境准备:硬件与软件要求

硬件配置建议

  • 生产环境:4核CPU、8GB内存、50GB磁盘(根据镜像存储量扩容)。
  • 测试环境:2核CPU、4GB内存、20GB磁盘。
  • 网络要求:需开放443(HTTPS)、80(HTTP,可选)、22(SSH管理)端口。

软件依赖清单

  1. 操作系统:CentOS 7/8、Ubuntu 18.04/20.04(推荐LTS版本)。
  2. Docker:19.03+(需支持BuildKit)。
  3. Docker Compose:1.25+(用于编排Harbor组件)。
  4. 依赖包curl wget git(安装工具)、openssl(证书生成)。

验证命令示例

  1. # 检查Docker版本
  2. docker --version
  3. # 检查Docker Compose版本
  4. docker-compose --version
  5. # 安装依赖(以CentOS为例)
  6. sudo yum install -y curl wget git openssl

三、分步安装Harbor:从下载到启动

步骤1:下载Harbor安装包

访问Harbor官方Release页面,选择最新稳定版(如v2.9.0),下载压缩包并解压:

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

步骤2:配置Harbor参数

修改harbor.yml文件,关键配置项如下:

  1. hostname: registry.example.com # 替换为实际域名或IP
  2. http:
  3. port: 80 # 可选,若使用HTTPS则需注释
  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 # 数据库密码

证书生成示例(自签名证书,生产环境建议使用CA证书):

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

步骤3:执行安装脚本

运行安装命令,Harbor会自动拉取依赖镜像并启动服务:

  1. sudo ./install.sh

成功输出示例

  1. ----Harbor has been installed and started successfully.----

步骤4:验证服务状态

检查容器运行状态:

  1. docker-compose ps

预期输出应包含coredatabaseportal等组件均为Up状态。

四、配置优化:提升Harbor性能与安全性

1. 存储后端优化

默认使用本地存储,生产环境建议配置对象存储(如S3、MinIO):

  1. # 在harbor.yml中添加
  2. storage:
  3. s3:
  4. accesskey: your-access-key
  5. secretkey: your-secret-key
  6. region: us-west-1
  7. bucket: harbor-images

2. 漏洞扫描配置

集成Clair扫描器,需在harbor.yml中启用:

  1. clair:
  2. url: http://clair:6060
  3. interval: 12h # 扫描间隔

3. 日志轮转配置

修改/var/log/harbor/目录下的日志配置,避免日志文件过大:

  1. # 示例:配置nginx日志轮转
  2. cat > /etc/logrotate.d/harbor-nginx <<EOF
  3. /var/log/harbor/nginx/*.log {
  4. daily
  5. missingok
  6. rotate 14
  7. compress
  8. delaycompress
  9. notifempty
  10. create 0640 root adm
  11. sharedscripts
  12. postrotate
  13. /usr/bin/systemctl reload nginx >/dev/null 2>&1 || true
  14. endscript
  15. }
  16. EOF

五、常见问题解决方案

问题1:端口冲突

现象Error starting userland proxy: listen tcp 0.0.0.0:443: bind: address already in use
解决

  1. # 查找占用端口的进程
  2. sudo lsof -i :443
  3. # 终止冲突进程(示例)
  4. sudo kill -9 <PID>

问题2:数据库连接失败

现象Failed to connect to database: pq: password authentication failed
解决

  1. 检查harbor.yml中的database.password是否与common/config/shared/storage/database.json一致。
  2. 重启数据库容器:
    1. docker-compose restart harbor-db

问题3:镜像推送失败

现象denied: requested access to the resource is denied
解决

  1. 确认已登录Harbor:
    1. docker login registry.example.com
  2. 检查项目权限,确保用户有push权限。

六、进阶使用建议

  1. CI/CD集成:在Jenkins/GitLab CI中配置Harbor作为镜像仓库,示例:
    1. # GitLab CI示例
    2. build:
    3. stage: build
    4. script:
    5. - docker build -t registry.example.com/project/image:$CI_COMMIT_SHA .
    6. - docker push registry.example.com/project/image:$CI_COMMIT_SHA
  2. 高可用部署:使用Harbor的复制功能实现多节点数据同步,配置示例:
    1. # 在源Harbor的System Settings中添加目标Harbor
    2. replication:
    3. - name: "primary-to-secondary"
    4. src_registry:
    5. url: "https://primary-harbor"
    6. dest_registry:
    7. url: "https://secondary-harbor"
    8. dest_namespace: "library"
    9. trigger: "manual" # 或"immediate"

七、总结与展望

通过本文的步骤,读者可完成Harbor从环境准备到生产级配置的全流程。Harbor的核心价值在于其企业级安全控制云原生生态集成,未来版本(如v3.0)将进一步优化Kubernetes Operator支持,简化集群部署。建议开发者定期关注Harbor官方文档更新,以获取最新功能特性。