CentOS环境下Harbor镜像仓库部署指南与实践

CentOS环境下Harbor镜像仓库部署指南与实践

一、引言:为何选择CentOS部署Harbor?

在容器化技术快速发展的今天,私有镜像仓库已成为企业DevOps流程的核心组件。Harbor作为VMware开源的企业级Registry解决方案,不仅提供镜像存储、签名验证等基础功能,还支持RBAC权限控制、镜像复制、漏洞扫描等高级特性。而CentOS作为稳定、可靠的Linux发行版,凭借其长期支持(LTS)版本和丰富的软件生态,成为部署Harbor的理想选择。本文将详细阐述在CentOS 7/8系统上部署Harbor的全流程,帮助开发者快速构建安全的镜像管理平台。

二、环境准备:系统与依赖检查

1. 系统要求与版本选择

Harbor官方推荐使用CentOS 7或CentOS 8作为基础系统,需确保系统满足以下条件:

  • 内存:至少4GB(生产环境建议8GB+)
  • 磁盘空间:根据镜像存储需求配置,建议单独分区
  • 操作系统:CentOS 7.6+/CentOS 8.x(需关闭SELinux或配置为permissive模式)
  • 网络:确保服务器有公网IP或可访问的内网环境

2. 依赖安装:Docker与Docker Compose

Harbor依赖Docker运行,需先安装Docker引擎和Docker Compose工具:

  1. # 卸载旧版本(如有)
  2. sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
  3. # 安装依赖包
  4. sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  5. # 添加Docker官方仓库
  6. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  7. # 安装Docker CE
  8. sudo yum install -y docker-ce docker-ce-cli containerd.io
  9. # 启动Docker并设置开机自启
  10. sudo systemctl enable docker
  11. sudo systemctl start docker
  12. # 验证安装
  13. sudo docker run hello-world
  14. # 安装Docker Compose(推荐v2.0+)
  15. sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  16. sudo chmod +x /usr/local/bin/docker-compose

三、Harbor安装与配置

1. 下载Harbor安装包

从Harbor官方GitHub仓库下载最新稳定版(以v2.9.0为例):

  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

2. 配置Harbor核心参数

编辑harbor.yml文件,重点配置以下参数:

  1. # 主机名(必须为FQDN或IP,用于访问)
  2. hostname: harbor.example.com
  3. # HTTP/HTTPS配置(生产环境强烈建议启用HTTPS)
  4. http:
  5. port: 80
  6. https:
  7. port: 443
  8. certificate: /path/to/cert.pem
  9. private_key: /path/to/key.pem
  10. # 管理员密码(默认Harbor12345,建议修改)
  11. harbor_admin_password: StrongPassword123!
  12. # 数据库配置(默认使用内置PostgreSQL)
  13. database:
  14. password: root123
  15. max_idle_conns: 50
  16. max_open_conns: 100
  17. # 存储驱动(支持filesystem/s3/azure等)
  18. storage_driver:
  19. name: filesystem
  20. settings:
  21. rootdirectory: /data

3. 执行安装脚本

运行安装命令前,确保已配置好域名解析(或本地hosts文件):

  1. # 生成配置(首次运行会自动下载依赖镜像)
  2. sudo ./prepare
  3. # 启动Harbor服务
  4. sudo ./install.sh

安装完成后,检查服务状态:

  1. sudo docker-compose ps
  2. # 应显示所有服务状态为"Up"(core, database, jobservice, registry, portal, trivy)

四、验证与基础使用

1. 访问Web界面

通过浏览器访问https://harbor.example.com(或配置的IP),使用默认账号admin和配置的密码登录。界面功能包括:

  • 项目管理(创建私有/公开项目)
  • 仓库管理(查看镜像列表、标签)
  • 用户与权限管理(RBAC模型)
  • 系统配置(复制策略、垃圾回收等)

2. 客户端操作示例

推送镜像到Harbor

  1. # 登录Harbor(需替换为实际地址)
  2. docker login harbor.example.com
  3. # 输入用户名/密码
  4. # 标记镜像并推送
  5. docker tag nginx:latest harbor.example.com/myproject/nginx:v1
  6. docker push harbor.example.com/myproject/nginx:v1

从Harbor拉取镜像

  1. docker pull harbor.example.com/myproject/nginx:v1

3. 高级功能配置

启用镜像复制

  1. 在Web界面创建目标Registry(如另一个Harbor实例或Docker Hub)
  2. 配置复制规则:
    • 源项目 → 目标项目
    • 触发模式(手动/定时/事件驱动)
    • 过滤规则(按名称/标签)

集成漏洞扫描(Trivy)

Harbor内置Trivy扫描器,可在推送镜像时自动检测漏洞:

  1. # 在harbor.yml中启用
  2. trivy:
  3. ignore_unfixed: false
  4. skip_update: false
  5. insecure: false

扫描结果会在Web界面的“漏洞”标签页显示。

五、生产环境优化建议

1. 高可用部署

  • 数据库高可用:将内置PostgreSQL替换为外部集群(如Patroni+Pgpool)
  • 存储冗余:使用NFS/Ceph/S3等共享存储,避免单点故障
  • 负载均衡:前端配置Nginx或HAProxy实现多节点负载均衡

2. 安全加固

  • 强制HTTPS:通过Let’s Encrypt自动签发证书
  • 网络隔离:限制管理端口(22/443)访问来源
  • 审计日志:配置syslog或ELK收集操作日志

3. 性能调优

  • 调整Docker资源限制:编辑/etc/docker/daemon.json
    1. {
    2. "default-ulimits": {
    3. "nofile": {
    4. "Name": "nofile",
    5. "Hard": 65535,
    6. "Soft": 65535
    7. }
    8. },
    9. "storage-driver": "overlay2"
    10. }
  • 优化Harbor JVM参数:修改docker-compose.ymlcore服务的JAVA_OPTS

六、常见问题与解决方案

1. 端口冲突

问题:80/443端口被占用
解决

  1. # 查找占用进程
  2. sudo netstat -tulnp | grep :80
  3. # 停止相关服务(如Nginx/Apache)
  4. sudo systemctl stop nginx

2. 证书配置失败

问题:HTTPS访问报错NET::ERR_CERT_AUTHORITY_INVALID
解决

  • 确保证书文件路径正确
  • 浏览器导入自签名证书(或使用正规CA签发)

3. 镜像推送超时

问题Error response from daemon: login attempt to https://harbor.example.com/v2/ failed
解决

  • 检查防火墙规则(开放443/80端口)
  • 验证DNS解析是否正常
  • 增加Docker客户端超时时间:
    1. echo '{"max-concurrent-uploads": 10, "max-download-attempts": 10}' > /etc/docker/daemon.json
    2. sudo systemctl restart docker

七、总结与展望

通过本文的步骤,开发者可以在CentOS系统上快速部署一个功能完备的Harbor镜像仓库。Harbor不仅解决了私有镜像存储的需求,其丰富的企业级特性(如RBAC、复制、扫描)更能帮助团队构建安全的容器化交付流水线。未来,随着Harbor对OCI Artifacts的支持增强,它将成为管理Helm Chart、CNAB等云原生工件的核心平台。建议读者持续关注Harbor官方文档,结合实际场景进行深度定制。