Docker存储 - 获得Layman的答案

时间:2017-01-12 21:13:38

标签: docker storage dockerfile windows-server-2016

我刚刚发现了Docker - 我发现了很多信息,但我似乎无法对这个选项做出直接的回答。如果有人能根据我的理解给我一个明确的解释,我到目前为止我会对它有所了解。

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

在另一个例子中,如果我下载apache2作为Web服务器运行,它是否将它安装在主机系统的默认路径中,但我想要使用的每个容器都可以使用它 - 或者每个容器都包含它#39 ; s孤立版的apache2?

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

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

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

1 个答案:

答案 0 :(得分:2)

图像是文件系统

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

您可以将Docker镜像视为您对.zip文件的看法。您可以从某个地方下载.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)。例如,如果您有图像apache:latest,则可以执行以下操作:

docker run --rm -it apache:latest bash

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

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

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

进入内部后,您可以使用常用命令查看文件和目录列表。但请注意,许多容器都是精简的。您并不总是拥有您曾经拥有的所有工具。像Linux中ls这样的东西通常都存在,但很多东西都不会出现。

当你完成环顾四周退出时,只需exit

在流程运行期间环顾四周

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

docker run -d apache:latest

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

docker exec -it <container_id> bash

现在你在shell中的容器中,但是Apache正在运行。