2

Docker 不是虚拟机,所以它只运行操作系统原生的应用程序,对吧?这是否意味着 Docker for Windows 只运行 Windows .exe 文件?那么适用于 Windows 和 Linux 的 Docker 容器,如果有的话,它们有什么共同点?容器是否可以以任何方式在不同的操作系统上重用?

4

1 回答 1

3
  • “Docker 不是虚拟机”

正确,容器应该被视为在沙箱中运行的进程。如果您搜索这种隔离在 Linux 中是如何发生的,您肯定会遇到namespaces& cgroups。我最近看到的一种容器定义指出:

“容器是源自 tarball的进程,锚定到命名空间并由cgroup控制”

在此处输入图像描述

照片由Dan Mayer拍摄,#LeadDevLondon - 2018 年 6 月

您还可以在这里找到一些关于 linux 容器的有趣内容:容器剖析:命名空间、cgroups 和一些文件系统魔法 - Jérôme Petazzoni 的LinuxCon


  • Docker for Windows 只运行 Windows .exe 文件?

不会。考虑到拥有 Windows PC 的开发人员可能会在基于 linux 的容器上工作,这些容器稍后会部署到云中。Docker for Windows 带来了这种灵活性,但是如果你运行 linux 容器,这些容器将运行在某种虚拟化环境中。最初,Docker 工具箱使用 Oracle Virtualbox,现在Docker for Windows使用 Hyper-V。

我不太了解隔离是如何在 Windows 操作系统内部发生的,但我认为逻辑类似于 Linux。有关Windows 容器的一些信息:

Windows 容器类型

Windows 容器包括两种不同的容器类型或运行时。

Windows Server 容器——通过进程和命名空间隔离技术提供应用程序隔离。Windows Server 容器与容器主机和主机上运行的所有容器共享一个内核。这些容器不提供恶意的安全边界,不应用于隔离不受信任的代码。由于共享内核空间,这些容器需要相同的内核版本和配置。

Hyper-V 隔离——通过在高度优化的虚拟机中运行每个容器来扩展 Windows Server 容器提供的隔离。在此配置中,容器主机的内核不与同一主机上的其他容器共享。这些容器专为具有与虚拟机相同的安全保证的恶意多租户托管而设计。由于这些容器不与主机或主机上的其他容器共享内核,因此它们可以运行具有不同版本和配置的内核(在受支持的版本中)——例如,Windows 10 上的所有 Windows 容器都使用 Hyper-V 隔离来利用Windows Server 内核版本和配置。

在有或没有 Hyper-V 隔离的情况下在 Windows 上运行容器是一个运行时决定。您可以选择最初创建具有 Hyper-V 隔离的容器,然后在运行时选择将其作为 Windows Server 容器运行。


  • Windows 和 Linux,如果有的话,它们有什么共同点?

一般来说,我会回答容器服务于微服务的理念,关注点分离,做一件事并做好。


  • 容器是否可以以任何方式在不同的操作系统上重用?

是和否。您可能会面临限制。例如,如果您有一个启动的应用程序FROM ubuntu:latest并希望使其在树莓派上运行,您将必须从为 arm 架构制作的基本映像构建一个新容器。Docker 不是一个抽象,它可以使用任何容器并使其在任何架构、操作系统上运行……你必须知道你想要实现什么,并仔细决定你最终选择使用什么。

于 2018-09-04T11:38:00.607 回答