当我向我的团队介绍 Docker 时,出现了一个我不知道如何回答的问题。
Docker Hub 上的许多预构建容器,仅举一个例子,jboss/wildfly 容器构建在特定操作系统(Ubuntu、CentOS 等)的容器之上。其中一些容器实际上只是这些操作系统的容器。
然而,Docker 存在的主要理由是 prime claim to fame ,它声称它比虚拟机技术更好的基础是它的重量更轻,因为它不需要构建在操作系统之上。但是,如果是这样并且大多数容器都包含操作系统,这是否不会违背目的并使声明无效?
那么,这些 OS Docker 镜像中包含什么,以及如何仍然能够声称重量更轻?它是操作系统的精简版吗?
可以制作一个不构建在操作系统之上的 Docker 镜像吗? 什么决定了应用程序何时从容器中嵌入的操作系统获取操作系统服务,而不是从主机获取操作系统服务?
最佳答案
一个 Docker 镜像(很可能包含来自 Linux 发行版的基本系统)是只读的,并增加了几个层,这些层在您写入某个位置时启用。因此,如果您愿意,您可以共享基本镜像并拥有“附加组件”。这称为联合文件系统。 docker 文档提供了更多信息 here .与 VM 相比,这种共享使 Docker 消耗的资源(在这种情况下为 fs 空间)更少,您必须在每个 VM 上安装新的发行版。
请注意,您没有必须安装完整的 Ubuntu(无论如何,内核与主机系统共享),只是其中大部分通常是您的应用程序所需要的想在你的容器中运行。您可以轻松找到经过精简的图像,省略运行大多数应用程序不需要的文件,同时仍然适用于许多目标(因此您仍然可以共享基础图像,见上文)。
关于docker - "Dockerized"应用程序经常构建在操作系统容器之上。为什么这不违背目的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30742256/