docker是否总是需要一个操作系统作为基本映像

docker是否总是需要一个操作系统作为基本映像,docker,dockerfile,Docker,Dockerfile,我听说docker在linux中不需要单独的操作系统,因为它与主机操作系统共享,但在hyper-v Windows中,它可以运行Windows操作系统,因为它可以在linux虚拟机上运行hyper-v,所以可以在其上运行linux软件 但是,我对dockerfile中的阶段感到困惑,所有指南都这样说: 来自ubuntu:18.04的 cp/usr/本地/bin 跑牌 CMD/usr/local/bin/youapp 我可以理解这一步,首先你需要一个操作系统,然后你部署你的应用程序;最后你运行你

我听说docker在linux中不需要单独的操作系统,因为它与主机操作系统共享,但在hyper-v Windows中,它可以运行Windows操作系统,因为它可以在linux虚拟机上运行hyper-v,所以可以在其上运行linux软件

但是,我对dockerfile中的
阶段感到困惑,所有指南都这样说:

来自ubuntu:18.04的

cp/usr/本地/bin
跑牌
CMD/usr/local/bin/youapp
我可以理解这一步,首先你需要一个操作系统,然后你部署你的应用程序;最后你运行你的应用程序或其他什么

但“从舞台开始”到底意味着什么

它总是需要一个操作系统吗?nginx docker映像中有操作系统吗

如果我想建立我自己的应用程序,我写它,我编译它,我运行它;但我自己的应用程序需要操作系统吗?如果没有,我应该在舞台上写些什么

我看到这张图片,上面说docker容器不需要操作系统,但是使用主机操作系统,现在docker构建总是需要一个操作系统
不,不是那样的。要使用DockerFile创建任何docker映像,需要从基本docker映像开始。基本docker映像可以是任何东西,比如空映像,在您的示例中的docker文件中,来自的部分说ubuntu,这意味着它假设ubuntu为基本映像。它并不总是需要一个操作系统作为基本映像

请点击此链接-
这将消除您对基本映像的疑虑。

主机上的容器共享(主机的)内核,但每个容器必须提供它所需的(操作系统的子集)

在Windows中,内核与操作系统的映射是1:1,但在Linux中,内核被捆绑到各种操作系统中:Debian、Ubuntu、Alpine、SuSE、CoreOS等

FROM
语句通常引用一个操作系统,但它不需要,而且通常没有必要(也不是一个好主意)将一个操作系统捆绑到一个容器中。容器应该只包含它需要的内容

NGINX映像使用Debian()

在某些情况下,容器进程在内核之外没有依赖关系。在这些情况下,可以使用特殊的
FROM:scratch
,不添加任何其他内容。这是一个空图像()。

现在我得到了答案

从阶段导入软件,但不导入带内核的操作系统

它只是为你的应用程序提供了一个平台,你在后台编写的ubuntu、debian、centos只是一个软件,真正的内核与它们没有关系


所以,如果您的应用程序可以独立运行,它必须像hello world一样,只是一个二进制软件包,不依赖任何其他库。但大多数情况下,您需要一个操作系统,因为它们有您需要的库。

不,来自
阶段的
没有为映像提供操作系统。内核始终由运行容器的主机系统提供。来自
阶段的
为新映像提供初始文件系统,即文件、目录、预装软件等。您还可以从头开始
,这就像一块白板

起始行不一定指向任何其他操作系统: 它可以是任何其他容器,也可以是从头开始的

主机中的容器共享内核,所以您可以认为它是利用主机内核的主进程

一般来说,人们认为HTTPD、NGINX等都在使用Debian作为容器操作系统,因为这个Debian操作系统非常薄,用于隔离,并且作为独立的服务器运行。
即使您可以创建一个HTTPD、NGINX,而无需使用任何操作系统和您自己版本的名称:-)

Docker与主机操作系统共享内核。操作系统不仅仅是内核,这能回答你的问题吗?谢谢你的回答,我认为docker的意思是部署,而不是编译,所以它总是需要一个操作系统,对吗?不,docker的平台类似于VM,可以像编译、部署什么都可以使用。