私有镜像仓库是什么
官方 registry 镜像是 Docker 发布的最小化仓库实现(对应开源项目 distribution),只提供 push/pull 与目录查询等基础能力。把它跑在内网,可以做到镜像不出内网、拉取更快、发布可追溯。它默认不带认证与加密,属于可用的内网基础设施,而不是开箱即用的生产级产品;要对外提供就需要自己做反向代理、TLS 与鉴权。
基本信息
| 启动方式 | docker run -d -p 5000:5000 -v 卷名:/var/lib/registry registry:2 |
|---|---|
| 默认服务端口 | 容器内 5000/tcp |
| 数据目录 | 容器内 /var/lib/registry |
| 健康检查接口 | GET http://主机:5000/v2/ (返回 200 表示就绪) |
| 目录接口 | GET /v2/_catalog、GET /v2/<名称>/tags/list |
| 适用平台 | 任何支持 Docker 的 Linux 主机(Windows 容器场景另配) |
典型使用场景
- 内网自建仓库承载业务镜像,交付环节不再依赖公网拉取
- 给受限网络环境做镜像中转:外网机器 pull 后 save,内网 load 再 push
- 给团队提供统一的镜像命名空间与标签规范
- 做 Docker Hub 的本地缓存,减少重复外网拉取
- 在实验室快速验证镜像构建产物是否可被 K8s 拉取
启动与推送示例
启动与推送示例
# 启动仓库并把数据挂到具名卷,容器重建不丢镜像
docker run -d -p 5000:5000 --name registry \
-v registry-data:/var/lib/registry registry:2
# 打标签时仓库地址必须写进镜像名,否则推送会指向 Docker Hub
docker tag app/web:1.0 10.0.0.10:5000/app/web:1.0
docker push 10.0.0.10:5000/app/web:1.0
# 验证仓库已接收镜像
curl -s http://10.0.0.10:5000/v2/_catalog接口与返回怎么读
| 请求 | 正常返回 | 异常与含义 |
|---|---|---|
| GET /v2/ | 200 空 JSON | 401 说明启用了鉴权;404 路径被反代改坏 |
| GET /v2/_catalog | {"repositories":[...]} | 列表为空说明还没有 push 成功 |
| GET /v2/名称/tags/list | {"tags":[...]} | 404 表示该镜像名从未推入 |
| docker push | 逐层上传并输出 digest | denied 多为鉴权或命名空间权限问题 |
| docker pull | 按层下载 | no such host 说明仓库地址写错 |
存储规划:数据默认写在容器内 /var/lib/registry,容器一删镜像全没,务必挂卷;仓库要跨主机访问,建议用反向代理加 TLS 证书,而不是长期依赖 insecure-registries。
registry:2 默认不允许删除已有镜像 tag,需要显式打开删除能力并在删除后执行垃圾回收,否则磁盘只涨不降。