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

为什么docker能够运行不同的linux发行版?,linux,docker,Linux,Docker,我们可以使用docker提取不同的图像。这些映像是不同的linux发行版。 但是,无论docker在哪个linux发行版上运行,docker都可以像在虚拟机中一样运行这些不同的linux发行版 我知道docker用来控制不同的读写访问级别。因此,它可以在主机上重用某些文件。但是,当我的主机运行arch linux时,docker如何在容器中运行apt?图像是否包含apt get二进制文件?但是不同的linux发行版有不同的libs和软件版本。即使配置文件也不同。docker如何在arch lin

我们可以使用docker提取不同的图像。这些映像是不同的linux发行版。 但是,无论docker在哪个linux发行版上运行,docker都可以像在虚拟机中一样运行这些不同的linux发行版


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

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

docker search <your search term>

我建议您在阅读时仔细阅读左边的所有说明和链接。

因为内核是相同的

所有linux发行版的共同点,以及为什么称之为linux,是因为它们都使用linux内核

容器与主机共享同一内核,这就是为什么可以在Ubuntu主机上运行Arch映像

下面是Linux的概述

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

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

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

标记为理论。这是一个关于操作系统和Docker底层实现的有效问题。这正是我问自己的关于Docker的问题,我认为这是一个封闭的话题…@chiastic security这个问题中有什么不清楚的地方?他问道,“但是当我在arch linux中运行docker时,docker如何在容器中运行apt get命令呢?”“关于通用计算硬件和软件的问题对于堆栈溢出来说是离题的,除非它们直接涉及主要用于编程的工具。”鉴于docker被用来运行Web应用程序和构建工具,这一点怎么会偏离主题?请停止回答像这样非常有用的问题。谢谢。所以运行ubuntu docker映像就是运行ubuntu在linux内核上所做的一切。不是吗?@lajarre不完全是。它并不是运行所有的东西(虽然技术上可以),基本的ubuntu映像运行的是使ubuntu工作所需的最低限度。@Regan,docker如何处理不同linux内核版本之间的差异?@Hammer一点也不。所有容器都在同一个内核上运行。发行版之间最大的区别是用户区(应用程序、库、文件系统、包管理器)。每个容器都包含它自己的版本。但是也有例外,比如,内核的差异确实很重要。这个答案意外地颠倒了OP对Arch和Ubuntu的作用。
docker search ubuntu