“Docker化”应用程序经常build立在OS容器之上。 为什么这不能达到目的呢?

当我向我的团队介绍Docker时,我不知道该怎么回答。

Docker Hub上的许多预构build容器(仅作为jboss / wildfly容器的一个示例)构build在特定操作系统(Ubuntu,CentOS等)的容器之上。 其中一些容器实际上只不过是这些操作系统的容器。

然而,Docker的主要存在理由是声誉 ,声称它比虚拟机技术更好的基础是它的重量更轻,因为它不需要build立在OS之上。 但是,如果这是这样的,大多数容器包含一个操作系统,这是不是失败的目的,并宣布无效?

那么在这些操作系统Docker映像中究竟是什么,以及更轻的声称仍然能够被制作出来? 是一些操作系统的精简版吗?

是否可以创build一个不是在OS之上构build的Docker镜像? 什么决定了什么时候应用程序从embedded在容器中的操作系统获取操作系统服务,而不是从主机获取操作系统服务?

Docker镜像(很可能包含Linux发行版中的基本系统)是只读的,并且在您写入某个位置时启用了多个图层。 所以,如果你愿意,你可以分享基本的形象,并有“附加组件”。 这被称为联合文件系统。 docker文档在这里提供了更多的信息。 与虚拟机相比,这种共享使得Docker消耗更less的资源(在这种情况下是fs空间),在虚拟机上你必须安装一个新的发行版。

请注意,您不必完全安装Ubuntu(内核与主机系统共享,无论如何),它只是大部分通常需要在您的容器中运行的应用程序。 您可以很容易地find被剥离的图像,省略了运行大多数应用程序时不需要的文件,同时仍然可以用于多个目标(因此您仍然可以共享基本图像,参见上文)。