⛅Docker-Registry


镜像仓库 (Docker Registry) 负责存储、管理和分发镜像,并且提供了登录认证能力,建立了仓库的索引

镜像仓库管理多个 Repository, Repository 通过命名来区分。每个 Repository 包含一个或多个镜像,镜像通过镜像名称和标签(Tag)来区分

镜像仓库架构图

在这里插入图片描述

  • 镜像仓库(Registry): 要从哪一个镜像仓库拉取镜像,通常通过 DNS 或 IP 地址来确定一个镜像仓库如hub.docker.com, 一个 Registry 中可以存在多个Repository. Repository 可分为“顶层仓库”和“用户仓库”; 用户仓库名称格式为“用户名/仓库名”. 每个仓库可以包含多个 Tag(标签),每个标签对应一个镜像
  • Repository: 由某特定的 docker 镜像的所有迭代版本组成的镜像仓库
  • 镜像名称: (name) + 标签(tag): 如 nginx:latest
  • 认证能力: 提供用户注册,登录、登出能力
  • 索引: 提供镜像的索引信息,方便检索

🌠分类

  • 根据是否对外开放进行划分
    • 公有仓库: 像阿里云、dockerhub等放到公有网络上, 不用登录就可以下载镜像, 供大家访问使用
    • 私有仓库: 不对外开放,往往位于私有网络, 只有公司内部人员可以使用
  • 根据供应商和面向群体划分
    • 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 Registry 中的镜像通常由开发人员制作, 而后推送至公共私有 Registry 上保存, 供其他人员使用, 例如部署到生产环境

在这里插入图片描述

  • 名词解释
    • 开发环境: 开发人员使用的一套环境
    • 测试环境: 需求开发完成后, 发布到供测试人员进行测试的环境
    • 预发布环境: 版本测试完成后, 发布到和生产类似的环境, 提前模拟生产发布
    • 生产环境: 真正面向客户的环境

🍂镜像仓库的拉取机制

启动容器时, docker daemon 会试图从本地获取相关的镜像

本地镜像不存在时, 将从 Registry 中下载该镜像并保存到本地

🌠常用的镜像仓库

  1. DockerHub
  2. 国内镜像源
  3. 私有仓库
    • 常见的私有仓库工具
      • Harbor
      • Nexus
      • Docker registry

🌠镜像仓库命令


commandaliasfunction
docker login登录仓库
docker pulldocker image pull拉取镜像
docker pushdocker image push推送镜像
docker search查找镜像
docker logout登出仓库

☃️docker login


🍂功能

登录到一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub

🍂语法

docker login [OPTIONS] [SERVER]
  • OPTIONS
    • -u: 登录的用户名
    • -p: 登录的密码
# 登录 Docker Hub 镜像仓库
docker login -u root -p 123

☃️docker pull


🍂功能

从镜像仓库中拉取或者更新指定镜像

🍂语法

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

🍂别名

docker image pull
  • OPTIONS
    • -a: 拉取所有 tagged 镜像
    • --disable-content-trust: 忽略镜像的校验, 默认开启
# 拉取 nginx:1.23.3 镜像
docker pull nginx:1.23.3

☃️docker push


🍂功能

将本地的镜像上传到镜像仓库, 要先登录到镜像仓库

🍂语法

docker push [OPTIONS] NAME[:TAG]

🍂别名

docker image push
  • OPTIONS
    • -a: 推送所有 tagged 镜像
    • --disable-content-trust: 忽略镜像的校验, 默认开启
# 推送 myapache:v1 镜像
docker push myapache:v1

☃️docker search


🍂功能

从 Docker Hub 查找镜像

🍂语法

docker search [OPTIONS] TERM
  • OPTIONS
    • --no-trunc: 显示完整的镜像描述
    • -f <过滤条件>: 列出收藏数不小于指定值的镜像
# 从 Docker Hub 查找所有镜像名包含 nginx,并且 star 数大于等于 10 的镜像
docker search -f stars=10 nginx

☃️docker logout


🍂功能

登出一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub

🍂语法

docker logout [SERVER]
# 登出 Docker Hub 仓库
docker logout

🌠镜像命令[部分]

☃️docker images


🍂功能

列出本地镜像

🍂语法

docker images [OPTIONS] [REPOSITORY[:TAG]]

🍂别名

docker image ls, docker image list
  • OPTIONS
    • -a: 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)
    • --digests: 显示镜像的摘要信息
    • -f: 显示满足条件的镜像
    • --forma: 指定返回值的模板文件
    • --no-trunc: 显示完整的镜像信息
    • -q: 只显示镜像 ID
# 列出本地全部镜像
docker images

# 列出本地镜像中 REPOSITORY 为 ubuntu 的镜像列表
docker images ubuntu

☃️docker image inspect


🍂功能

查看镜像详细信息

🍂语法

docker image inspect [OPTIONS] IMAGE [IMAGE...]
# 查看镜像详细信息
docker images inspect nginx:1.23.3

在这里插入图片描述

☃️docker tag


🍂功能

标记本地镜像,将其归入某一仓库

🍂语法

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

🍂别名

docker image tag
# 给 ubuntu:22.04 这个镜像打上一个新的标签 myregistry.com/myubuntu:22.04
docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04

🌠容器命令[部分]

☃️docker run


🍂功能

创建一个新的容器并运行一个命令

🍂语法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

🍂别名

docker container run
  • OPTIONS
    • -d: 后台运行容器, 并返回容器 ID
    • -i: 以交互模式运行容器, 通常与 -t 同时使用
    • -P: 随机端口映射, 容器内部端口随机映射到主机的端口
    • -p: 指定端口映射, 格式为:主机(宿主)端口:容器端口
    • -t: 为容器重新分配一个伪输入终端, 通常与 -i 同时使用
    • --name="nginx-lb": 为容器指定一个名称
    • -h "mars": 指定容器的hostname
    • -e username="ritchie": 设置环境变量
    • --cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定 CPU 运行
    • -m:设置容器使用内存最大值
    • --network="bridge": 指定容器的网络连接类型
    • --link=[]: 添加链接到另一个容器
    • --volume , -v: 绑定一个卷
    • --rm: shell 退出的时候自动删除容器
# 使用 docker 镜像 nginx:latest 以后台模式启动一个容器,并将容器命名为 mynginx
docker run --name mynginx  -d nginx:latest

# 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data
docker run run -p 80:80 -v /data:/data -d  nginx:latest

☃️docker ps


🍂功能

列出容器

🍂语法

docker ps [OPTIONS]

🍂别名

docker container ls, docker container list, docker container ps
  • OPTIONS
    • -a: 显示所有的容器,包括未运行的
    • -f: 根据条件过滤显示的内容
    • --format: 指定返回值的模板文件。如json或者table
    • -l: 显示 latest 的容器
    • -n: 列出最近创建的 n 个容器
    • --no-trunc: 不截断输出
    • -h "mars": 指定容器的hostname
    • -q: 静默模式,只显示容器编号
    • -s: 显示总的文件大小
# 显示所有容器
docker ps -a

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐