【发布时间】:2021-08-01 06:16:42
【问题描述】:
我有 Windows 10 企业版,我已经安装了 Docker Desktop,启用了 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 nanoserver 图像 运行 Linux 容器,它仅在我切换到 Windows 时才有效 容器。这里发生了什么?这是否意味着 openjdk:8 镜像是 Linux 镜像(我不知道怎么说),而 windows nanoserver 是 windows 镜像?
- Linux 容器如何运行我的 java 应用程序?它必须需要 windows内核对吧?
- 如果 docker 容器驻留在轻量级实用程序 VM 中 由 WSL2 创建,它可以访问它附带的 Linux 内核吗 和 Windows 内核?
我有默认的Linux container 模式,我尝试了这两个
命令。
- docker run --platform=linux -d ubuntu /bin/sh -c "while true; do echo 你好世界;睡觉1;完成”
- docker pull mcr.microsoft.com/windows/nanoserver:1903
第一个适用于第二个我收到以下错误。
1903: Pulling from windows/nanoserver no matching manifest for Linux/amd64 in the manifest list entries
但是当我切换到windows containers 时,它可以工作。
- 那么我在 openjdk:8 图像上的 java 应用程序和 windows nanoserver 之间有什么区别?
- 这些不需要 Windows 内核来运行吗?
- 那么 Java 是如何在 Linux 容器上运行的呢?
编辑:- 需要对此进行更多说明- 从评论部分复制问题。
-
还有一件事,容器不会在 WSL2 中同时访问 Windows 和 Linux 内核,对吧?毕竟它们只是操作系统中的孤立空间,所以它们可以在 Windows 或 Linux 中吗?如果我错了,请纠正我。 Linux 映像的构建方式使其拥有运行我的 java 的一切,并且由于 java 是一种跨平台语言,因此它可以在 Linux 内核上运行,这是这个概念吗?
-
关于我在这里制作的架构图——容器(操作系统中带有应用程序文件的隔离进程),如果是 Linux 容器,它们(多个容器)都运行在同一个 WSL2 虚拟机上,对吧?
【问题讨论】:
-
我已经编辑了问题,需要对最后一部分和架构图进行更多说明。
标签: linux windows docker containers docker-desktop