0

我只是在发现 Docker——我发现了很多信息,但我似乎无法得到关于这个选项的直接答案。如果有人可以根据我对它的理解给我一个明确的解释,我将不胜感激。

我正在本地下载一个 docker 镜像 - 比如说 Microsoft 的默认镜像,microsoft/dotnet-samples:dotnetapp-nanoserver我不知道它下载到哪里?是否将其作为程序下载并安装在主机上,并带有控制容器的隔离脚本?下载量约为 1.3 gig,因为它包含 .Net Core

在另一个示例中,如果我下载 apache2 以作为 Web 服务器运行,它是否将其安装在主机系统上的默认路径中,但是我想使用的每个容器都使用它 - 或者每个容器是否都包含它的 apache2 隔离版本?

我问这个是因为我找不到模仿这些程序文件大小的文件。

我知道它们不是完整的 VM,但我在哪里可以找到与容器关联的文件?

我正在使用 Windows Server 2016 和 Mac,因为我想对容器进行一些试验。

4

1 回答 1

2

图像是一个文件系统

Docker 镜像是封装的文件系统。里面的软件和文件没有直接安装到您的系统上。

您可以像考虑 .zip 文件一样考虑 Docker 映像。您可以从某个地方下载 .zip 文件,它是一个文件。它里面可能包含一个文件,也可能是几十个文件,或者是目录和文件的嵌套树。但在您的磁盘上,它作为一个文件存在。

一个 Docker 映像是类似的(从概念上讲,至少……细节更复杂)。

图像存储

存储图像的位置因平台而异。在 Linux 系统上,它们通常位于/var/lib/docker. 我不知道它们在 Windows 上的存储位置,但这是一个或多或少不透明的存储。无论如何,在里面闲逛不会对你透露太多。

要查看您拥有的内容,您应该使用该docker images命令。它将显示您在本地存储的图像。

就像我之前说的,每个图像可能包含多个图层。默认情况下,该命令只会向您显示顶层,也就是您要关心的运行容器的层。从技术上讲,还有其他层,您可以使用docker images -a.

软件安装在哪里?

当您下载 Apache 映像时,您的系统上根本没有安装任何东西。下载并存储图像文件。隐藏在里面的是 Apache 以及 Apache 运行所需的一切,但 Apache 并没有安装到任何地方的 Windows 操作系统上。

当你想使用 Apache 时,你会运行一个容器。Docker 获取 Apache 映像,并使用它作为启动模板,创建一个正在运行的进程容器,其中 Apache 正在运行。这与您的操作系统是隔离的。Apache 仅在容器运行。

如果您从 Apache 映像运行第二个容器,那么您现在有两个完全独立的 Apache 实例在运行,每个实例都在各自独立的文件系统环境中。

我在哪里可以找到这些文件?

如果您只是想在容器文件系统中闲逛,您可以以交互模式启动容器,并运行一个 shell 而不是它通常运行的任何东西(如 Apache)。例如,如果你有一个 image apache:latest,你可以这样做:

docker run --rm -it apache:latest bash

这将运行 的实例apache:latest,但不会启动 Apache,而是会运行 bash shell 并将您放入其中。

--rm标志对于这种情况很方便。它告诉 Docker 在其进程退出时删除正在运行的容器。这样,对于像这样的“只看东西”容器,它会自行清理。

-it实际上是两个标志。-i为交互方式,-t分配终端。当您想直接与容器交互时,这是一个常见的标志。

进入后,您可以使用常用命令查看文件和目录列表。但是请注意,许多容器都被精简了。您并不总是拥有您习惯拥有的所有工具。像lsLinux 这样的东西通常都在那里,但很多东西不会。

只需exit当您完成环顾四周即可退出。

在进程运行时环顾四周

您还可以在 Apache 运行时查看容器。首先正常启动。

docker run -d apache:latest

这将返回一个容器 ID。您也可以从中获取 ID docker ps。然后,您可以通过执行 shell 附加到具有该 ID 的容器。

docker exec -it <container_id> bash

现在您在 shell 中的容器中,但 Apache 正在其中运行。

于 2017-01-12T21:43:40.933 回答