所有docker图像都有最小的操作系统吗?

时间:2017-10-12 11:43:02

标签: docker docker-image

我正在尝试学习Docker以及那些涉及在线资料的内容。我开始知道有一个官方的图像中心,我们可以拉,并运行一个容器。

回购可在https://hub.docker.com/处获得,是屏幕截图的一部分:

enter image description here

在此图中我们可以看到ubuntu,httpd,mysql(等等)的官方图片。

我的问题是:

所有这些图片都有"最小的OS"他们跑的地方。例如,如果我们考虑httpd图像,它是否具有运行它所需的操作系统?

5 个答案:

答案 0 :(得分:3)

大多数图片都基于分布,因为您可以在Dockerfiles中看到它。除了分发图像本身。它们具有不同的基本图像,称为scratch

您可以在访问DockerHub上的项目页面时查看它们所基于的图像,例如https://hub.docker.com/_/httpd/

他们的Dockerfiles被引用,您可以通过点击它们来查看它们,例如第一个标签" 2.2"是指this file。 Dockerfile中的第一行是FROM debian:jessie并显示它基于Debian图像。

它广泛用于在其中包含带有后缀-alpine的分隔标记,以指示使用alpine linux,这是比Debian图像小得多的基本图像。这导致httpd图像的图像较小,因为基本图像要小得多。

答案 1 :(得分:3)

答案如下:“容器”各种形式都是幻觉!”< /strong>

“在容器中运行”的每个进程实际上都运行 直接 在主机操作系统上。 但它是“戴着玫瑰色眼镜”。 它认为它知道它的用户 ID 是什么......但它不知道。 ?‍♂️ 它认为它知道网络是什么样子。文件系统是什么样的。 …………

而且,它可以这样想,因为它所能看到的任何东西都不会告诉它。

...但是,它所看到的任何东西实际上都不是物理真相。

“容器化”使我们能够以比“虚拟化”低得多的成本实现基本的技术要求——完全隔离。正在运行的进程会看到他们需要看到的东西,因此“他们不需要更聪明”。同时,知道真实情况的主机操作系统可以非常有效地支持它们:它只需要保持假象。非常昂贵的“虚拟机”软件层完全消失了。实际存在的唯一“操作系统”是主机。

答案 2 :(得分:1)

整个想法是整个映像完全独立运行在硬件/虚拟化层上。因此(专业:)也不会受到其他任何影响,而不是图像的一部分。

每张图片都包含一个完整的操作系统。特殊的docker使操作系统带有几个兆字节:例如linux Alpine这是一个8兆字节的操作系统!

但像ubuntu / windows这样更大的操作系统可能只有几千兆字节。两者都有它们的优势,因为docker会在图层中分割图像,所以当你使用两次基础图像时(FROM命令,请参阅N20答案),那么你只会下载一次这个图层。

较小的操作系统只需要下载几兆字节。但是对于你想要使用的每个(linux)库,你必须下载&amp;包括你自己。然后,此自定义制作的图层仅用于您自己的图像,因此不会在其他图像中重复使用,从而创建客户额外的下载层&amp;兆字节的人必须下载才能运行您的图像。

如果您想从零开始制作图像,可以使用以下命令启动dockerfile:

FROM scratch

但是不建议这样做,除非你真的知道你在做什么和/或你在徘徊。

答案 3 :(得分:0)

据我了解,图像是由父图像构建在分层体系结构中的。所以我们有一个父图像,然后对此图像的更改比父图像高了一层。如果您看到图像的dockerfile,您将看到类似

FROM node:6.11.5

节点:6.11.5是我们当前图像的父图像

如果检查父映像的dockerfile,您会发现它们在层次结构中的某个位置,遵循从基本映像

该基本映像基本上是一个没有内核的操作系统,但是仅具有基于不同linux发行版(例如centos,debian)的用户界面软件。因此,所有映像都使用主机OS内核。因此,您不能在Linux主机上安装Windows容器,反之亦然。

因此,基本上所有映像都是在基础映像(这是一个没有内核的操作系统)上的分层更改。

请在下面找到更多信息的链接:

https://serverfault.com/questions/755607/why-do-we-use-a-os-base-image-with-docker-if-containers-have-no-guest-os

https://blog.risingstack.com/operating-system-containers-vs-application-containers/

如果需要创建基本图像,可以在此处查看步骤。

https://docs.docker.com/develop/develop-images/baseimages/

如果我错了,请纠正我。

答案 4 :(得分:0)

我认为很多这些答案都没有抓住重点。解释你能做什么或可能做什么并不能回答这个问题:所有的 docker 镜像都需要一个操作系统吗?

经过一番挖掘,答案是否定的。

Azure Resource Manager Rest API

try session.setActive(true)

此 Dockerfile 中没有定义操作系统。只有一个预编译的二进制 hello world 应用程序

也在这个问题中:

https://docs.docker.com/develop/develop-images/baseimages/

回答者做出以下声明:

<块引用>

为什么我们将容器基于操作系统映像?因为你想使用一些命令,比如 (apt, ls, cd, pwd).

通常只包含操作系统是因为您可能想要使用一些捆绑的低级工具或 SSH 来执行某些操作。