14

所以,前几天我在这里阅读了有关 OS/System Container 与 Application Container的信息。

那里提到 Docker 是一个应用程序容器,并且

任何运行操作系统的容器都是系统容器。

现在,我很困惑,因为即使要在 Docker 中运行应用程序,您也需要一个可以用于任何发行版的基础映像。那么,这不应该让 Docker 也成为一种 OS Container 技术吗?谁能列出操作系统与应用程序容器技术之间的区别?

4

2 回答 2

1

正如@csprabala 在他的链接回答线程中如此有帮助地指出的那样:

操作系统容器(或系统容器)和应用程序容器都是最重要的容器,这意味着它们通过共享内核并分别在其“容器映像”中包含它们所需的一切以类似的方式运行。

不同之处主要在于操作系统容器几乎完全使用客户操作系统内核,直接使用他们自己的内核 API 函数(在此处描述),就像 VM 一样,但与 VM 不同 - 它通常在管理程序之上运行(如 Oracle VirtualBox 或VMWare ESXi)并且将硬盘表示为.vmdk文件,系统容器就像主机操作系统上的任何其他容器一样作为一组隔离的进程运行。

相反,使用Docker、 cri-o 或包含的应用程序容器(都在此处链接)仍然依赖某种底层容器引擎作为来宾操作系统的媒介并在其上作为常规进程运行(除非有不同的架构然后使用仿真),这就是为什么如果您在 Linux 发行版上将 docker 作为服务运行并假设在其之上有一个 Java 应用程序,并且您会检查正在运行的进程,top您会看到 Java 进程直接在主机操作系统,但当然与命名空间、PID 树(或进程树)和cgroups分开。

该实现有一些相似之处,但在使用和低级工作方面却大不相同。

于 2021-09-10T16:34:27.877 回答
0

这是因为您的容器应用程序可以在映像所基于的任何操作系统上运行。如果基础镜像是 Linux 容器,您可以在任何版本的 Linux 上运行容器。当谈到 Windows 上的容器化时,它变得有点模糊(因为 Linux 与 Windows 操作系统的架构师)。使用虚拟机,您需要一辆手推车来运送您需要的所有东西(操作系统、内核库、杂项库,然后是应用程序及其库)。使用容器,您只需要一个现在可以轻松携带的存储桶(从 Linux 的角度来看),因为您只需要一些内核 api 库,然后是您的应用程序和它需要的任何库。无需携带厨房水槽(即操作系统)。所以,是的,容器是一个应用程序容器,因为它包含应用程序,并且操作系统容器需要随身携带操作系统。我希望这个类比有所帮助。

于 2020-10-12T15:20:56.333 回答