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正在运行。