Docker存储 – 获取外行的答案

我只是发现了Docker–我正在find这么多的信息,但是我似乎无法得到这个选项的直接答案。 如果有人能根据我的理解给我一个清楚的解释,我已经得到了它,将不胜感激。

我正在本地下载一个docker镜像 – 比如使用microsoft/dotnet-samples:dotnetapp-nanoserver来说说默认的镜像microsoft/dotnet-samples:dotnetapp-nanoserver我在这里下载到哪里了? 这是下载并作为一个程序在主机上安装,用隔离的脚本来控制容器? 下载约1.3演出,因为它包括.Net核心

在另一个例子中,如果我下载apache2作为web服务器运行,它是否将其安装在主机系统的默认path中,但是我想要使用的每个容器都可以使用 – 还是每个容器都包含它的独立版本的apache2?

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

我知道他们不是完整的VM,但我在哪里可以find与容器相关的文件?

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

一个图像是一个文件系统

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

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

Docker镜像是相似的(概念上,至less…细节更复杂)。

图像存储

存储图像的地方因平台而异。 在Linux系统上,通常在/var/lib/docker 。 我不知道他们在Windows上存储在哪里,但这是一个或多或less不透明的商店。 无论如何,在里面打个屁都不会给你太多的印象。

要看你有什么,你应该使用docker images命令。 它会显示你在本地存储的图像。

就像我刚才所说,每个图像可能由多个图层组成。 默认情况下,该命令将仅向您显示运行容器的顶层,这是您将要关心的。 从技术上讲,还有其他的层次,你可以看到他们所有的使用docker images -a

软件在哪里安装?

当你下载一个Apache映像时,根本就没有安装任何东西。 图像文件被下载并存储。 藏在里面的是Apache和Apache所需要的所有东西,但Apache并没有安装到你的Windows操作系统上。

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

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

我在哪里可以find这些文件?

如果你只是想在容器文件系统中寻找,你可以以交互模式启动容器,运行一个shell而不是通常运行的东西(比如Apache)。 例如,如果你有一个图像apache:latest ,你可以这样做:

 docker run --rm -it apache:latest bash 

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

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

这实际上是两个标志。 -i是交互模式, -t分配一个terminal。 当你想直接与容器交互时,这是一个通用的标志。

一旦进入,你可以使用通常的命令来查看文件和目录列表。 请注意,许多容器都是精简的,但是。 你并不总是拥有你习惯的所有工具。 Linux中的ls这样的东西通常都是存在的,但很多东西都不是。

exit时,只需exit即可。

在stream程运行时环顾四周

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

 docker run -d apache:latest 

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

 docker exec -it <container_id> bash 

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