作为一个新手,我已经阅读了官方的Docker文档,并在此处进行了许多解释,教程,视频,但尚未得到我的问题的明确答案。如果docker容器必须使用底层主机操作系统内核,那么他们如何声称“在任何地方构建,发布和运行”?我的意思是,基于Linux的容器只能在基于Linux的主机操作系统机器上运行,类似于Windows容器。这是正确的,还是我完全错过了?我不确定是否有“基于linux的容器”和“基于Windows的容器”这样的东西。
我可以看到有人声称java应用程序可以在任何操作系统上运行,但是没有看到如何为docker容器做出相同的声明。
答案 0 :(得分:2)
简短回答:正确。所有容器共享相同的Linux内核。如果您依赖于内核特定功能,Docker不适合您。除此之外,还有基于Windows的图像,理论上你可以带任何主机内核,只要它满足这些人的要求:https://www.opencontainers.org/
答案 1 :(得分:2)
容器在同一台机器上将应用程序彼此隔离,但你是对的,它们都使用底层操作系统。如果您需要不同的操作系统在同一台计算机上运行不同的应用程序,则需要使用虚拟机。容器很好,因为你获得了在一个软件包中运行应用程序所需的一切,而且浪费的资源更少,因为你不会在那里投入大量的操作系统。
请注意,出于开发目的,在虚拟机中运行容器并不罕见,例如,您可以在PC / mac上运行linux vm,并轻松将您开发的容器移动到基于Linux的实际生产中。 / p>
在此处查看snappy常见问题解答说明:https://docs.docker.com/engine/faq/#how-much-does-engine-cost
答案 2 :(得分:1)
还没有karma / streetcred / rep发表评论,所以我正在写答案。
首先,我不明白为什么这个问题被如此严重地贬低,因为它是合法的,而且码头工作者并没有直接回答这个问题。
反正。
感谢您抽出时间来澄清一些困惑。因此,在上述MS容器链接中,例如,他们说创建一个Dockerfile,然后运行“docker build ...”。等什么“docker”应用程序正在运行?在Windows主机上?或者在Windows主机上创建的某些Linux(哪个版本/版本?)VM?如果“docker”在Linux VM上运行,那么它似乎能够绕过linux OS(在VM中)并访问底层的Windows操作系统?再说一遍,我假设“docker”是一个linux应用程序,并不是在Windows主机上运行的Windows端口。
在这种情况下,Docker将是一个本机Windows应用程序(或Windows端口),将IIS作为本机Windows应用程序运行。
这样想:Docker应用程序虚拟化文件系统,以便安装的每个软件最终都在这个虚拟文件系统上。内核没有虚拟化;所以,正如其他答案所说,如果你想将Linux开发环境转移到Windows机器,你需要
在你的pc / mac上运行linux vm
然后在该虚拟机上运行docker。
请参阅How is Docker different from a normal virtual machine?了解Docker de-confusion上的megathread。
另请参阅http://blog.vizuri.com/docker-for-windows-vs.-docker-on-windows-server,它解释了在Windows上运行Docker最令人困惑的部分。正如文章中详述的那样,您可以使用Windows上的Docker在Windows上运行Windows容器,或者您可以使用Docker for Windows在Windows上的Docker管理的Linux vm中运行Linux容器。 Mac也是如此;或者实际上,任何两个不兼容的内核。