docker - "Dockerized"应用程序经常构建在操作系统容器之上。为什么这不违背目的?

标签 docker

当我向我的团队介绍 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/

相关文章:

python - Docker-compose MemoryError

docker - kubeadm初始化问题-无法执行 'docker info'

docker - 如何获取docker镜像的所有可用环境变量?

docker - 带 Docker 的 TensorFlow

docker - 将Nginx入口 Controller 公开为Daemonset

c# - 当原始请求为 HTTPS 时,AspNetCore.WsFederation 获取 signin-wsfed 重定向到 HTTP

gradle - 使用Gradle构建docker play应用

linux - 通过 docker 安装 Tensorflow 时出错

linux - 如何将 docker 镜像指向我的 .m2 目录,以便在 mac 上的 docker 中运行 maven?

docker - Docker构建COPY失败