搞 Docker 必懂的镜像与容器:分层存储是关键,看完少走 3 年弯路

fLZNU0Q9J

你是否曾在学习 Docker 时,面对“镜像”和“容器”这两个概念感到迷惑?

是否觉得“分层存储”听起来很高深?

这篇文章将为你彻底厘清 Docker 最核心的基石。拆解镜像的分层存储容器的运行时本质

无论你是刚入门还是已在使用中遇到困惑,这篇解读都将帮你夯实基础,少走弯路

Docker 镜像

Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。

镜像不包含任何动态数据,其内容在构建之后不会被改变。这种不变性保证了环境的一致性。

镜像的分层存储

为了解决镜像体积庞大、提高效率和复用性,Docker 利用 Union FS(联合文件系统) 技术,将镜像设计为分层存储的架构。

为何要分层?

分层存储使得镜像不再是一个臃肿的单一文件(如 ISO 包),而变为一个由多层文件系统联合组成的虚拟概念

如何分层?

镜像在构建时,会像搭积木一样一层层叠加。每一层都是基于其前一层构建的,构建完成后,该层就变为只读状态,不再改变。

当需要修改某一层的文件时(例如删除前层的文件),Docker 并不会真的去改动底层,而只会在当前层记录一个“修改标记”(如删除标记)。最终在容器运行时,统一视角下看到的是这些层级叠加后的结果。

分层带来的核心优势
  1. 复用与共享:不同的镜像可以共享相同的基础层(例如相同的操作系统层)。这极大地节省了磁盘空间和网络传输带宽。
  2. 易于定制:可以基于某个现有镜像作为基础层,然后在上面添加新的层,来定制自己所需的内容,从而高效地构建出新镜像。
  3. 提升构建效率:构建镜像时,如果某一层没有变化,Docker 会直接复用本地已有的这一层,无需重新创建,加快了构建速度。

容器是什么?

容器是 Docker 技术的核心应用实体,理解它需要抓住其 “运行时实例”“分层存储” 两大核心。

容器是一个 “运行中的 Docker 镜像实例”

镜像是静态、只读的模板;容器则是该模板被创建、运行后的动态实体

容器的本质是一个运行于独立命名空间中的进程。它拥有自己的:

  1. 文件系统(由镜像提供基础,叠加容器层)。
  2. 网络配置
  3. 独立的进程树
  4. 资源隔离的环境(CPU、内存等)。

容器与镜像的关系

二者的关系是理解 Docker 的关键,其核心机制在于 “分层叠加”

继承与叠加

容器是基于镜像创建的。启动容器时,Docker 会以镜像的只读层为基础

在其上添加一个全新的、可读写(Read-Write)的薄层,称为 “容器层(Container Layer)”

如下是 “分层示意图”,只读的镜像层在下,可读写的容器层在最上

img

写时复制(CoW)与数据持久化

所有对容器运行时的文件修改(如写入日志、安装软件、生成数据)都只发生在最上层的容器层

容器层的生命周期与容器完全一致。当容器被删除时,其对应的可读写层也会被删除,数据将丢失。

如需持久化数据,必须通过挂载数据卷(Volume) 或绑定宿主机目录到容器来实现。

一个镜像,多个容器

基于同一个镜像,可以同时创建和运行多个独立的容器。这些容器共享底层的镜像层,但各自拥有独立的容器层,互不影响。

容器的核心特性

特性维度 核心要点 说明与意义
本质 隔离的进程 并非迷你虚拟机,而是利用命名空间等技术隔离的进程,因此启动极快、开销极小。
基石 镜像实例化 容器是镜像的运行时表现。没有镜像,就无法创建容器。
存储结构 镜像层(只读) + 容器层(读写) 分层结构实现了镜像的共享复用与容器的独立可变,是 Docker 高效的核心。
数据管理 容器层临时,卷挂载持久 明确区分临时运行数据与需要持久化的业务数据,是正确使用容器的关键。
资源利用 高效、轻量 多个容器可共享宿主机内核和底层镜像层,资源利用率远高于传统虚拟机。

其他疑问

开发/测试/生产环境切换就报错?Flask多环境配置秘籍+增删改查封装,开发效率翻倍(避坑大全)

告别碎片化教程!3分钟从0到1系统搞定MySQL与ORM联动,看这篇就够了

别再手动验参了!Flask动态路由的3个技巧,让URL校验自动化,效率提升300%

Flask 开发又卡壳了?80% 的报错都在路由和视图,新手看完直接避坑

选Flask还是Django?80%的新手都选错了,搞懂这3点,直接弯道超车

相关内容我都给大家做好了,感兴趣的朋友来「我的主页」找一找,直接就可以看到。

欢迎关注 「王二哥的技术笔记」,每天分享「FastAPI」、「Docker」、「Flask」、「职场」有趣干货,千万不要错过!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐