在企业级容器化部署中,镜像管理是DevOps流程的关键环节。Harbor作为CNCF毕业项目,提供了企业级的Registry解决方案。本文将详细介绍如何从零开始搭建个人专属的Harbor私有仓库,涵盖安装配置、权限管理到日常运维的全套实践方案。
提示:生产环境建议使用https协议,本文示例为演示方便使用http,实际部署时请配置有效SSL证书
基础环境要求:
bash复制# 验证Docker环境
docker --version
docker-compose --version
存储规划建议:
官方提供两种安装方式:
bash复制wget https://github.com/goharbor/harbor/releases/download/v2.6.0/harbor-offline-installer-v2.6.0.tgz
tar xvf harbor-offline-installer-v2.6.0.tgz
cd harbor
核心配置文件harbor.yml需要调整以下参数:
yaml复制hostname: registry.yourdomain.com # 修改为实际域名或IP
http:
port: 80
harbor_admin_password: Harbor12345 # 建议修改复杂密码
database:
password: root123 # 数据库密码
data_volume: /data/harbor # 数据存储路径
注意:生产环境必须配置https,证书需包含hostname指定的域名
bash复制./install.sh
安装过程会:
验证服务状态:
bash复制docker-compose ps
正常应显示10个服务均为"Up"状态
Harbor提供三级权限体系:
创建项目示例:
配置远程仓库同步:
yaml复制# 示例复制策略
filters:
- repository: library/nginx
tag: "1.21.*"
labels: ["production"]
启用Trivy扫描器:
yaml复制trivy:
ignore_unfixed: true
skip_update: false
bash复制./install.sh --with-trivy
扫描策略配置:
完整备份方案:
bash复制# 数据备份
tar czvf harbor-backup-$(date +%Y%m%d).tar.gz /data/harbor
# 数据库备份
docker exec -it harbor-db pg_dump -U postgres registry > registry.sql
# 配置备份
cp -r /opt/harbor /backup/harbor-conf
恢复流程:
常见优化参数:
yaml复制# harbor.yml调优项
log:
level: info
rotate_count: 50
rotate_size: 200MB
jobservice:
max_job_workers: 10
registry:
cache:
layer: filesystem
blobdescriptor: redis
Prometheus监控指标:
Grafana看板示例:
常见错误及解决方案:
| 错误现象 | 可能原因 | 解决方法 |
|---|---|---|
| 413 Request Entity Too Large | Nginx默认限制上传大小 | 调整nginx.conf client_max_body_size |
| 502 Bad Gateway | 服务未正常启动 | 检查docker-compose ps状态 |
| 未授权访问 | 未登录或权限不足 | 检查项目访问级别和用户权限 |
清理策略:
bash复制harbor retention --project dev-team --keep-tags 5
bash复制docker exec harbor-registry registry garbage-collect /etc/registry/config.yml
生产环境推荐架构:
部署步骤:
Jenkins流水线示例:
groovy复制pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'docker build -t ${REGISTRY}/dev-team/app:${BUILD_NUMBER} .'
}
}
stage('Push') {
steps {
withCredentials([usernamePassword(
credentialsId: 'harbor-creds',
usernameVariable: 'USER',
passwordVariable: 'PASS'
)]) {
sh '''
docker login -u $USER -p $PASS ${REGISTRY}
docker push ${REGISTRY}/dev-team/app:${BUILD_NUMBER}
'''
}
}
}
}
}
Webhook配置示例:
yaml复制# harbor.yml配置
notifications:
webhooks:
- name: slack-alert
url: https://hooks.slack.com/services/...
events:
- push
- delete
attach_payload: true
稳妥升级步骤:
升级回滚方案:
我在实际运维中发现,定期执行registry garbage-collect能有效回收存储空间,建议每月至少执行一次。对于频繁更新的开发环境,可以设置标签保留策略自动清理旧镜像。