Docker搭建Harbor私有镜像仓库:命令行模式全攻略

Docker搭建Harbor私有镜像仓库(命令行模式)全攻略

在容器化技术日益普及的今天,私有镜像仓库成为企业保障镜像安全、提升部署效率的核心基础设施。Harbor作为CNCF(云原生计算基金会)毕业的开源项目,凭借其完善的权限管理、镜像扫描和复制功能,成为Docker私有仓库的首选方案。本文将通过命令行模式,从零开始演示如何使用Docker部署Harbor,并覆盖镜像推送、拉取及运维全流程。

一、环境准备与前置条件

1.1 硬件与软件要求

  • 服务器配置:建议4核CPU、8GB内存、50GB磁盘空间(根据镜像存储量调整)。
  • 操作系统:CentOS 7/8、Ubuntu 20.04+或RHEL 8+(需支持Docker)。
  • 网络要求:开放80(HTTP)、443(HTTPS)、22(SSH管理)端口,若使用自签名证书需客户端信任。

1.2 安装Docker与Docker Compose

Harbor依赖Docker和Docker Compose运行,需提前安装:

  1. # 安装Docker(以CentOS为例)
  2. sudo yum install -y yum-utils
  3. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  4. sudo yum install docker-ce docker-ce-cli containerd.io
  5. sudo systemctl enable --now docker
  6. # 安装Docker Compose
  7. 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
  8. sudo chmod +x /usr/local/bin/docker-compose

二、Harbor安装与配置

2.1 下载Harbor安装包

从GitHub Release页面获取最新版本(以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

2.2 配置Harbor

修改harbor.yml.tmpl文件(或复制为harbor.yml):

  1. hostname: registry.example.com # 替换为实际域名或IP
  2. http:
  3. port: 80
  4. https:
  5. certificate: /path/to/cert.pem # HTTPS证书路径(可选)
  6. private_key: /path/to/key.pem
  7. harbor_admin_password: Harbor12345 # 初始管理员密码
  8. database:
  9. password: root123 # 数据库密码

关键配置说明

  • hostname:必须与访问域名一致,否则会导致Cookie失效。
  • https:生产环境建议启用HTTPS,自签名证书需客户端配置--insecure-registry
  • storage_driver:默认使用filesystem,可配置为s3swift等对象存储。

2.3 执行安装命令

  1. ./prepare # 根据配置生成Docker Compose文件
  2. ./install.sh # 启动Harbor

安装完成后,访问http://<hostname>,使用默认账号admin和配置的密码登录。

三、镜像仓库操作指南

3.1 登录Harbor仓库

  1. docker login registry.example.com
  2. # 输入用户名(admin)和密码

3.2 推送镜像到Harbor

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

    注意事项

  • 确保镜像标签中的仓库地址与Harbor的hostname一致。
  • 若使用自签名证书,需在/etc/docker/daemon.json中添加:
    1. {
    2. "insecure-registries": ["registry.example.com"]
    3. }

    然后重启Docker服务:sudo systemctl restart docker

3.3 从Harbor拉取镜像

  1. docker pull registry.example.com/library/nginx:v1

四、Harbor高级功能配置

4.1 创建项目与用户

  1. Web界面操作

    • 登录Harbor后,在“项目”页面创建新项目(如dev-team)。
    • 在“用户管理”中添加用户,并分配项目角色(开发者、访客等)。
  2. 命令行配置(通过Harbor API):
    ```bash

    获取API令牌(需管理员权限)

    TOKEN=$(curl -u “admin:Harbor12345” -X POST “http://registry.example.com/api/v2.0/users/current/sessions“ -H “accept: application/json” | jq -r ‘.token’)

创建项目

curl -X POST “http://registry.example.com/api/v2.0/projects“ -H “accept: application/json” -H “Authorization: Bearer $TOKEN” -H “Content-Type: application/json” -d ‘{“project_name”: “dev-team”, “public”: false}’

  1. ### 4.2 镜像复制策略
  2. 配置跨数据中心镜像同步:
  3. 1. Harbor Web界面进入“系统管理”→“复制管理”。
  4. 2. 添加目标仓库(如另一个Harbor实例或AWS ECR)。
  5. 3. 创建复制规则,指定源项目、目标项目和触发方式(手动/定时)。
  6. ## 五、运维与故障排查
  7. ### 5.1 日志查看
  8. ```bash
  9. # 查看Harbor核心服务日志
  10. docker-compose -f /path/to/harbor/docker-compose.yml logs -f
  11. # 查看Nginx访问日志
  12. docker exec -it harbor-nginx tail -f /var/log/nginx/access.log

5.2 常见问题解决

  1. 502 Bad Gateway

    • 检查harbor-core服务是否正常运行:docker ps | grep harbor-core
    • 查看数据库连接:docker exec -it harbor-db psql -U postgres -d registry
  2. 镜像推送失败

    • 确认客户端时间与服务器同步(NTP服务)。
    • 检查磁盘空间:df -h /data(Harbor默认存储路径)。

5.3 升级Harbor

  1. 备份数据库和配置文件:
    1. docker exec -it harbor-db pg_dump -U postgres -d registry > backup.sql
    2. cp -r /path/to/harbor/common/config /backup/
  2. 下载新版本安装包,修改harbor.yml后执行:
    1. ./prepare
    2. docker-compose down
    3. docker-compose up -d

六、总结与最佳实践

6.1 安全建议

  • 启用HTTPS并定期更新证书。
  • 使用强密码策略,定期轮换管理员密码。
  • 限制项目公开访问权限,遵循最小权限原则。

6.2 性能优化

  • 对大镜像启用分块上传(需Harbor企业版)。
  • 配置存储驱动为对象存储(如S3)以支持横向扩展。

6.3 备份策略

  • 每日备份数据库和配置文件。
  • 定期测试备份恢复流程。

通过本文的命令行模式部署方案,开发者可快速构建高可用的Harbor私有仓库,满足企业级容器镜像管理需求。结合CI/CD流水线(如Jenkins、GitLab CI),可进一步实现镜像自动构建、扫描和部署的全流程自动化。