Docker - Docker 镜像 简介
- 概述
- 简单介绍一下 docker 镜像的概念
1. 背景
- 复习 docker
- 镜像是 docker 最基础, 最重要的概念之一
- 所以正式使用之前, 最好有所理解和认识
2. 镜像
- 概述
- 简单描述
- 理解不够深入, 内容可能会有偏差
1. 镜像到底是什么
-
概述
- 大致说明镜像是什么
-
本质
- 文件系统的模板
-
关系类比
- 镜像 和 容器 的关系
- 类似于 代码 和 进程 的关系
- 镜像 和 容器 的关系
-
镜像层(layer)
- 概述
- 镜像是由 一个或多个 镜像层组成的
- 镜像层可以由多个镜像公用
- 概述
-
image
- 概念
- docker 为了方便镜像管理, 对镜像元数据做的抽象
- 用来映射到 镜像数据, 从而方便管理
- 以后一般不会提这个东西
- docker 为了方便镜像管理, 对镜像元数据做的抽象
- 概念
2. 启动
-
概述
- 简述 容器启动
- 最终的文件系统, 是由一个个镜像叠加后产生的结果
-
准备
- 有镜像
- 宿主机系统已经正常启动
-
过程
-
挂载 bootfs
-
作用
- 引导 rootfs
-
结果
- 引导成功后, 会被卸载
-
-
挂载 rootfs
-
作用
- 容器的基础文件系统
- 里面通常会有 操作系统
- 容器的基础文件系统
-
过程
- 挂载
- 检测完成性
- 最终转为 只读模式
-
-
挂载 其他镜像层
- 作用
- 在 rootfs 上添加其他的 镜像层
- 当然这些层也是 只读的
- 作用
-
挂载 init-layer
- 作用
- 记录特定 容器实例 的属性
- 环境变量
- 各种配置
- 等等
- 记录特定 容器实例 的属性
- 作用
-
挂载 读写层
- 作用
- 挂载对外直接读写的文件系统
- 作用
-
执行命令
- 作用
- 如果有命令, 就执行
- 作用
-
-
结果
-
产生了一个 可用的容器
- 从外面的视角来看, 这个就是一个文件系统
- 就像那种小说里藏宝图的感觉
- 藏宝图本身, 有一定透明度
- 每一张藏宝图, 只有其中一部分
- 要想得到一章完整的藏宝图, 需要将几张叠在一起看
- 或者说, 就是 ps 里的 图层
- 就像那种小说里藏宝图的感觉
- 其他的机制, 后面会有描述
- 从外面的视角来看, 这个就是一个文件系统
-
可能产生的疑问
- 分层 是怎么回事
- layer
- 分了那么多层, 到底怎么挂载
- 只读层
- 读写层
- 既然有那么多层, 读写到底怎么办
- 分层 是怎么回事
-
3. 特性
1. 分层
-
概述
- 镜像的分层
- layer
- 镜像的分层
-
镜像的组成
- 一个基础镜像
- 通常是操作系统镜像
- 若干其他分层
- 通常是各种命令
- dockerfile 里, 一个命令就是一层
- 通常是各种命令
- 从外面看
- 就像一个 文件系统, 而不多个的叠加
- 一个基础镜像
-
只读
- 启动容器后, 镜像里的内容, 是只读的
- 具体的写, 需要 联合挂载 和 写时复制 的配合
- 启动容器后, 镜像里的内容, 是只读的
-
layer 复用
- 镜像由多个 layer 组成
- layer 是可以复用的
- 多个镜像, 同时使用一个 layer 层
- 会影响到后面的 写时复制
2. 联合挂载
-
概述
- 整合多个 layer 里的文件系统, 以及 读写文件系统
- 同时挂载到一个 mountpoint 上
- 对外看来, 只是一个 联合文件系统
- 整合多个 layer 里的文件系统, 以及 读写文件系统
-
感觉这个, 好像没什么可说的...
3. 写时复制
-
概述
- 一种 优化措施
- 较少并发用户的资源占用
- 加快复用资源的加载速度
- 怎么说
- 平时
- 大家一起用
- 写时
- 复制出一份私有的数据
- docker 里就是写到 具体容器的读写层
- 复制出一份私有的数据
- 平时
- 一种 优化措施
-
文件读写
-
读
- 没有数据冲突
- 直接读
- 有数据冲突
- 上层会让底层不可见
- 但不会实质影响底层内容
- 没有数据冲突
-
写
- 只对 读写层写入
- 不会影响底层的内容
-
-
问题
- 写入的东西, 不会影响镜像本身
- 容器挂了, 就没了
- 如果需要构建新容器, 那该怎么办呢
- 写入的东西, 不会影响镜像本身
4. 貌似还有个 内容寻址
- 但是这个我也不太明白, 不知道从何说起
4. 镜像基本属性
-
概述
- 镜像基本属性
- 查看
- 解释
- 镜像基本属性
-
查看
> docker image ls
-
结果
- 结果查询, 通常会有这么写属性
-
REPOSITORY
-
概述
- 仓库
-
格式
# 格式1 <repo> # 格式2 <repo>/<subRepo>
-
-
TAG
-
概述
- 镜像标记
- 可以理解为 版本号
-
默认
- latest
-
-
IMAGE ID
- 概述
- 镜像 镜像生成时, 随机生成的内容
- 概述
-
CREATED
- 概述
- 镜像创造的事件
- 概述
-
SIZE
- 概述
- 镜像的大小
- 概述
-
- 结果查询, 通常会有这么写属性
ps
-
ref
- docker 实践
- 第一本 docker 书
- Docker 镜像之进阶篇
-
后续
- docker 资源管理命令
- 镜像
- 容器
- 存储
- 网络
- docker 资源管理命令
尽量尝试解释清楚; 自己校对能力有限, 如果有错误欢迎指出