简介:本文详细介绍如何搭建Docker Harbor私有镜像仓库,并演示如何通过Harbor实现镜像的推送与拉取,助力企业构建安全高效的容器镜像管理体系。
在容器化部署场景中,私有镜像仓库是保障软件交付安全的核心组件。Harbor作为VMware开源的企业级Registry解决方案,相较于原生Docker Registry具有三大优势:
典型应用场景包括:
组件 | 最低配置 | 推荐配置 |
---|---|---|
服务器 | 2核4G | 4核8G+ |
磁盘空间 | 40GB | 200GB+(SSD优先) |
网络带宽 | 10Mbps | 100Mbps+ |
# 检查Docker版本
docker --version
# 验证Docker Compose
docker-compose --version
# 系统资源检查
free -h
df -h
从GitHub Release页面下载对应版本的离线包:
wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-offline-installer-v2.9.0.tgz
tar xvf harbor-offline-installer-v2.9.0.tgz
cd harbor
编辑harbor.yml
核心配置:
hostname: registry.example.com # 必须为FQDN或IP
http:
port: 80
https:
certificate: /data/cert/server.crt
private_key: /data/cert/server.key
harbor_admin_password: Harbor12345 # 初始管理员密码
database:
password: root123
max_open_conns: 1000
max_idle_conns: 50
storage_driver:
name: filesystem
filesystem:
rootdirectory: /var/lib/registry
# 生成自签名证书(生产环境应使用CA证书)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /data/cert/server.key -out /data/cert/server.crt \
-subj "/CN=registry.example.com"
# 执行安装
./install.sh --with-clair --with-notary
docker-compose ps
# 正常状态应显示所有容器为"Up"
# 验证Web访问
curl -I https://registry.example.com
# 应返回200状态码
# 创建或编辑daemon.json
cat > /etc/docker/daemon.json <<EOF
{
"insecure-registries": ["registry.example.com"],
"registry-mirrors": []
}
EOF
# 重启Docker服务
systemctl restart docker
docker login registry.example.com
# 输入用户名:admin
# 输入密码:Harbor12345
# 基本语法
docker pull registry.example.com/<project>/<image>:<tag>
# 实际示例
docker pull registry.example.com/library/nginx:1.25.3
# 示例:多阶段构建中使用Harbor镜像
FROM registry.example.com/library/golang:1.21 as builder
WORKDIR /app
COPY . .
RUN go build -o main .
FROM registry.example.com/library/alpine:3.18
COPY --from=builder /app/main /main
CMD ["/main"]
错误现象 | 解决方案 |
---|---|
x509: certificate signed by unknown authority |
在客户端添加CA证书或使用--insecure-registry |
401 Unauthorized |
检查登录凭证是否正确,确认项目权限 |
500 Internal Server Error |
检查Harbor日志:docker-compose logs |
镜像拉取超时 | 调整客户端--max-concurrent-uploads 参数 |
在Harbor Web控制台:
System Management
> Replication
# 手动触发扫描
curl -u admin:Harbor12345 \
-X POST "https://registry.example.com/api/v2.0/projects/library/repositories/nginx/artifacts/1.25.3/scan"
# 查看扫描报告
curl -u admin:Harbor12345 \
"https://registry.example.com/api/v2.0/projects/library/repositories/nginx/artifacts/1.25.3/vulnerabilities"
存储优化:
cache
参数数据库调优:
-- PostgreSQL配置示例
ALTER SYSTEM SET max_connections = 500;
ALTER SYSTEM SET shared_buffers = 2GB;
网络优化:
keepalive
参数网络隔离:
认证集成:
# 在harbor.yml中配置LDAP
auth_mode: ldap
ldap:
url: ldap://ldap.example.com
search_dn: uid=searchuser,ou=people,dc=example,dc=com
search_password: password
base_dn: ou=people,dc=example,dc=com
uid: uid
filter: (objectClass=person)
scope: 2
安装Notary客户端:
wget https://github.com/theupdateframework/notary/releases/download/v0.7.0/notary-Linux-amd64
chmod +x notary-Linux-amd64
sudo mv notary-Linux-amd64 /usr/local/bin/notary
镜像签名流程:
# 初始化信任存储
notary init registry.example.com/library/nginx
# 添加签名密钥
notary key add registry.example.com/library/nginx root --role=root
# 推送签名
notary publish registry.example.com/library/nginx
# 查询特定用户的操作记录
docker-compose exec harbor-db \
psql -U postgres -d registry -c \
"SELECT * FROM audit_log WHERE username='devuser' ORDER BY op_time DESC LIMIT 10;"
# 查看详细错误
docker-compose logs -f --tail=100
# 常见问题:
# - 端口冲突:修改harbor.yml中的http.port
# - 数据库锁死:删除/var/lib/registry/postgresql/data/postmaster.pid
# - 磁盘空间不足:df -h检查/var/lib/registry分区
# 监控Harbor各组件资源使用
docker stats $(docker-compose ps -q)
# 数据库慢查询分析
docker-compose exec harbor-db \
pg_stat_statements --top -l 10
备份数据:
docker-compose exec harbor-db \
pg_dump -U postgres registry > backup.sql
升级步骤:
./prepare
脚本docker-compose up -d
镜像管理策略:
docker system prune
)高可用架构:
CI/CD集成:
# Jenkins Pipeline示例
pipeline {
agent any
stages {
stage('Build') {
steps {
docker build -t registry.example.com/project/app:$BUILD_NUMBER .
}
}
stage('Push') {
steps {
withCredentials([usernamePassword(credentialsId: 'harbor-cred',
usernameVariable: 'USER', passwordVariable: 'PASS')]) {
sh "docker login registry.example.com -u $USER -p $PASS"
sh "docker push registry.example.com/project/app:$BUILD_NUMBER"
}
}
}
}
}
通过系统化的部署与运维管理,Harbor镜像仓库可为企业提供安全、高效的容器镜像管理解决方案。建议每季度进行安全审计,每年进行架构升级,以保持系统的先进性和安全性。