本文仅仅是对《Docker 源码分析》 内容中自己需要部分的精简加上一些自己的理解
-
Docker镜像介绍
- Image: 一个只读的layer
- Layer: Docker container 文件系统中可叠加的一部分
-
rootfs:一个docker container 启动时(而非运行后)其内部进程可见的文件系统视角。
- 传统的Linux 内核启动会先挂在一个只读的rootfs,验证完整后切换成读写或者在rootfs上另行挂在一个文件系统。Docker Daemon 在挂在完rootfs之后利用Union Mount技术,在这个只读的rootfs上再挂载一个读写的系统。 也就是说, 容器中的进程对rootfs只有读的权限。
- Union-Moount: 将挂载点原先的内容和被挂载内容合并。 常见的有 UnionFS, AUFS, OverlayFS。
- Copy-on-write特性: 从不覆盖已有文件系统中的内容。 比如用户要更改只读的 /etc/hosts 文件。 FS会把文件copy到rw系统中,再进行更改,并且使得原文件对用户不可见。 SO, 比如rootfs装了MySQL, 而用户通过apt-get 卸载了MySQL, 那么rootfs中的MySQL将对用户不可见。
-
Image
-
Docker 容器中只读文件系统的一部分。 换言之, Docker容器中的 rootfs 由多个image构成 通过 union mount构成。
- Parent image & base image: 除了最底层image,其余image都依赖其底下一个或多个image。 下层称为上册的parent image,最底层称为 base image
-
- Layer
Rootfs 每个 只读的 image都称为一层layer。- Top layer:最上面一层rw的fs。
- Commit : Top layer 转变为 image。