为什么docker能够运行不同的Linux发行版?

atu*_*pal 58 linux docker

我们可以使用docker来拉出不同的图像.而这些图像是不同的linux发行版.但无论运行哪个Linux发行版docker,docker都可以像在虚拟机中一样运行这些不同的linux发行版.

我知道docker使用aufs来控制不同的读写访问级别.因此它可以在主机上重用一些文件.但是apt-get当主机运行时,docker如何在容器中运行arch linux?图像是否包含apt-get二进制文件?但是不同的linux发行版有不同的库和软件版本.甚至配置文件也不同.如何在一个arch linux中"运行"ubuntu?

Reg*_*gan 67

因为内核是一样的.

所有Linux发行版的共同点,以及它们被称为linux的原因,都是因为它们都使用linux内核.

容器与主机共享相同的内核,这就是您可以在Ubuntu主机上运行Arch映像的原因.

这是Linux的概述.

内核是处理与硬件通信的操作系统的一部分.它是操作系统的最低级别.以下是内核的主要功能列表:

  • 内存管理
  • 网络管理
  • 设备驱动
  • 文件管理
  • 流程管理

因此,当您使用容器时,您只能访问主机的内核,因为它是与硬件通信的唯一部分,只要您的操作系统使用该产品syscall,您就可以在容器内运行任何Linux发行版.(这就是你不能在容器内使用Windows的原因:它没有使用相同的东西syscall).

  • @Regan,docker如何处理不同Linux内核版本之间的差异? (6认同)
  • @lajarre不完全是.它没有运行所有东西(虽然它在技术上可以),基本的ubuntu映像运行使ubuntu工作所需的最低限度. (4认同)
  • 因此,运行ubuntu docker镜像正在运行ubuntu在linux内核上执行的所有操作.不是吗? (3认同)
  • @Hammer 一点也不。所有容器都运行在同一个内核上。发行版之间最大的区别是用户空间(应用程序、库、文件系统、包管理器)。每个容器都包含它自己的版本。但也有例外,例如 [Redis 数据库](https://redis.io/topics/admin),内核差异确实很重要。 (3认同)

Jim*_*ies 5

是的,图像必须包含 apt-get 才能运行 apt-get。每个映像可以在其中安装不同的软件。例如,您可以安装Arch docker 映像或 ubuntu 映像。您可以使用以下命令搜索公共镜像。

docker search <your search term>
Run Code Online (Sandbox Code Playgroud)

所以要搜索你可以使用的 ubuntu 镜像

docker search ubuntu
Run Code Online (Sandbox Code Playgroud)

我建议您仔细阅读docker 教程,并在阅读时仔细阅读左侧的所有说明和链接。