我有Windows 10企业版,我已经安装了Docker桌面,启用了WSL2后端,并下载和安装了Linux内核更新包。
我正在学习Docker,我对Docker在幕后的工作方式有些怀疑。
Linux容器中运行java应用程序时,它需要windows内核,对吗
那么,默认情况下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容器
时,它就工作了。
那么我在openjdk上的java应用程序: 8图像和windows nanoserver有什么区别呢?
- 这些不需要运行windows内核吗?
- 那么java是如何在Linux容器上运行的呢?
编辑:-需要更多澄清-从评论部分复制问题。
>
还有一件事,容器不能在WSL2中同时访问windows和Linux内核,对吗?毕竟,它们只是操作系统中的隔离空间,所以它们可以在windows或Linux中使用?如果我错了,请纠正我。Linux映像是以这样一种方式构建的,它拥有运行我的java的一切,而java是一种跨平台语言,因此它可以在Linux内核上运行,这就是概念吗?
关于我在这里制作的架构图——容器(操作系统中带有应用程序文件的独立进程),对于Linux容器,所有容器(多个容器)都运行在同一个WSL2 VM上,对吗?
首先,好问题。
我希望我能尽可能地回答它。
那么,默认情况下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镜像。
我希望这有所帮助,这里有一些额外的问题提示供你考虑。
如果你想阅读更多,请阅读这篇文章。
问题内容: 有一个列出图像的命令,但是似乎没有对应的。 除了扎根并调查那里似乎没有办法。我想念什么吗?那是不应该做的事情吗? 问题答案: 要仅显示 正在运行的容器,请 使用给定命令: 要显示 所有容器,请 使用给定命令: 要显示 最新创建的容器 (包括所有状态),请使用给定命令: 要显示 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版,应该是这样的: 对于早期版本,它将是: 从手册页:
我有一个容器,我想停止,但当我做一个它挂起,永远不会停止它。 我试过正常的和