容器镜像

1. 本质

容器镜像是静态、只读的软件模板,不包含操作系统内核,打包了应用代码、依赖库、配置、环境变量以及完整 rootfs 根文件系统,本身不能运行进程。

2. 分层存储(UnionFS / Overlay2)

镜像由多层只读 layer 堆叠而成;Dockerfile 每一条指令生成一个镜像层。

层可以被多个镜像共享复用,节省磁盘空间;所有镜像层永久只读,不可修改。

3. 镜像和容器的关系

镜像为模板,容器是镜像的运行实例。

启动容器时,镜像全部只读层作为 lowerdir,额外生成容器专属可写层 upperdir;容器所有修改、新增、删除都发生在可写层,镜像不变。

删除容器只会销毁可写层,镜像保留;一个镜像可以启动多个独立容器。

4. 核心作用

① 统一环境,消除环境差异,实现一次构建到处运行;

② 支持仓库分发,可 pull/push,便于部署迁移;

③ 分层复用,节约存储空间;

④ 为容器提供完整文件系统 rootfs。

5. 相关操作与使用场景

  • docker build:读取 Dockerfile 构建生成镜像;
  • docker pull / push:从镜像仓库拉取、上传镜像;
  • docker run:基于镜像创建容器;
  • docker save / load:镜像离线导出、导入,用于离线迁移;
  • CI/CD 流水线中,镜像作为交付产物交给测试、生产环境。

6. 底层存储驱动关联

AUFS、Overlay2 负责把镜像多层只读层合并;镜像层全部作为 lowerdir,容器运行才新增 upperdir 可写层,使用写时复制 CoW 机制。

7. 与虚拟机镜像区别

容器镜像不带内核,共享宿主机内核,体积小;虚拟机镜像包含完整操作系统内核,体积大。

简短总结:

容器镜像是只读分层模板,携带 rootfs 与全部程序依赖;自身不能运行,用来实例化出容器;镜像层只读,容器单独拥有可写层;支持构建、分发、复用,解决环境不一致的问题。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐