# 私有镜像仓库 ## 场景 内网拉不到 Docker Hub,或者要把自己构建的镜像集中管理。 ## 前置条件 - 一台有磁盘的服务器 - 域名或 IP(用 HTTPS 需要证书) - 规划好存储目录和清理策略 ## 配置 ```bash # 起 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 ``` ## 验证 ```bash curl http://registry.corp.local:5000/v2/_catalog curl http://registry.corp.local:5000/v2/nginx/tags/list du -sh /data/registry ``` ## 回滚 ```bash docker rm -f registry ``` 镜像数据还在 `/data/registry`,删了容器不影响。 ## 坑 - **没开 `REGISTRY_STORAGE_DELETE_ENABLED`**,删镜像只删标签,空间不回收。 - 只删标签不清垃圾,磁盘会一直涨,要跑 `registry garbage-collect`。 - HTTP 仓库必须加到 `insecure-registries`,否则 push 报 `server gave HTTP response to HTTPS client`。 - 没配认证,内网任何人都能推镜像。 - 存储放系统盘,几个镜像就把根分区写满。 - 证书过期后所有节点拉镜像失败,记得续期。