Docker 存储 - 外行人的答案

Docker Storage - Getting a Layman's answer

我刚刚发现 Docker - 我找到了很多信息,但我似乎无法得到关于此选项的直接答案。如果有人能根据我目前的理解给我一个明确的解释,我将不胜感激。

我正在本地下载一个 docker 图像 - 比如说来自 Microsoft 的默认图像,使用 microsoft/dotnet-samples:dotnetapp-nanoserver 我不知道它下载到哪里?这是作为程序下载并安装在主机上的,带有控制容器的独立脚本吗?下载大约 1.3 gig,因为它包含 .Net Core

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

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

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

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

一个图像就是一个文件系统

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

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

一个Docker图像是相似的(概念上,至少...细节更复杂)。

图像存储

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

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

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

查看所有图层

软件安装在哪里?

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

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

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

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

如果你只是想在容器文件系统中四处闲逛,你可以在交互模式下启动容器,然后 运行 一个 shell 而不是通常的 运行s (像阿帕奇)。例如,如果你有一张图片 apache:latest,你可以这样做:

docker run --rm -it apache:latest bash

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

--rm 标志在这种情况下很方便。它告诉 Docker 在其进程退出时删除 运行ning 容器。这样,对于像这样的 "just looking at something" 容器,它会自行清理。

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

进入后,您可以使用常用命令查看文件和目录列表。但是请注意,许多容器是 stripped-down。您并不总是拥有您习惯拥有的所有工具。 Linux 中的 ls 之类的东西通常会有,但很多东西不会。

环顾四周后 exit 即可退出。

在进程 运行ning

时环顾四周

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

docker run -d apache:latest

这将 return 容器 ID。您还可以从 docker ps 获取 ID。然后,您可以通过执行 shell.

附加到具有该 ID 的容器
docker exec -it <container_id> bash

现在您在 shell 的容器中,但 Apache 在那里 运行ning。