我正在尝试学习Docker以及那些涉及在线资料的内容。我开始知道有一个官方的图像中心,我们可以拉,并运行一个容器。
回购可在https://hub.docker.com/
处获得,是屏幕截图的一部分:
在此图中我们可以看到ubuntu,httpd,mysql(等等)的官方图片。
所有这些图片都有"最小的OS"他们跑的地方。例如,如果我们考虑httpd
图像,它是否具有运行它所需的操作系统?
答案 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://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 来执行某些操作。