docker 图像和图层如何工作?

How does docker Images and Layers work?

实际上我是 Docker 生态系统的新手,我想了解容器在基础映像上究竟是如何工作的?基础镜像是否加载到容器中?

我已经看过 Docker 文档,其中说读写容器层是在作为容器层的图像层之上形成的,但我感到困惑的是图像是不可变的,对吧?那么图像 运行 在哪里,它是否在 VM 的 Docker 引擎中以及容器实际上是如何发挥作用的?

how exactly does a container work on a base image? Does the base image gets loaded into the container?

Docker 容器将一个软件包裹在一个完整的 filesystem 中,其中包含 运行 所需的一切:代码、运行时间、系统工具、系统库 –任何可以安装在服务器上的东西。

FreeBSD JailsSolaris Zones 一样,Linux 容器是自包含的执行环境 -- 有自己的、隔离的 CPU、内存、块 I/O, 和网络资源(使用 CGROUPS 内核特性)——共享主机操作系统的内核。结果是感觉像一个虚拟机,但摆脱了来宾操作系统的所有负担和启动开销。

这就是说每个发行版都有自己的官方 docker 映像 (library),它附带了最少的二进制文件,被认为是 docker 的最佳实践并且可以构建上。

I am confused about is image is immutable, right? where is the image running, is it inside the Docker engine in the VM and how the container is actually coming into play?

Docker 曾经使用 AUFS,仍然在 debian 上使用它,并在其他发行版上使用 AUFS 等文件系统,如 overlay 等。 AUFS 提供分层。每个图像由图层组成,这些图层是只读的。每个容器在其图像层之上都有一个 read/write 层。只读层在容器之间共享,因此您将节省存储空间 space。容器将看到所有图像层的 union mount + read/write 层。