一、Docker Registry(镜像仓库)
镜像仓库(Docker Registry)负责存储、管理和分发镜像,并且提供了登录认证能力,建立了仓库的索引。
镜像仓库管理多个 Repository,Repository 通过命名来区分。每个 Repository 包含一个或多个镜像,镜像通过镜像名称和标签(Tag)来区分。
核心层级关系:
- 镜像仓库(Registry):最上层是「镜像仓库(Registry)」:比如 hub.docker.com,一个 Registry 可以包含多个「仓库(Repository)」,同时自带认证能力(登录 / 登出)和索引功能(检索镜像)。
- 仓库(Repository):每个「Repository」是同一镜像的所有版本集合:比如 nginx 仓库包含 nginx:1.20.1、nginx:1.19.1 等不同版本;ubuntu 仓库包含 ubuntu:18.04、ubuntu:20.04 等。
- 镜像:每个版本对应「镜像名称 + 标签(Tag)」:比如 nginx:latest 是具体的镜像标识。
镜像的组成: 一个容器镜像由两部分构成:
- 元数据:由 Dockerfile 生成的描述文件,记录镜像的层数、每层内容、校验值等信息。
- 存储数据:存在 blob 文件里,是真正占用磁盘空间的部分,包含镜像的实际内容。
二、镜像仓库分类
2.1 是否对外开放
- 公有仓库:像阿里云、Docker Hub 等部署在公有网络上,无需登录即可下载镜像,供大众访问使用。
- 私有仓库:不对外开放,通常位于私有网络,仅公司内部人员可使用,保障数据安全性。
2.2 供应商和面向群体
- sponsor(赞助)registry:第三方提供的 registry,供客户和 Docker 社区版用户使用。
- mirror(镜像)registry:第三方提供的 registry,仅对注册客户开放(如阿里云镜像仓库,需注册后使用)。
- vendor(供应商)registry:由发布 Docker 镜像的供应商提供的 registry(如 Google、RedHat 提供的镜像仓库服务)。
- private registry:由无防火墙和额外安全层的私有实体提供的 registry,仅供内部使用,适用于企业内部封闭环境。
三、镜像仓库工作机制
3.1 镜像仓库使用流程
- 通过
docker login登录仓库。 - 通过
docker pull拉取所需镜像。 - 通过 Dockerfile 或
commit等方式制作完镜像后,通过docker push上传到仓库。
3.2 实际研发中镜像仓库如何使用
Docker Registry 中的镜像通常由开发人员制作,而后推送至'公共'或'私有'Registry 上保存,供其他人员使用(如部署到生产环境)。具体流程涉及以下环境:
- 开发环境:开发人员编写代码、制作镜像的环境。
- 测试环境:需求开发完成后,将镜像拉取到该环境进行测试(pull to test)。
- 预发布环境:版本测试完成后,发布到与生产环境类似的该环境,提前模拟生产发布。
- 生产环境:将通过测试的镜像拉取到该环境,正式面向客户提供服务(pull to deploy)。
3.3 镜像仓库的拉取机制
启动容器时,Docker Daemon 会先试图从本地获取相关镜像;若本地镜像不存在,会从 Registry 中下载该镜像并保存到本地,供后续使用。


