是否所有 docker 镜像都有最小的操作系统?

Cur*_*ind 15 docker docker-image

我正在尝试学习 Docker 并为此参考在线资料。我开始知道有官方的镜像中心,我们可以拉取并运行一个容器。

存储库位于https://hub.docker.com/屏幕截图的一部分:

在此处输入图片说明

在这张图中我们可以看到 ubuntu、httpd、mysql(等等)的官方镜像。

我的问题是:

所有这些图像是否都有运行它们的“最小操作系统”。例如,如果我们考虑httpd图像,它是否具有运行所需的操作系统?

Mik*_*son 15

答案是:“容器” 无论以何种形式存在,都是一种 幻觉!”

\n

事实上,“在容器中运行”的每个进程都直接在主机操作系统上运行。 但这是“戴着玫瑰色眼镜”。 它认为它知道它的用户 ID 是什么……但事实并非如此。\xe2\x80\x8d\xe2\x99\x82\xef\xb8\x8f 它认为它知道网络是什么样的。文件系统是什么样子的。…………

\n

而且,它可以这样思考,因为它所看到的一切都不会告诉它其他的情况。

\n

……但是,它所看到的一切实际上都不是物理真相。

\n

“容器化”使我们能够以比“虚拟化”低得多的成本实现基本的技术要求\xe2\x80\x93完全隔离\xe2\x80\x93。正在运行的进程会看到它们需要看到的内容,因此“它们不需要更明智”。同时,了解真实情况的主机操作系统可以非常有效地支持它们:它只需要维持幻觉即可。非常昂贵的“虚拟机”软件层完全消失了。实际存在的唯一“操作系统”是主机。

\n


vik*_*pat 13

根据我的理解,图像是在父图像的分层架构中构建的。所以我们有一个父图像,然后这个图像的变化比父图像多一层。如果您看到图像的 dockerfile,您可以看到类似这样的内容

FROM node:6.11.5
Run Code Online (Sandbox Code Playgroud)

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

如果您检查父图像的 dockerfile,您会发现它们位于层次结构中的某个位置,遵循base image

这个基本映像基本上是一个没有内核的操作系统,但只有基于不同 linux 发行版(例如,centos、debian)的用户空间软件。所以所有的图像都使用主机操作系统内核。因此,您不能在 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/

如果我错了,请纠正我。


n2o*_*n2o 6

大多数镜像都基于一个发行版,你可以在他们的 Dockerfiles 中看到它。除了分发图像本身。它们有一个不同的基础镜像,称为scratch

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

他们的 Dockerfiles 被引用,你可以通过点击它们来查看它们,例如第一个标签“2.2”指的是这个文件。Dockerfile 中的第一行FROM debian:jessie显示,它基于 Debian 映像。

它被广泛用于使用带有后缀的分隔标签-alpine来表示使用了alpine linux,这是一个比 Debian 映像小得多的基础映像。这会导致 httpd 映像的映像更小,因为基础映像要小得多。