Docker
- ⛅Docker-Registry
- 🌠分类
- 🌠镜像仓库工作机制
- 🌠常用的镜像仓库
- 🌠镜像仓库命令
- ☃️docker login
- ☃️docker pull
- ☃️docker push
- ☃️docker search
- ☃️docker logout
- 🌠镜像命令[部分]
- ☃️docker images
- ☃️docker image inspect
- ☃️docker tag
- 🌠容器命令[部分]
- ☃️docker run
- ☃️docker ps
⛅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 中下载该镜像并保存到本地
🌠常用的镜像仓库
- DockerHub
- 国内镜像源
- 网易加速器 → https://hub-mirror.c.163.com
- 百度 → https://mirror.baidubce.com
- 中科大 → https://mirrors.ustc.edu.cn/
- 私有仓库
- 常见的私有仓库工具
- Harbor
- Nexus
- Docker registry
- 常见的私有仓库工具
🌠镜像仓库命令
command | alias | function |
---|---|---|
docker login | 登录仓库 | |
docker pull | docker image pull | 拉取镜像 |
docker push | docker 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