Oamc

私有镜像仓库

本页目录

场景

内网拉不到 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。
  • 没配认证,内网任何人都能推镜像。
  • 存储放系统盘,几个镜像就把根分区写满。
  • 证书过期后所有节点拉镜像失败,记得续期。