0aa8fe6
这次没有正文改动。
这是 container/私有镜像仓库.md 的改动记录。后台每次保存都会留一份快照,
这里显示的是快照之间的差异,不会混入其他文章的改动。
还没有后台修改记录。
下面是 Git 里的提交,可能包含其他文章的改动(因为一次提交会带上工作区所有变化)。
0aa8fe6
这次没有正文改动。
69302a9
@@ -0,0 +1,65 @@ +--- +tags: [Docker, 镜像仓库, registry] +order: 40 +--- + +# 私有镜像仓库 + +## 场景 + +内网拉不到 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`。 +- 没配认证,内网任何人都能推镜像。 +- 存储放系统盘,几个镜像就把根分区写满。 +- 证书过期后所有节点拉镜像失败,记得续期。