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。搭配 DockerKubernetes 可以构建完整的容器化交付平台。选购搬瓦工 VPS 请参考 全部方案,使用优惠码 NODESEEK2026 享受 6.77% 折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。