我有Windows10EnterpriseVersion,我安装了Desktop,启用了WSL2后端,并下载并安装了Linux内核更新包.
我正在学习Docker,我对Docker在幕后的工作方式有一些疑问。
Linux container
中运行java应用程序一样,它需要windows内核,对吗?
我有默认的Linux container
模式,我尝试了这两个命令。
第一个为第二个工作,我得到了以下错误。
1903: Pulling from windows/nanoserver no matching manifest for Linux/amd64 in the manifest list entries
但是当我切换到windows containers
时,它就能工作了。
编辑:-需要对此做更多的澄清-从评论部分复制问题。
发布于 2021-05-10 21:26:48
第一,好问题。
我希望我能尽可能最好地回答这个问题。
因此,默认情况下,docker运行Linux容器,我们什么时候需要windows容器?
你不需要窗户容器。您应该始终考虑您的应用程序需要什么。例如,如果您正在开发一个java应用程序,您将提取一个java映像,而不是整个主机操作系统。我唯一一次提取窗口映像是在我对只能在windows上运行的ASP.NET应用程序进行对接时。
Linux容器如何运行我的java应用程序?它一定需要windows内核,对吗?
在码头方面:
允许您模拟在Windows上运行Linux容器,但是在幕后创建了一个Linux,所以Linux容器仍然运行在Linux上,Windows容器在Windows上运行。如果坞容器驻留在由WSL2创建的轻量级实用程序VM中,那么它能同时访问它附带的Linux内核和Windows吗?
容器使用底层操作系统资源和驱动程序,因此Windows容器只能在Windows上运行,Linux容器只能在Linux上运行。允许您模拟在Windows上运行Linux容器,但是在幕后创建了一个Linux,所以Linux容器仍然运行在Linux上,Windows容器在Windows上运行。
那么,我在openjdk上的java应用程序:8映像和windows nanoserver有什么区别呢?
openJdk映像和windows服务器核心的差异是它们使用的最基本的映像。openJdk可能正在使用一些非常裸露的unix作为基础,其中的nanoserver是一个完整的操作系统,也就是windows。
这些不需要运行windows内核吗?openjdk映像不需要窗口来运行,因为它是从linux构建的。用于windows的Docker将使用WsL运行。nanoserver将只在windows上运行(因为windows映像只能在windows上运行)。那么,java如何在Linux容器上运行呢?我理解这个问题是“openjdk映像是如何在linux和windows上运行的?”
如果是这样的话,因为它使用linux操作系统作为它的基本映像,所以默认情况下它可以在linux上运行。但是由于存在WsL2,所以创建一个VM并在windows中模拟linux。这就是为什么我们可以在上运行windows映像和linux映像。
我希望这有帮助,这里有一些额外的提示,从你的问题,供你考虑。
阅读这,这是信用文章,如果你想读更多。
发布于 2022-09-12 16:56:44
这张图不完全正确。Windows和承载WSL2 KVM的轻量级VM都位于超级V管理程序之上。换句话说,WSL2利用超级V。(另一种选择是只使用Hyper,但使用WSL2更无缝。)WSL2使用停靠桌面作为主要引导虚拟机,并使用停靠桌面数据存储图像和容器数据。9p网络协议用于无缝地访问主机到客户和客户对主机的文件:
通过这种方式,可以从Windows和安装在WSL2下的发行版(如Ubuntu等)中运行停靠命令。在这两种情况下,容器都是在Linux下运行的。这种架构的一个基本原理是Linux不能安装在Hyper上,也不能安装在WSL2 Linux中。
发布于 2022-11-29 11:02:23
Hi,
在实践中,有两种很好的用例/管理程序类型:
( a)Hyper-V是管理程序(控制containers=VMs的软件),它是-1型,因此它直接在machine=PC=hardware上工作(裸金属):
在第一种类型中,Hypervisor直接控制硬件(它避免使用Host,因为该控件来自机器的BIOS),这意味着不使用Host,但并不意味着Host不存在!
b)Virtual (VB)是2型管理程序(重型软件)。因此VB通过主机操作系统(Host)与机器一起工作:
因此,在最后一种情况下,硬件(PC机)的控制是很重的,因为对machine=PC=hardware的控制是通过补充或太部分=组件(即主机-OS)来实现的。
还需要知道,containers=VMs(不管类型1或2)都有每个OS一个,但是它被命名为OS-来宾(Fr)。邀请)。因此,在这两种情况下(类型1和类型2),Hypervisor都充当容器/VM的后端(它们是前端的)。
有关详细信息,请参阅本教程/文章:
PS:一个虚拟机(VM)可以控制许多容器,就像在图像中一样。
谢谢
或者使用此google图像搜索(前3幅图像)
在这个文章中,还可以解释来自VM及其隔离容器的通信。
https://stackoverflow.com/questions/67477293
复制相似问题