Docker 容器的 Linux 基础镜像可以在 Docker 以外的环境中使用吗?

Docker 容器的 Linux 基础镜像可以在 Docker 以外的环境中使用吗?

容器共享机器的OS系统内核

https://www.docker.com/resources/what-c​​ontainer/

如果容器共享机器的操作系统内核,那么Debian或Alpine等Linux的Docker基础镜像中是否真的不包含内核?可以吗rootfs 构建这些基础镜像中使用的内容可以在 Docker 以外的环境中使用吗?

Alpine Linux 的 Dockerfile 显示了一个示例,

FROM scratch
ADD alpine-minirootfs-3.14.6-x86_64.tar.gz /
CMD ["/bin/sh"]

这些 Linux 版本是否假设了有关 Docker 内核的任何特定内容?

答案1

Debian 或 Alpine 等 Linux 的 Docker 基础镜像中是否真的不包含内核?

这通常是正确的。正如您对高山表演的参考,它们是基于迷你根文件系统其中不包含内核。

这些基础镜像中使用的 rootfs 构建可以在 Docker 以外的环境中使用吗?

显然它们可以直接在其他容器环境中使用,例如播客。它们包含的文件系统也可以在其他地方使用。

以 Alpine 为例,正如您在问题中所示,docker 镜像只不过是文件的内容alpine-minirootfs-<version>.tar.gz。如果您下载了该文件从这里并打开它,你可以立即chroot进入该目录以将其用作临时环境。

wget https://dl-cdn.alpinelinux.org/alpine/v3.15/releases/x86_64/alpine-minirootfs-3.15.4-x86_64.tar.gz
mkdir foo
cd foo
tar -xf alpine-minirootfs-3.15.4-x86_64.tar.gz
chroot . /bin/sh

注意chroot并没有设置所有隔离,例如 docker 所做的网络隔离

Docker 本身将内容分层打包,因此要在容器环境之外使用 docker 映像(例如 docker 或 podman),您需要手动将各层收集回一个目录树中。

答案2

Debian 或 Alpine 等 Linux 的 Docker 基础镜像中是否真的不包含内核?

是的;这些都是容器,即它们依赖操作系统内核来完成所有操作。他们自己的内核没有用——它无法运行。容器是内核命名空间的东西,而不是虚拟机!

这些基础镜像中使用的 rootfs 构建可以在 Docker 以外的环境中使用吗?

是的,OCI 运行时是标准化的。通常,docker 容器可以在 podman 以及 kubernetes 等更大的编排工具中工作。

这些 Linux 版本是否假设了有关 Docker 内核的任何特定内容?

是的,有点:完整的命名空间支持。幸运的是,自 Linux 2.6 以来,这一点就已经存在了,所以这并不是很具体。

当然:容器内的程序使用的所有设施都需要存在于内核中。因此,如果您内部有一个程序使用 Linux 5.10 中引入的系统调用或 /sys/ 条目,那么您将需要 Linux 5.10 内核来运行它。但这对于在任何操作系统上运行的任何程序都是一样的,无论是否容器化。

相关内容