2017-10-12 149 views
1

我正在努力学习Docker和那个提到的在线资料。我开始知道,我们可以拉出正式的图像中心,并运行一个容器。是否所有码头图像都具有最小的操作系统?

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

enter image description here

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

我的问题是:

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

+0

你应该看看官方的Docker文档:https://docs.docker.com/get-started/ –

+0

你需要的程序反过来需要库等。这些来自docker镜像中的文件,并在需要时调用。 Docker提供他们谈论的内核。对于一个Java Docker机器而言,除了JVM及其所需的库之外,您应该可以相处无忧。 –

+0

这是否意味着我们可以没有任何操作系统的图像? – CuriousMind

回答

2

大多数图像都是基于一个发行版,因为您可以在它们的Docker文件中看到它。除了分配图像本身。它们具有不同的基本图像,称为scratch

您可以查看他们是基于当您访问的DockerHub项目的网页上,图像例如https://hub.docker.com/_/httpd/

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

它被广泛用于分隔标签,其中后缀为-alpine,用于指示使用alpine linux,这是一个比Debian图像小得多的基本图像。这导致httpd映像的图像更小,因为基本图像要小得多。

1

整个想法是,整个图像完全独立运行在硬件/虚拟化层。因此,(专业:)也不能被其他任何东西影响,这是图像的一部分。

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

但是更大的操作系统,比如ubuntu/windows,可能是几千兆字节。两者都有它们的优点,因为docker会将图像分层切分,所以当您使用两次基本图像(FROM命令,请参阅N20 Answers)时,您将只下载一次该图层。

较小的操作系统只需要下载几兆的专业版。但对于你想使用的每个(linux)库,你都必须下载&包括你自己。这个自定义图层然后只用于您自己的图像,因此不会在其他图像中重新使用,从而创建客户额外的下载层&兆字节人们将不得不下载以运行您的图像。

如果你想从任何图像您可以开始你的dockerfile:

FROM scratch 

但是,这不建议,除非你真的知道你正在做的和/或你周围hobbying。

+0

感谢您的回答。那么,图像总是会不可避免地具有最小的操作系统?我还不清楚:( – CuriousMind

+1

)并非所有的图像都是相同的,例如:Bitnami的php-fpm:7.2.1-r0图像在15层中为253MB kreable/php70:45层中最新为1.21GB,如果它们确实具有相同的基本图像,实际分层以及在安装依赖项后自行清理的方式,将会影响最终的图像大小。它是重用性(但可能更大层次)和极简主义(但是可能不能重复使用以保证额外的工作)。 –

相关问题