Docker 私有镜像仓库搭建
在企业和团队开发中,使用私有镜像仓库可以安全地存储和分发 Docker 镜像,避免将内部代码和配置暴露到公共仓库。本文将介绍两种在搬瓦工 VPS 上搭建私有镜像仓库的方案:轻量级的 Docker Registry 和功能完备的 Harbor。
一、方案一:Docker Registry
Docker 官方提供的轻量级镜像仓库,适合个人和小团队使用。
1.1 快速启动
docker run -d \
--name registry \
--restart=always \
-p 5000:5000 \
-v registry_data:/var/lib/registry \
registry:2
1.2 配置认证
# 创建密码文件
mkdir -p /opt/registry/auth
apt install apache2-utils -y
htpasswd -Bbn admin your_password > /opt/registry/auth/htpasswd
docker run -d \
--name registry \
--restart=always \
-p 5000:5000 \
-v registry_data:/var/lib/registry \
-v /opt/registry/auth:/auth \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry:2
1.3 配置 TLS
docker run -d \
--name registry \
--restart=always \
-p 443:443 \
-v registry_data:/var/lib/registry \
-v /opt/registry/auth:/auth \
-v /opt/registry/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.pem \
-e REGISTRY_HTTP_TLS_KEY=/certs/privkey.pem \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry:2
1.4 使用私有仓库
# 登录
docker login registry.yourdomain.com
# 标记镜像
docker tag myapp:latest registry.yourdomain.com/myapp:latest
# 推送镜像
docker push registry.yourdomain.com/myapp:latest
# 拉取镜像
docker pull registry.yourdomain.com/myapp:latest
1.5 配置非 HTTPS 仓库(不推荐)
如果未配置 TLS,需要在 Docker 客户端添加信任:
cat > /etc/docker/daemon.json <<EOF
{
"insecure-registries": ["YOUR_IP:5000"]
}
EOF
systemctl restart docker
二、方案二:Harbor(推荐)
Harbor 是 VMware 开源的企业级镜像仓库,提供 Web 界面、漏洞扫描、访问控制等功能。
2.1 下载 Harbor
wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-online-installer-v2.10.0.tgz
tar xzf harbor-online-installer-v2.10.0.tgz
cd harbor
2.2 配置 Harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
关键配置项:
hostname: registry.yourdomain.com
https:
port: 443
certificate: /opt/certs/fullchain.pem
private_key: /opt/certs/privkey.pem
harbor_admin_password: Harbor12345
database:
password: root123
data_volume: /data/harbor
2.3 安装 Harbor
./install.sh --with-trivy
--with-trivy 参数会安装漏洞扫描功能。
2.4 访问 Harbor
访问 https://registry.yourdomain.com,使用 admin 账号登录。
三、Harbor 功能使用
3.1 创建项目
在 Harbor 中,镜像按"项目"组织。登录后创建新项目:
- 项目名称:如
myteam。 - 访问级别:公开或私有。
- 存储配额:限制该项目的镜像存储总量。
3.2 推送镜像
docker login registry.yourdomain.com
docker tag myapp:latest registry.yourdomain.com/myteam/myapp:latest
docker push registry.yourdomain.com/myteam/myapp:latest
3.3 漏洞扫描
Harbor 集成 Trivy 扫描引擎,可以自动或手动扫描镜像中的安全漏洞。在项目设置中可以配置自动扫描策略,阻止有高危漏洞的镜像被拉取。
3.4 镜像复制
Harbor 支持在多个仓库间复制镜像,适合多地部署或灾备场景。在 Replications 中配置源仓库和目标仓库。
四、在 Kubernetes 中使用私有仓库
# 创建 Image Pull Secret
kubectl create secret docker-registry regcred \
--docker-server=registry.yourdomain.com \
--docker-username=admin \
--docker-password=your_password \
--docker-email=you@example.com
在 Pod 中引用:
spec:
imagePullSecrets:
- name: regcred
containers:
- name: myapp
image: registry.yourdomain.com/myteam/myapp:latest
五、镜像管理
# 查看仓库中的镜像(Docker Registry API)
curl -u admin:password https://registry.yourdomain.com/v2/_catalog
# 查看镜像标签
curl -u admin:password https://registry.yourdomain.com/v2/myteam/myapp/tags/list
六、垃圾回收
删除镜像标签后,实际的存储空间不会立即释放,需要执行垃圾回收:
Docker Registry
docker exec -it registry /bin/registry garbage-collect /etc/docker/registry/config.yml
Harbor
在 Administration → Garbage Collection 中手动或定时执行垃圾回收。
七、常见问题
push 报 unauthorized 错误
docker logout registry.yourdomain.com
docker login registry.yourdomain.com
镜像拉取超时
检查网络连接和 DNS 解析,确保客户端可以访问仓库服务器的端口。
Harbor 磁盘空间不足
配置镜像保留策略自动清理旧版本标签,并定期执行垃圾回收:
docker system df
df -h /data/harbor
总结
搭建私有镜像仓库是容器化部署的重要基础设施。个人用户可以使用轻量的 Docker Registry,团队和企业推荐使用功能完善的 Harbor。搭配 Docker 和 Kubernetes 可以构建完整的容器化交付平台。选购搬瓦工 VPS 请参考 全部方案,使用优惠码 NODESEEK2026 享受 6.77% 折扣。