简介:本文详细阐述本地镜像仓库的搭建方法及Harbor的部署实践,涵盖环境准备、核心配置、安全加固及日常运维,助力开发者构建企业级容器镜像管理平台。
在容器化部署日益普及的今天,企业面临两大核心痛点:镜像下载效率低与安全管控缺失。公网Docker Hub的访问速度受限于网络带宽,大型镜像下载可能耗时数小时;而未经管理的镜像仓库易导致镜像版本混乱、敏感信息泄露等问题。
Harbor作为CNCF孵化的开源项目,专为企业级场景设计,提供以下核心价值:
# 安装Dockercurl -fsSL https://get.docker.com | shsystemctl enable docker# 启动基础Registrydocker run -d -p 5000:5000 --restart=always --name registry \-v /data/registry:/var/lib/registry \registry:2.7.1
修改/etc/docker/daemon.json:
{"insecure-registries": ["your-server-ip:5000"]}
重启服务:
systemctl restart docker
docker tag nginx:latest your-server-ip:5000/nginx:v1docker push your-server-ip:5000/nginx:v1
| 组件 | 最小配置 | 推荐配置 |
|---|---|---|
| 数据库 | 1核2G | 2核4G |
| Redis | 512MB内存 | 1GB内存 |
| Harbor核心 | 2核4G | 4核8G+ |
| 存储 | 100GB | 500GB+(SSD优先) |
wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-offline-installer-v2.9.0.tgztar xvf harbor-offline-installer-v2.9.0.tgzcd harbor
编辑harbor.yml关键参数:
hostname: harbor.example.com # 必须为域名或可解析IPhttp:port: 80https:certificate: /path/to/cert.pemprivate_key: /path/to/key.pemdatabase:password: root123 # 数据库密码storage_service:fs:rootpath: /data/harbor
# 安装前准备yum install -y docker-compose# 执行安装(自动拉取依赖镜像)./install.sh
修改harbor.yml:
auth_mode: ldapldap:url: ldap://ldap.example.comsearch_base: ou=users,dc=example,dc=comuid: uidfilter: (objectClass=person)scope: 2timeout: 5
通过Web界面创建复制规则:
System Management > Replications集成Clair扫描引擎,支持:
通过Notary实现:
# 生成签名密钥notary init --url https://harbor.example.com your-project/nginxnotary add --push your-project/nginx v1 nginx:latest
配置示例:
storage_service:cache:layer:swift:authurl: https://swift.example.com/v3user: adminkey: passwordcontainer: harbor-cache
修改docker-compose.yml中的MySQL配置:
environment:MYSQL_ROOT_PASSWORD: root123MYSQL_DATABASE: registryMYSQL_INNODB_BUFFER_POOL_SIZE: 1G # 内存的50-70%MYSQL_MAX_CONNECTIONS: 500
# 每日全量备份mysqldump -uroot -proot123 registry > /backup/registry_$(date +%Y%m%d).sql# 增量备份(需开启binlog)
# 同步到对象存储aws s3 sync /data/harbor s3://harbor-backup/
添加抓取任务:
- job_name: 'harbor'static_configs:- targets: ['harbor.example.com:9090']
| 指标名称 | 阈值建议 | 告警级别 |
|---|---|---|
| harbor_project_count | >500 | WARNING |
| registry_storage_used | >80% | CRITICAL |
| jobservice_queue_depth | >100 | WARNING |
-- 在MySQL中执行SELECT * FROM information_schema.processlistWHERE TIME > 60 ORDER BY TIME DESC;
# 检查Registry API响应时间curl -o /dev/null -s -w "%{time_total}\n" \http://harbor.example.com/api/v2.0/projects
# 生成自签名证书(生产环境建议使用CA证书)openssl req -x509 -nodes -days 365 -newkey rsa:2048 \-keyout /etc/harbor/harbor.key -out /etc/harbor/harbor.crt
修改harbor.yml:
audit_log:enabled: truepath: /var/log/harbor/audit.logrotate_count: 30rotate_size: 100M
在从节点harbor.yml中配置:
replication:enabled: trueurl: https://master-harbor.example.comproject_id: 1sync_interval: 3600
Nginx配置示例:
upstream harbor {server harbor1.example.com:443;server harbor2.example.com:443;server harbor3.example.com:443;}server {listen 443 ssl;ssl_certificate /etc/nginx/certs/harbor.crt;ssl_certificate_key /etc/nginx/certs/harbor.key;location / {proxy_pass https://harbor;proxy_set_header Host $host;}}
通过Web界面配置:
本地镜像仓库与Harbor的部署不仅是技术实现,更是企业容器化战略的关键基础设施。通过本文的实践指南,开发者可以:
未来发展方向:
建议开发者定期关注Harbor官方发布的安全补丁,并每季度进行一次容量规划评估。对于超大规模部署(1000+节点),建议采用分区域部署+全局复制的架构方案。