首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在带有WSL2的Desktop for windows 10中,Docker容器位于何处& Linux容器如何运行java应用程序,而不是windows nanoserver?

在带有WSL2的Desktop for windows 10中,Docker容器位于何处& Linux容器如何运行java应用程序,而不是windows nanoserver?
EN

Stack Overflow用户
提问于 2021-05-10 20:27:54
回答 3查看 1.6K关注 0票数 2

我有Windows10EnterpriseVersion,我安装了Desktop,启用了WSL2后端,并下载并安装了Linux内核更新包.

我正在学习Docker,我对Docker在幕后的工作方式有一些疑问。

  • 我用WSL2绘制了windows上Docker的基本架构图,对吗?
  • 每当我们创建一个新的Linux容器时,它都是在WSL2提供的同一个轻量级实用程序VM中创建的?
  • 如果我们创建一个windows容器,它是在windows os上创建的吗?
  • 这些容器可以在需要时访问窗口和Linux内核吗?就像在Linux container中运行java应用程序一样,它需要windows内核,对吗?

  1. 因此,默认情况下,运行Linux容器,什么时候需要windows容器?我可以通过使用openjdk:8来封装一个java应用程序,但是我不能在运行Linux容器时提取windows nanoserver映像,只有切换到容器时才能工作。这里发生什么事情?这是否意味着openjdk:8映像是Linux映像(我不知道怎么说),而windows nanoserver是windows映像?
  2. :Linux容器如何运行我的java应用程序?它一定需要windows内核,对吗?
  3. 如果码头容器驻留在由WSL2创建的轻量级实用程序VM中,它可以访问它附带的Linux内核和WindowsKernel-吗?

我有默认的Linux container模式,我尝试了这两个命令。

  • docker run -platform=linux -d ubuntu /bin/sh -c“尽管正确;做回显你好世界;睡眠1;完成
  • docker拉mcr.microsoft.com/windows/nanoserver:1903

第一个为第二个工作,我得到了以下错误。

1903: Pulling from windows/nanoserver no matching manifest for Linux/amd64 in the manifest list entries

但是当我切换到windows containers时,它就能工作了。

  1. 那么,我在openjdk上的java应用程序:8映像和windows nanoserver有什么区别呢?
  2. 这些不需要运行windows内核吗?
  3. 那么,java如何在Linux容器上运行呢?

编辑:-需要对此做更多的澄清-从评论部分复制问题。

  • 还有一点,容器不能同时访问WSL2中的窗口和Linux内核,对吗?毕竟,它们只是OS中的孤立空间,所以它们要么可以在windows中,要么可以在Linux中?如果我错了,请纠正我。Linux映像是以这样一种方式构建的,它可以运行我的java,而且java是一种跨平台语言,所以它可以在Linux内核上运行,这是一个概念吗?
  • 关于我在这里制作的架构图-容器(操作系统中带有应用程序文件的独立进程),如果是Linux容器,所有这些容器(多个容器)都运行在同一个WSL2 VM上,对吗?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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映像。

我希望这有帮助,这里有一些额外的提示,从你的问题,供你考虑。

  1. 当映像与OS的类型相同时,图像的性能总是最好的。这是因为docker将使用主机的资源,并且当主机和容器是相同的os时,性能会更好。
  2. 使用最适合于目的的图像。不要仅仅为了运行java应用程序而使用整个os映像。而是使用java映像。这适用于广泛的框架和语言。

阅读,这是信用文章,如果你想读更多。

票数 4
EN

Stack Overflow用户

发布于 2022-09-12 16:56:44

这张图不完全正确。Windows和承载WSL2 KVM的轻量级VM都位于超级V管理程序之上。换句话说,WSL2利用超级V。(另一种选择是只使用Hyper,但使用WSL2更无缝。)WSL2使用停靠桌面作为主要引导虚拟机,并使用停靠桌面数据存储图像和容器数据。9p网络协议用于无缝地访问主机到客户和客户对主机的文件:

topology.png

通过这种方式,可以从Windows和安装在WSL2下的发行版(如Ubuntu等)中运行停靠命令。在这两种情况下,容器都是在Linux下运行的。这种架构的一个基本原理是Linux不能安装在Hyper上,也不能安装在WSL2 Linux中。

票数 0
EN

Stack Overflow用户

发布于 2022-11-29 11:02:23

Hi,

在实践中,有两种很好的用例/管理程序类型:

( a)Hyper-V是管理程序(控制containers=VMs的软件),它是-1型,因此它直接在machine=PC=hardware上工作(裸金属):

  • Hyper(hypervisor type-1) <->PC机

在第一种类型中,Hypervisor直接控制硬件(它避免使用Host,因为该控件来自机器的BIOS),这意味着不使用Host,但并不意味着Host不存在!

b)Virtual (VB)是2型管理程序(重型软件)。因此VB通过主机操作系统(Host)与机器一起工作:

  • VB(hypervisor type2) <-->主机-OS<->PC机

因此,在最后一种情况下,硬件(PC机)的控制是很重的,因为对machine=PC=hardware的控制是通过补充或太部分=组件(即主机-OS)来实现的。

还需要知道,containers=VMs(不管类型1或2)都有每个OS一个,但是它被命名为OS-来宾(Fr)。邀请)。因此,在这两种情况下(类型1和类型2),Hypervisor都充当容器/VM的后端(它们是前端的)。

有关详细信息,请参阅本教程/文章:

PS:一个虚拟机(VM)可以控制许多容器,就像在图像中一样。

谢谢

或者使用此google图像搜索(前3幅图像)

在这个文章中,还可以解释来自VM及其隔离容器的通信。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67477293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档