【Docker 03】Docker Registry - 镜像仓库
🌈 一、什么是镜像仓库
- 镜像是 Docker 的三大组件之一,Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,则 Docker 会从镜像仓库中下载该镜像。
- 从字面意思上来说,==镜像仓库(Docker Registry)==是个用来存储镜像的地方。镜像仓库不止能用来存储镜像,还提供了管理和分发镜像的功能,并且提供了登录认证能力(提供了用户的注册、登录、登出能力),建立了仓库的索引(提供了镜像的索引信息,方便检索)。
- 整个 Docker 网站就可以理解为一个 Registry。
- 镜像仓库(Registry)管理着多个 Repository(通过命名进行区分),每个 Repository 包含了 1 ~ n 个镜像(通过镜像名和标签 tag 进行区分)。
- 元数据:用来描述镜像的数据(如镜像 ID、镜像的 CPU 类型、镜像有没有漏洞、有几个漏洞、这个镜像存在于哪个磁盘上等)。
- blob:实实在在的数据,要占硬盘的。
🌈 二、镜像仓库的分类
⭐ 1. 按是否对外开发进行划分
- 公有仓库:如阿里云、腾讯云、DockerHub 等放在公有网络上,不用登录就可以下载镜像。
- 私有仓库:不对外开放,通常只位于私有网络,只有公司的内部人员可以使用。
⭐ 2. 按供应商和面向群体进行划分
- sponsor registry:第三方 registry,供客户和 Docker 社区版使用。
- mirror registry:第三方 registry,只让客户使用(如阿里云,只有注册用户才能使用)。
- vendor registry:由发布 Docker 镜像的供应商提供的 registry(如 Google 和 Redhat 提供了镜像仓库服务)。
- private registry:通过没有防火墙和额外的安全层的私有实体提供的 registry,仅供内部使用。
🌈 三、镜像仓库的使用流程
- 通过 docker login 命令登录仓库。
- 通过 docker pull 命令拉取需要的镜像。
- 通过 dockerfile / commit 等方式制作完镜像通过 docker push 命令上传到仓库。
镜像仓库的拉取机制
- 在启动容器时,docker daemon 会试图从本地获取相关的镜像。
- 如果不存在相关的本地镜像,则会从 Registry 中想在该镜像并保存到本地。
🌈 四、镜像仓库命令
命令 | 别名 | 功能 |
---|---|---|
docker login | 登入仓库 | |
docker pull | docker image pull | 拉取镜像 |
docker push | docker image push | 推送镜像 |
docker search | 查找镜像 | |
docker logout | 登出仓库 |
⭐ 1. 登入仓库 docker login
- 用于登录到一个 Docker 镜像仓库,如果没有指定镜像仓库的地址(server),则默认为官方仓库(Docker Hub)。
1. 基础语法
docker login [options] [server]
2. 常用选项
-u
:登录的用户名-p
:登录的密码
⭐ 2. 拉取镜像 docker pull
- 用于从镜像仓库中拉取或更新指定镜像。
1. 基础语法
docker pull [options] name[:tag|@digest]
2. 常用选项
-a
:拉取所有 tagged 镜像--disable-content-trust
:忽略镜像得校验,默认开启
3. 使用示例
docker pull nginx:123.3
⭐ 3. 推送镜像 docker push
- 用于将本地的镜像上传到镜像仓库(得先通过 docker login 登入到镜像仓库)。
1. 基础语法
docker push [options] name[:tag]
2. 常用选项
-a
:推送所有 tagged 镜像--disable-content-trust
:忽略镜像得校验,默认开启
3. 使用示例
docker push myapache:v1
⭐ 4. 查找镜像 docker search
- 用于从 Docker Hub 中查找镜像。
1. 基础语法
docker search [options] 镜像名
2. 常用选项
--no-trunc
:显示完整得镜像描述-f<过滤条件>
:列出收藏数不小于指定值的镜像
3. 使用示例
# 从 Docker Hub 中查找所有镜像名包含 nginx,且收藏数 (star) 大于 10 的镜像
docker search -f stars=10 nginx
⭐ 5. 登出镜像 docker logout
- 用于登出一个 Docker 镜像仓库,如果没有指定镜像仓库地址,则默认为官方仓库 Docker Hub。
1. 基础语法
docker logout [server]