图像是一个文件系统
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
分配终端。当您想直接与容器交互时,这是一个常见的标志。
进入后,您可以使用常用命令查看文件和目录列表。但是请注意,许多容器都被精简了。您并不总是拥有您习惯拥有的所有工具。像ls
Linux 这样的东西通常都在那里,但很多东西不会。
只需exit
当您完成环顾四周即可退出。
在进程运行时环顾四周
您还可以在 Apache 运行时查看容器。首先正常启动。
docker run -d apache:latest
这将返回一个容器 ID。您也可以从中获取 ID docker ps
。然后,您可以通过执行 shell 附加到具有该 ID 的容器。
docker exec -it <container_id> bash
现在您在 shell 中的容器中,但 Apache 正在其中运行。