2019-10-29 14:31:45 +08:00
# Docker 镜 像
2014-09-15 17:08:06 +08:00
2018-12-08 21:47:05 +08:00
我 们 都 知 道 , 操 作 系 统 分 为 内 核 和 用 户 空 间 。 对 于 Linux 而 言 , 内 核 启 动 后 , 会 挂 载 ` root ` 文 件 系 统 为 其 提 供 用 户 空 间 支 持 。 而 Docker 镜 像 ( Image ) , 就 相 当 于 是 一 个 ` root ` 文 件 系 统 。 比 如 官 方 镜 像 ` ubuntu:18.04 ` 就 包 含 了 完 整 的 一 套 Ubuntu 18.04 最 小 系 统 的 ` root ` 文 件 系 统 。
2014-10-21 13:59:03 +08:00
2016-11-08 05:57:30 +08:00
Docker 镜 像 是 一 个 特 殊 的 文 件 系 统 , 除 了 提 供 容 器 运 行 时 所 需 的 程 序 、 库 、 资 源 、 配 置 等 文 件 外 , 还 包 含 了 一 些 为 运 行 时 准 备 的 一 些 配 置 参 数 ( 如 匿 名 卷 、 环 境 变 量 、 用 户 等 ) 。 镜 像 不 包 含 任 何 动 态 数 据 , 其 内 容 在 构 建 之 后 也 不 会 被 改 变 。
2014-10-21 13:59:03 +08:00
2019-10-29 14:31:45 +08:00
# # 分 层 存 储
2016-11-08 04:10:11 +08:00
2016-11-08 05:57:30 +08:00
因 为 镜 像 包 含 操 作 系 统 完 整 的 ` root ` 文 件 系 统 , 其 体 积 往 往 是 庞 大 的 , 因 此 在 Docker 设 计 时 , 就 充 分 利 用 [ Union FS ] ( https : //en.wikipedia.org/wiki/Union_mount) 的技术,将其设计为分层存储的架构。所以严格来说,镜像并非是像一个 ISO 那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。
2016-11-08 04:10:11 +08:00
2016-11-08 05:57:30 +08:00
镜 像 构 建 时 , 会 一 层 层 构 建 , 前 一 层 是 后 一 层 的 基 础 。 每 一 层 构 建 完 就 不 会 再 发 生 改 变 , 后 一 层 上 的 任 何 改 变 只 发 生 在 自 己 这 一 层 。 比 如 , 删 除 前 一 层 文 件 的 操 作 , 实 际 不 是 真 的 删 除 前 一 层 的 文 件 , 而 是 仅 在 当 前 层 标 记 为 该 文 件 已 删 除 。 在 最 终 容 器 运 行 的 时 候 , 虽 然 不 会 看 到 这 个 文 件 , 但 是 实 际 上 该 文 件 会 一 直 跟 随 镜 像 。 因 此 , 在 构 建 镜 像 的 时 候 , 需 要 额 外 小 心 , 每 一 层 尽 量 只 包 含 该 层 需 要 添 加 的 东 西 , 任 何 额 外 的 东 西 应 该 在 该 层 构 建 结 束 前 清 理 掉 。
2016-11-08 04:10:11 +08:00
2016-11-08 05:57:30 +08:00
分 层 存 储 的 特 征 还 使 得 镜 像 的 复 用 、 定 制 变 的 更 为 容 易 。 甚 至 可 以 用 之 前 构 建 好 的 镜 像 作 为 基 础 层 , 然 后 进 一 步 添 加 新 的 层 , 以 定 制 自 己 所 需 的 内 容 , 构 建 新 的 镜 像 。
2016-11-08 04:10:11 +08:00
2016-11-08 05:57:30 +08:00
关 于 镜 像 构 建 , 将 会 在 后 续 相 关 章 节 中 做 进 一 步 的 讲 解 。