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运行,需提前安装:
# 安装Docker(以CentOS为例)sudo yum install -y yum-utilssudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.reposudo yum install docker-ce docker-ce-cli containerd.iosudo systemctl enable --now docker# 安装Docker Composesudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose
二、Harbor安装与配置
2.1 下载Harbor安装包
从GitHub Release页面获取最新版本(以v2.9.0为例):
wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-offline-installer-v2.9.0.tgztar -xzf harbor-offline-installer-v2.9.0.tgzcd harbor
2.2 配置Harbor
修改harbor.yml.tmpl文件(或复制为harbor.yml):
hostname: registry.example.com # 替换为实际域名或IPhttp:port: 80https:certificate: /path/to/cert.pem # HTTPS证书路径(可选)private_key: /path/to/key.pemharbor_admin_password: Harbor12345 # 初始管理员密码database:password: root123 # 数据库密码
关键配置说明:
- hostname:必须与访问域名一致,否则会导致Cookie失效。
- https:生产环境建议启用HTTPS,自签名证书需客户端配置
--insecure-registry。 - storage_driver:默认使用
filesystem,可配置为s3、swift等对象存储。
2.3 执行安装命令
./prepare # 根据配置生成Docker Compose文件./install.sh # 启动Harbor
安装完成后,访问http://<hostname>,使用默认账号admin和配置的密码登录。
三、镜像仓库操作指南
3.1 登录Harbor仓库
docker login registry.example.com# 输入用户名(admin)和密码
3.2 推送镜像到Harbor
- 标记镜像:
docker tag nginx:latest registry.example.com/library/nginx:v1
- 推送镜像:
docker push registry.example.com/library/nginx:v1
注意事项:
- 确保镜像标签中的仓库地址与Harbor的
hostname一致。 - 若使用自签名证书,需在
/etc/docker/daemon.json中添加:{"insecure-registries": ["registry.example.com"]}
然后重启Docker服务:
sudo systemctl restart docker。
3.3 从Harbor拉取镜像
docker pull registry.example.com/library/nginx:v1
四、Harbor高级功能配置
4.1 创建项目与用户
-
Web界面操作:
- 登录Harbor后,在“项目”页面创建新项目(如
dev-team)。 - 在“用户管理”中添加用户,并分配项目角色(开发者、访客等)。
- 登录Harbor后,在“项目”页面创建新项目(如
-
命令行配置(通过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}’
### 4.2 镜像复制策略配置跨数据中心镜像同步:1. 在Harbor Web界面进入“系统管理”→“复制管理”。2. 添加目标仓库(如另一个Harbor实例或AWS ECR)。3. 创建复制规则,指定源项目、目标项目和触发方式(手动/定时)。## 五、运维与故障排查### 5.1 日志查看```bash# 查看Harbor核心服务日志docker-compose -f /path/to/harbor/docker-compose.yml logs -f# 查看Nginx访问日志docker exec -it harbor-nginx tail -f /var/log/nginx/access.log
5.2 常见问题解决
-
502 Bad Gateway:
- 检查
harbor-core服务是否正常运行:docker ps | grep harbor-core。 - 查看数据库连接:
docker exec -it harbor-db psql -U postgres -d registry。
- 检查
-
镜像推送失败:
- 确认客户端时间与服务器同步(NTP服务)。
- 检查磁盘空间:
df -h /data(Harbor默认存储路径)。
5.3 升级Harbor
- 备份数据库和配置文件:
docker exec -it harbor-db pg_dump -U postgres -d registry > backup.sqlcp -r /path/to/harbor/common/config /backup/
- 下载新版本安装包,修改
harbor.yml后执行:./preparedocker-compose downdocker-compose up -d
六、总结与最佳实践
6.1 安全建议
- 启用HTTPS并定期更新证书。
- 使用强密码策略,定期轮换管理员密码。
- 限制项目公开访问权限,遵循最小权限原则。
6.2 性能优化
- 对大镜像启用分块上传(需Harbor企业版)。
- 配置存储驱动为对象存储(如S3)以支持横向扩展。
6.3 备份策略
- 每日备份数据库和配置文件。
- 定期测试备份恢复流程。
通过本文的命令行模式部署方案,开发者可快速构建高可用的Harbor私有仓库,满足企业级容器镜像管理需求。结合CI/CD流水线(如Jenkins、GitLab CI),可进一步实现镜像自动构建、扫描和部署的全流程自动化。