使用Docker与Docker Compose搭建远程私有镜像仓库Harbor

引言

在容器化开发环境中,镜像管理是核心环节之一。公有镜像仓库(如Docker Hub)虽方便,但存在安全风险和访问限制,尤其在私有化部署场景下。Harbor作为开源的企业级私有镜像仓库,支持权限控制、镜像签名、漏洞扫描等功能,成为众多开发者和企业的首选。本文将基于Docker和Docker Compose,详细介绍如何快速搭建一个远程可用的Harbor私有镜像仓库,帮助开发者高效管理镜像。

一、环境准备

1.1 硬件与软件要求

  • 服务器配置:建议至少2核4G内存,20GB以上磁盘空间(根据镜像存储需求调整)。
  • 操作系统:Linux(如Ubuntu 20.04/CentOS 7+),需支持Docker和Docker Compose。
  • 网络环境:确保服务器有公网IP或内网穿透能力,以便远程访问。
  • 依赖工具
    • Docker(版本≥19.03)
    • Docker Compose(版本≥1.28)
    • curl/wget(用于下载Harbor安装包)

1.2 安装Docker与Docker Compose

以Ubuntu为例:

  1. # 安装Docker
  2. sudo apt update
  3. sudo apt install -y docker.io
  4. sudo systemctl enable --now docker
  5. # 安装Docker Compose
  6. sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  7. sudo chmod +x /usr/local/bin/docker-compose

验证安装:

  1. docker --version
  2. docker-compose --version

二、Harbor核心组件解析

Harbor基于Docker构建,主要包含以下组件:

  • Core Services:提供API、认证、权限管理等功能。
  • Registry:存储镜像的核心服务。
  • Database:存储用户、项目、镜像元数据(默认使用PostgreSQL)。
  • Redis:缓存会话和任务队列。
  • Clair(可选):镜像漏洞扫描工具。
  • Notary(可选):镜像签名服务。

通过Docker Compose,可一键启动所有依赖服务,简化部署流程。

三、使用Docker Compose部署Harbor

3.1 下载Harbor安装包

从官方GitHub发布页下载最新版本(以v2.9.0为例):

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

3.2 配置Harbor

编辑harbor.yml文件,关键配置项如下:

  1. # 主机名(必须为域名或IP,远程访问需配置DNS或hosts)
  2. hostname: registry.example.com
  3. # HTTP/HTTPS配置(生产环境建议启用HTTPS)
  4. https:
  5. certificate: /path/to/cert.pem
  6. private_key: /path/to/key.pem
  7. # 数据库配置(默认使用内置PostgreSQL)
  8. database:
  9. password: root123
  10. max_idle_conns: 50
  11. max_open_conns: 100
  12. # 存储驱动(支持filesystem、s3等)
  13. storage_driver:
  14. name: filesystem
  15. filesystem:
  16. rootdirectory: /data
  17. # 管理员密码(默认admin/Harbor12345,建议修改)
  18. harbor_admin_password: Harbor12345

注意事项

  • 若使用HTTPS,需提前准备证书并修改hostname为域名。
  • 生产环境建议将数据库密码、存储路径等敏感信息通过环境变量注入。

3.3 编写Docker Compose文件

Harbor官方已提供预配置的docker-compose.yml,无需手动编写。文件内容包含:

  • Harbor核心服务harbor-coreharbor-jobserviceharbor-portal
  • 数据库与缓存postgresqlredis
  • Registry与Notaryregistrynotary-servernotary-signer
  • Clair(可选)clairclair-adapter

3.4 启动Harbor

执行安装脚本:

  1. ./install.sh --with-clair --with-notary # 可选组件按需添加

启动成功后,访问http://<hostname>(默认端口80),使用管理员账号登录。

四、验证与基础使用

4.1 登录Harbor

  1. docker login registry.example.com

输入用户名(admin)和密码(配置文件中设置的密码)。

4.2 推送与拉取镜像

  • 标记镜像
    1. docker tag nginx:latest registry.example.com/library/nginx:v1
  • 推送镜像
    1. docker push registry.example.com/library/nginx:v1
  • 拉取镜像
    1. docker pull registry.example.com/library/nginx:v1

4.3 Web界面管理

Harbor提供直观的Web界面,支持:

  • 项目创建与管理(公开/私有)。
  • 用户与角色权限分配。
  • 镜像标签管理、复制策略配置。
  • 漏洞扫描报告查看(需启用Clair)。

五、高级配置与优化

5.1 启用HTTPS

  1. 生成自签名证书(或使用Let’s Encrypt):
    1. openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout cert.key -out cert.pem
  2. 修改harbor.yml中的https配置,指向证书路径。
  3. 重启Harbor:
    1. docker-compose down
    2. docker-compose up -d

5.2 持久化存储

默认情况下,Harbor数据存储在/data目录。建议通过卷挂载实现持久化:

  1. # 在docker-compose.yml中修改
  2. services:
  3. postgresql:
  4. volumes:
  5. - /path/to/postgresql/data:/var/lib/postgresql/data
  6. registry:
  7. volumes:
  8. - /path/to/registry/data:/storage

5.3 高可用部署

对于生产环境,可通过以下方式提升可用性:

  • 数据库高可用:使用外部PostgreSQL集群。
  • 负载均衡:在Harbor前部署Nginx或HAProxy。
  • 多节点部署:通过共享存储(如NFS)同步镜像数据。

六、常见问题与解决方案

6.1 端口冲突

若80/443端口被占用,修改harbor.yml中的harbor_admin_serverproxy端口,并更新Docker Compose配置。

6.2 镜像推送失败

  • 检查网络连接和DNS解析。
  • 确认镜像标签格式正确(必须包含域名或IP)。
  • 查看Harbor日志定位错误:
    1. docker-compose logs -f

6.3 性能优化

  • 调整database.max_idle_connsmax_open_conns
  • 启用Redis缓存加速会话管理。
  • 对大规模镜像库,考虑分项目存储。

七、总结与展望

通过Docker和Docker Compose部署Harbor,开发者可快速构建一个功能完善的私有镜像仓库,解决公有仓库的安全性和可控性问题。Harbor的权限管理、漏洞扫描等企业级功能,进一步提升了容器化开发的安全性。未来,随着容器技术的普及,Harbor有望集成更多AI运维工具,实现自动化镜像管理和安全策略动态调整。

建议

  • 定期备份Harbor数据库和镜像数据。
  • 关注Harbor官方更新,及时修复安全漏洞。
  • 结合CI/CD流水线,实现镜像自动构建与推送。

通过本文的指导,读者可轻松完成Harbor的部署与基础配置,为容器化开发提供可靠的镜像管理支持。