在带有 WSL2 的 windows 10 的 Docker 桌面中,docker 容器存在于何处以及 Linux 容器如何 运行 一个 java 应用程序,但不是windows 纳米服务器?
In Docker Desktop for windows 10 with WSL2, where does docker containers live & how Linux containers can run a java app, but not windows nanoserver?
我有 Windows 10 企业版,我安装了 Docker 桌面版,启用了 WSL2 后端,并下载并安装了 Linux 内核更新包。
我正在学习Docker,我对Docker如何在幕后工作有一些疑问。
- 我在windows上画了一个Docker的基本架构图
WSL2,这样对吗?
- 每当我们创建一个新的 Linux 容器时,它都会在提供的同一个轻量级实用程序 VM 中创建
通过 WSL2?
- 如果我们创建一个 windows 容器,它会在 windows os?
上创建
- 这些容器可以同时访问 windows 和 Linux 内核吗
必需的?就像 运行 在
Linux container
中安装 java 应用程序时,它需要 windows 内核,对吗?
- 所以,默认docker运行个Linux个容器,我们什么时候需要windows个容器?我可以使用容器化 java 应用程序
openjdk:8,但是我无法拉取 windows nanos 服务器镜像
运行 Linux 容器,只有当我切换到 Windows 时它才有效
容器。这里发生了什么?这是否意味着 openjdk:8 图像是 Linux 图像(我不知道怎么说),而 windows nanoserver 是 windows 图像?
- Linux 容器如何 运行 我的 java 应用程序?它必须需要
windows内核,对吧?
- 如果 docker 容器驻留在轻量级实用程序 VM 中
由 WSL2 创建,它可以访问它发布的 Linux 内核吗
与 Windows 内核?
我有默认的Linux container
模式,我试过这两个
命令。
- docker 运行 --platform=linux -d ubuntu /bin/sh -c "while true; do echo
你好世界;睡觉 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
时它起作用了。
- 那么我的 java 应用在 openjdk:8 图像上和 windows nanos 服务器有什么区别?
- 这些不需要 windows 内核到 运行 吗?
- java 东西 运行 在 Linux 容器上运行如何?
编辑:- 需要对此进行更多说明-
复制评论区的问题。
还有一件事,容器不会在 WSL2 中同时访问 windows 和 Linux 内核,对吧?毕竟它们只是 OS 中的孤立空间,所以它们可以在 windows 或 Linux 中?如果我错了,请纠正我。 Linux 图像的构建方式使其具有 运行 我的 java 的一切,并且 java 是一种 cross 平台语言,因此它可以运行 on Linux kernel,是这个概念吗?
关于我在这里制作的架构图 - 容器(带有应用程序文件的操作系统中的隔离进程),如果是 Linux 个容器(多个容器) 运行s 在同一个 WSL2 VM 上,对吗?
首先,问得好。
我希望我能像possible一样回答得最好。
So, by default docker runs Linux containers, when do we need windows containers?
您不需要 windows 容器。您应该始终考虑您的应用程序需要什么。例如,如果您正在开发 java 应用程序,您将拉取 java 图像而不是整个 host OS。我唯一一次提取 windows 图像是在我 docker 化了一个只能在 windows 上 运行 的 ASP.NET 应用程序时。
How Linux Containers can run my java application? It must need the windows kernel, right?
在 docker 的上下文中:
Docker for Windows allows you to simulate running Linux containers on Windows, but under the hood a Linux VM is created, so still Linux containers are running on Linux, and Windows containers are running on Windows.
if the docker containers reside within the lightweight utility VM created by WSL2, can it access both the Linux kernel that it ships with and the Windows Kernel?
容器正在使用底层操作系统资源和驱动程序,因此 Windows 容器只能在 Windows 上 运行,而 Linux 容器可以 运行仅在 Linux 上。 Docker for Windows 允许您在 Windows 上模拟 运行ning Linux 容器,但在引擎盖下创建了一个 Linux VM,所以仍然Linux 个容器 运行 正在 Linux,Windows 个容器 运行 正在 Windows。
So what is the difference between my java app on openjdk:8 image and windows nanoserver?
openJdk 映像和 windows nano 服务器核心的区别在于它们使用的基础映像。 openJdk 可能使用一些非常简单的 unix os 作为基础,而 nanos 服务器是整个 os,即 windows.
Do these not require windows kernel to run?
The openjdk image does not require windows to run as it is built from linux. Docker for windows will use the WsL to run. The nanoserver will only run on windows (as windows images can only run on windows).
How is the java thing running on Linux containers then?
I understand this question to be "How does the openjdk image run on linux and windows?"
如果是这样,因为它使用 linux os 作为基础图像,它可以在 linux 上默认 运行。但是因为WsL2的存在,所以创建了一个VM,在windows中模拟了一个linuxOS。这就是为什么我们可以 运行 windows 图片和 Docker 上的 linux 图片用于 windows.
希望对您有所帮助,这里有一些问题的额外提示供您考虑。
- 当图像与 OS 类型相同时,图像将始终表现最佳。这是因为docker会利用host的资源,当host和container相同os.
时性能会更好
- 使用最适合 purose 的图像。不要将整个 os 图像仅用于 运行 一个 java 应用程序。而是使用 java 图像。这适用于范围广泛的框架和语言。
阅读如果您想阅读更多内容,这是致谢文章。
我有 Windows 10 企业版,我安装了 Docker 桌面版,启用了 WSL2 后端,并下载并安装了 Linux 内核更新包。
我正在学习Docker,我对Docker如何在幕后工作有一些疑问。
- 我在windows上画了一个Docker的基本架构图 WSL2,这样对吗?
- 每当我们创建一个新的 Linux 容器时,它都会在提供的同一个轻量级实用程序 VM 中创建 通过 WSL2?
- 如果我们创建一个 windows 容器,它会在 windows os? 上创建
- 这些容器可以同时访问 windows 和 Linux 内核吗
必需的?就像 运行 在
Linux container
中安装 java 应用程序时,它需要 windows 内核,对吗?
- 所以,默认docker运行个Linux个容器,我们什么时候需要windows个容器?我可以使用容器化 java 应用程序 openjdk:8,但是我无法拉取 windows nanos 服务器镜像 运行 Linux 容器,只有当我切换到 Windows 时它才有效 容器。这里发生了什么?这是否意味着 openjdk:8 图像是 Linux 图像(我不知道怎么说),而 windows nanoserver 是 windows 图像?
- Linux 容器如何 运行 我的 java 应用程序?它必须需要 windows内核,对吧?
- 如果 docker 容器驻留在轻量级实用程序 VM 中 由 WSL2 创建,它可以访问它发布的 Linux 内核吗 与 Windows 内核?
我有默认的Linux container
模式,我试过这两个
命令。
- docker 运行 --platform=linux -d ubuntu /bin/sh -c "while true; do echo 你好世界;睡觉 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
时它起作用了。
- 那么我的 java 应用在 openjdk:8 图像上和 windows nanos 服务器有什么区别?
- 这些不需要 windows 内核到 运行 吗?
- java 东西 运行 在 Linux 容器上运行如何?
编辑:- 需要对此进行更多说明- 复制评论区的问题。
还有一件事,容器不会在 WSL2 中同时访问 windows 和 Linux 内核,对吧?毕竟它们只是 OS 中的孤立空间,所以它们可以在 windows 或 Linux 中?如果我错了,请纠正我。 Linux 图像的构建方式使其具有 运行 我的 java 的一切,并且 java 是一种 cross 平台语言,因此它可以运行 on Linux kernel,是这个概念吗?
关于我在这里制作的架构图 - 容器(带有应用程序文件的操作系统中的隔离进程),如果是 Linux 个容器(多个容器) 运行s 在同一个 WSL2 VM 上,对吗?
首先,问得好。
我希望我能像possible一样回答得最好。
So, by default docker runs Linux containers, when do we need windows containers?
您不需要 windows 容器。您应该始终考虑您的应用程序需要什么。例如,如果您正在开发 java 应用程序,您将拉取 java 图像而不是整个 host OS。我唯一一次提取 windows 图像是在我 docker 化了一个只能在 windows 上 运行 的 ASP.NET 应用程序时。
How Linux Containers can run my java application? It must need the windows kernel, right?
在 docker 的上下文中:
Docker for Windows allows you to simulate running Linux containers on Windows, but under the hood a Linux VM is created, so still Linux containers are running on Linux, and Windows containers are running on Windows.
if the docker containers reside within the lightweight utility VM created by WSL2, can it access both the Linux kernel that it ships with and the Windows Kernel?
容器正在使用底层操作系统资源和驱动程序,因此 Windows 容器只能在 Windows 上 运行,而 Linux 容器可以 运行仅在 Linux 上。 Docker for Windows 允许您在 Windows 上模拟 运行ning Linux 容器,但在引擎盖下创建了一个 Linux VM,所以仍然Linux 个容器 运行 正在 Linux,Windows 个容器 运行 正在 Windows。
So what is the difference between my java app on openjdk:8 image and windows nanoserver?
openJdk 映像和 windows nano 服务器核心的区别在于它们使用的基础映像。 openJdk 可能使用一些非常简单的 unix os 作为基础,而 nanos 服务器是整个 os,即 windows.
Do these not require windows kernel to run? The openjdk image does not require windows to run as it is built from linux. Docker for windows will use the WsL to run. The nanoserver will only run on windows (as windows images can only run on windows).
How is the java thing running on Linux containers then? I understand this question to be "How does the openjdk image run on linux and windows?"
如果是这样,因为它使用 linux os 作为基础图像,它可以在 linux 上默认 运行。但是因为WsL2的存在,所以创建了一个VM,在windows中模拟了一个linuxOS。这就是为什么我们可以 运行 windows 图片和 Docker 上的 linux 图片用于 windows.
希望对您有所帮助,这里有一些问题的额外提示供您考虑。
- 当图像与 OS 类型相同时,图像将始终表现最佳。这是因为docker会利用host的资源,当host和container相同os. 时性能会更好
- 使用最适合 purose 的图像。不要将整个 os 图像仅用于 运行 一个 java 应用程序。而是使用 java 图像。这适用于范围广泛的框架和语言。
阅读