私有镜像仓库
场景
内网拉不到 Docker Hub,或者要把自己构建的镜像集中管理。
前置条件
- 一台有磁盘的服务器
- 域名或 IP(用 HTTPS 需要证书)
- 规划好存储目录和清理策略
配置
# 起 registry
mkdir -p /data/registry
docker run -d --name registry \
-p 5000:5000 \
-v /data/registry:/var/lib/registry \
-e REGISTRY_STORAGE_DELETE_ENABLED=true \
--restart always \
registry:2
# 客户端信任(内网 HTTP)
cat >/etc/docker/daemon.json <<'EOF'
{ "insecure-registries": ["registry.corp.local:5000"] }
EOF
systemctl restart docker
# 推送
docker tag nginx:1.25 registry.corp.local:5000/nginx:1.25
docker push registry.corp.local:5000/nginx:1.25
docker pull registry.corp.local:5000/nginx:1.25
验证
curl http://registry.corp.local:5000/v2/_catalog
curl http://registry.corp.local:5000/v2/nginx/tags/list
du -sh /data/registry
回滚
docker rm -f registry
镜像数据还在 /data/registry,删了容器不影响。
坑
- 没开
REGISTRY_STORAGE_DELETE_ENABLED,删镜像只删标签,空间不回收。 - 只删标签不清垃圾,磁盘会一直涨,要跑
registry garbage-collect。 - HTTP 仓库必须加到
insecure-registries,否则 push 报server gave HTTP response to HTTPS client。 - 没配认证,内网任何人都能推镜像。
- 存储放系统盘,几个镜像就把根分区写满。
- 证书过期后所有节点拉镜像失败,记得续期。