Docker 映像存储在主机上的什么位置?

我设法在目录/var/lib/docker/containers containers 下找到了容器,但是找不到图像。

/var/lib/docker下的目录和文件是什么?

答案

/var/lib/docker目录的内容根据Docker 用于存储驱动程序而有所不同。

默认情况下,这将是aufs但根据您的内核支持,可以回落到overlayoverlay2btrfsdevicemapperzfs 。在大多数地方,这将是aufs但是RedHats 与devicemapper一起使用

您可以使用Docker 守护程序-s--storage-driver=选项手动设置存储驱动程序

  • /var/lib/docker/{driver-name}将包含特定于驱动程序的图像内容存储。
  • /var/lib/docker/graph/<id>现在仅在jsonlayersize文件中包含有关图像的元数据。

对于aufs

  • /var/lib/docker/aufs/diff/<id>具有图像的文件内容。
  • /var/lib/docker/repositories-aufs是一个包含本地图像信息的 JSON 文件。可以使用docker images命令查看。

对于devicemapper

  • /var/lib/docker/devicemapper/devicemapper/data存储映像
  • /var/lib/docker/devicemapper/devicemapper/metadata元数据
  • 请注意,这些文件是精简配置的 “稀疏” 文件,因此没有看起来那么大。

使用 Docker for Mac Application 时,容器似乎存储在位于以下位置的 VM 中:

~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2

更新 (由mmorin 提供 ):

截至 2019 年 1 月 15 日,似乎只有此文件:

~/Library/Containers/com.docker.docker/Data/vms/0/Docker.raw

其中包含 Docker Disk 及其中的所有映像和容器。

这是过去的做法,现在已经改变了。自 2019 年起忽略此答案

在 Mac OS X 或 Windows 的特殊情况下,使用 boot2docker,您的 Docker 映像存储在由 boot2docker 管理的 VirtualBox VM 中。

该虚拟机将存储在 VirtualBox 映像的常规位置:

OS X: ~/VirtualBox VMs/boot2docker-vm

Windows: %USERPROFILE%/VirtualBox VMs/boot2docker-vm

您可以通过运行来重置它(警告:这将破坏您到目前为止构建并下载的所有图像):

boot2docker down
boot2docker destroy
boot2docker init
boot2docker up

如果在构建 / 调试构建时没有大量有用的 --rm 选项的情况下保留了大量中间图像,则此功能特别有用,在此引用以供参考:使用:

docker build -t webapp --rm=true --force-rm=true .

代替:

docker build -t webapp .

实际上,Docker 映像存储在两个文件中,如以下命令所示

$ docker info

数据文件: /var/lib/docker/devicemapper/devicemapper/data

元数据文件: /var/lib/docker/devicemapper/devicemapper/metadata

在使用 Hyper-V 的新发布的 “Docker for Windows” 上,数据位于 Docker 虚拟硬盘中:

C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx

您也可以打开 “Hyper-V 管理器” 以访问 Docker / MobyLinuxVM。

图像存储在/var/lib/docker/graph/<id>/layer

请注意,图像只是与父图像的差异。父 ID 与图像的元数据/var/lib/docker/graph/<id>/json存储在一起。

当您docker run映像时。 AUFS 将所有层 “合并” 到一个可用的文件系统中。

在 Ubuntu 上,您可以 “播放” 正在运行的图像

sudo baobab /var/lib/docker

实际上,图像存储在/var/lib/docker/aufs/diff

屏幕快照,显示在/ var / lib / docker上运行的磁盘分析器工具baobab

对于使用 Docker 工具箱(使用 docker-machine)的用户,有关 Mac OS X 上 boot2docker 的答案无效。 docker-machine VM 被称为 “默认”,它存在于 / /Users/<username>/.docker/machine/machines/default/目录中。

如果您使用的是 Docker for MAC(不是boot2docker ),则位置为/Users/<</>UserName></>/Library/Containers/com.docker.docker/Data/

Windows 的 Docker (本地 Windows)中,默认容器存储位于:

> docker info
   ...
   Docker Root Dir: C:\ProgramData\Docker
   ...