为什么Docker能够运行不同的Linux发行版?[关闭]


68

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

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


2
标记为理论。这是关于OS和Docker低层实现的一个有效问题。
Regan 2014年


17
这正是我在问自己有关
docker

2
@ chiastic-security在这个问题上有什么不清楚的地方?他问“ ..但是当我在arch linux上运行docker时,docker如何在容器中运行apt-get命令?。”
Teimuraz 2016年

5
“关于通用计算硬件和软件的问题对于Stack Overflow来说是没有主题的,除非它们直接涉及主要用于编程的工具”,因为docker用于运行Web应用程序和构建工具,这又如何成为主题?
paulm '16

Answers:


80

因为内核是相同的。

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

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

这是Linux的概述。

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

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

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


6
因此,运行ubuntu docker映像将运行ubuntu在Linux内核之上所做的所有工作。是不是
lajarre 2015年

5
@lajarre不完全是。它并不能运行所有内容(尽管在技术上可以做到),但是基本的ubuntu映像会运行使ubuntu正常运行所需的最低要求。
Regan

8
@ Regan,Docker如何处理不同Linux内核版本之间的差异?

2
@Hammer一点也不。所有容器都在同一内核上运行。发行版之间的最大区别是用户区(应用程序,库,文件系统,程序包管理器)。每个容器包含其自己的版本。但是也有例外,例如Redis数据库,内核差异确实很重要。
MauganRa

这个答案意外地颠倒了OP对Arch和Ubuntu的作用。
汤米

4

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

docker search <your search term>

因此要搜索可以使用的ubuntu图片

docker search ubuntu

我建议您遵循Docker教程,并仔细阅读左侧的所有说明和链接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.