当前位置: 首页 > 知识库问答 >
问题:

在Docker Desktop for windows 10 with WSL2中,Docker容器位于何处

白宏放
2023-03-14

我有Windows 10企业版,我已经安装了Docker桌面,启用了WSL2后端,并下载和安装了Linux内核更新包。

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

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

  1. 那么,默认情况下docker运行Linux容器,我们什么时候需要windows容器?我可以使用openjdk:8对java应用程序进行容器化,但在运行Linux容器时,我无法提取windows nanoserver映像,它只能在切换到windows容器时工作。这是怎么回事?这是否意味着openjdk:8映像是Linux映像(我不知道怎么说),而windows nanoserver是windows映像?

我使用默认的Linux容器模式,并尝试了这两个命令。

  • docker run--Platform=linux-d ubuntu /bin/sh-c"而true; do echo Hello world;睡眠1;完成"
  • docker拉mcr.microsoft.com/windows/nanoserver: 1903

第一个对第二个有效,我得到以下错误。

1903:从windows/nanoserver中提取清单列表条目中Linux /amd64没有匹配的清单

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

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

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

>

  • 还有一件事,容器不能在WSL2中同时访问windows和Linux内核,对吗?毕竟,它们只是操作系统中的隔离空间,所以它们可以在windows或Linux中使用?如果我错了,请纠正我。Linux映像是以这样一种方式构建的,它拥有运行我的java的一切,而java是一种跨平台语言,因此它可以在Linux内核上运行,这就是概念吗?

    关于我在这里制作的架构图——容器(操作系统中带有应用程序文件的独立进程),对于Linux容器,所有容器(多个容器)都运行在同一个WSL2 VM上,对吗?


  • 共有1个答案

    梁浩涆
    2023-03-14

    首先,好问题。

    我希望我能尽可能地回答它。

    那么,默认情况下docker运行Linux容器,我们什么时候需要windows容器?

    您不需要windows容器。你应该总是考虑你的应用程序需要什么。例如,如果您正在开发一个java应用程序,那么您将提取一个java映像,而不是整个主机操作系统。我唯一一次拉取windows映像是当我停靠只能在windows上运行的ASP.NET应用程序时。

    Linux容器如何运行我的java应用程序?它一定需要windows内核,对吗?

    在docker的上下文中:

    Docker for Windows允许您模拟在Windows上运行Linux容器,但在幕后创建了LinuxVM,因此仍然Linux容器在Linux上运行,而Windows容器在Windows上运行。

    如果docker容器位于WSL2创建的轻量级实用程序VM中,它是否可以访问随附的Linux内核和Windows内核?

    容器正在使用基础操作系统资源和驱动程序,因此Windows容器只能在Windows上运行,Linux容器只能在Linux上运行。Docker for Windows允许您模拟在Windows上运行Linux容器,但在引擎盖下创建了LinuxVM,因此仍然Linux容器在Linux上运行,而Windows容器在Windows上运行。

    那么我在openjdk: 8 Image上的java应用程序和windows nanoserver有什么区别呢?

    openJdk映像和windows nano server的核心区别在于它们所使用的基本映像。openJdk可能使用一些非常简单的unix操作系统作为基础,而nanoserver是一个完整的操作系统,即windows。

    这些不需要运行windows内核吗?openjdk映像不需要windows来运行,因为它是从linux构建的。windows的Docker将使用WsL来运行。nanoserver将只在窗口上运行(因为窗口图像只能在窗口上运行)。

    那么java是如何在Linux容器上运行的呢?我理解这个问题是“openjdk映像如何在linux和windows上运行?”

    如果是这样,因为它使用linux操作系统作为它的基本映像,所以它可以在linux上默认运行。但是因为WsL2存在,所以在windows中创建并模拟Linux操作系统的VM。这就是为什么我们可以在Docker for windows上运行windows镜像和linux镜像

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

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

    如果你想阅读更多,请阅读这篇文章。

     类似资料:
    • 问题内容: 有一个列出图像的命令,但是似乎没有对应的。 除了扎根并调查那里似乎没有办法。我想念什么吗?那是不应该做的事情吗? 问题答案: 要仅显示 正在运行的容器,请 使用给定命令: 要显示 所有容器,请 使用给定命令: 要显示 最新创建的容器 (包括所有状态),请使用给定命令: 要显示 n个最后创建的容器 (包括所有状态),请使用给定命令: 要显示 总文件大小,请 使用给定命令: 上面显示的内容

    • 我正在写一个go应用程序,它被dockerized在两个容器:db和app。 当启动容器'docker-compose up‘时,我看到消息:dial tcp:lookup dbpgsql on 127.0.0.11:53:没有这样的主机

    • 我从Docker开始,但是我不知道如何配置PyCharm来使用位于容器中的python解释器。 这是很容易设置与流浪汉,但显然没有正式的方式来做这件事与多克尚未。 我应该用暴露的ssh端口准备特殊的Docker映像吗?如何更容易做到这一点?

    • 问题内容: 当我运行docker时,下载的docker映像(似乎是)存储在某个地方。 由于该目录上的磁盘空间有限,因此我要同时将docker设置到多台机器上;有没有办法将此默认位置更改为ie ? 问题答案: 您可以使用option和您选择的目录来启动Docker守护程序。这将为Docker设置适当的运行时。 对于1.8版,应该是这样的: 对于早期版本,它将是: 从手册页:

    • 我有一个容器,我想停止,但当我做一个它挂起,永远不会停止它。 我试过正常的和