是否所有码头图像都具有最小的操作系统?
我正在努力学习Docker和那个提到的在线资料。我开始知道,我们可以拉出正式的图像中心,并运行一个容器。是否所有码头图像都具有最小的操作系统?
回购可在https://hub.docker.com/
,屏幕截图的一部分:
在此图中,我们可以看到Ubuntu的,httpd的,MySQL的(等)的官方图片。
我的问题是:
做所有这些图像具有“最小OS”运行它们。例如,如果我们考虑httpd
图像,它是否具有运行所需的操作系统?
大多数图像都是基于一个发行版,因为您可以在它们的Docker文件中看到它。除了分配图像本身。它们具有不同的基本图像,称为scratch。
您可以查看他们是基于当您访问的DockerHub项目的网页上,图像例如https://hub.docker.com/_/httpd/
他们Dockerfiles被引用,您可以通过点击它们,例如审查这些第一个标签“2.2”是指this file。 Dockerfile中的第一行是FROM debian:jessie
,并显示它基于Debian镜像。
它被广泛用于分隔标签,其中后缀为-alpine
,用于指示使用alpine linux,这是一个比Debian图像小得多的基本图像。这导致httpd映像的图像更小,因为基本图像要小得多。
整个想法是,整个图像完全独立运行在硬件/虚拟化层。因此,(专业:)也不能被其他任何东西影响,这是图像的一部分。
每张图片都包含一个完整的操作系统。特殊的码头使操作系统的几个兆字节来:例如linux Alpine这是一个8兆字节的操作系统!
但是更大的操作系统,比如ubuntu/windows,可能是几千兆字节。两者都有它们的优点,因为docker会将图像分层切分,所以当您使用两次基本图像(FROM命令,请参阅N20 Answers)时,您将只下载一次该图层。
较小的操作系统只需要下载几兆的专业版。但对于你想使用的每个(linux)库,你都必须下载&包括你自己。这个自定义图层然后只用于您自己的图像,因此不会在其他图像中重新使用,从而创建客户额外的下载层&兆字节人们将不得不下载以运行您的图像。
如果你想从任何图像您可以开始你的dockerfile:
FROM scratch
但是,这不建议,除非你真的知道你正在做的和/或你周围hobbying。
感谢您的回答。那么,图像总是会不可避免地具有最小的操作系统?我还不清楚:( – CuriousMind
)并非所有的图像都是相同的,例如:Bitnami的php-fpm:7.2.1-r0图像在15层中为253MB kreable/php70:45层中最新为1.21GB,如果它们确实具有相同的基本图像,实际分层以及在安装依赖项后自行清理的方式,将会影响最终的图像大小。它是重用性(但可能更大层次)和极简主义(但是可能不能重复使用以保证额外的工作)。 –
你应该看看官方的Docker文档:https://docs.docker.com/get-started/ –
你需要的程序反过来需要库等。这些来自docker镜像中的文件,并在需要时调用。 Docker提供他们谈论的内核。对于一个Java Docker机器而言,除了JVM及其所需的库之外,您应该可以相处无忧。 –
这是否意味着我们可以没有任何操作系统的图像? – CuriousMind