Docker映像存储在主机上的何处?

Docker映像存储在主机上的何处?,docker,docker-image,Docker,Docker Image,我设法在目录/var/lib/docker/containers下找到了容器,但找不到图像 /var/lib/docker下的目录和文件是什么?图像存储在/var/lib/docker/graph//layer中 请注意,图像只是与父图像的差异。父ID与图像的元数据/var/lib/docker/graph//json一起存储 当您docker运行图像时。AUFS将所有层“合并”到一个可用的文件系统中。在Ubuntu上,您可以“播放”运行的图像 sudo baobab /var/lib/dock

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


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

图像存储在
/var/lib/docker/graph//layer

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

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

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

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


这是老办法,现在已经改变了。忽略2019年的答案

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

此VM将存储在VirtualBox映像的正常位置:

OS X:
~/VirtualBox虚拟机/boot2docker虚拟机

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

您可以通过运行重置它(警告:这将破坏您迄今为止构建和下载的所有图像):

如果在构建/调试构建时保留了大量中间映像,而没有使用--rm选项,那么这一点尤其有用,我在这里引用它们以供参考: 使用:

而不是:

docker build -t webapp .

/var/lib/docker
目录的内容因环境而异

默认情况下,这将是
aufs
,但根据您的内核支持,可以返回到
overlay
overlay2
btrfs
deviceapper
zfs
。在大多数情况下,这将是
aufs
,但

您可以手动将存储驱动程序的选项设置为

  • /var/lib/docker/{driver name}
    将包含用于图像内容的特定于驱动程序的存储
  • /var/lib/docker/graph/
    现在只在
    json
    layersize
    文件中包含有关图像的元数据
aufs
的情况下:

  • /var/lib/docker/aufs/diff/
    包含图像的文件内容
  • /var/lib/docker/repositories aufs
    是一个包含本地图像信息的JSON文件。可以使用命令
    docker images
    查看这一点
对于
设备apper

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

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

$ docker info
数据文件:
/var/lib/docker/deviceapper/deviceapper/Data

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


我在Mac OSX上使用Docker的boot2docker,因此图像被存储到
/Users//VirtualBox VMs/boot2docker vm/boot2docker vm.vmdk

对于使用Docker工具箱(使用Docker机器)的人来说,有关Mac OS X上的boot2docker的答案是无效的。docker机器VM称为“default”,它存在于
/Users//.docker/machine/machines/default/
目录中

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

~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
更新(由提供):

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

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

包含Docker磁盘以及其中的所有映像和容器。

在新发布的使用Hyper-V的“Docker for Windows”上,数据位于Docker虚拟硬盘中:C:\Users\Public\Documents\Hyper-V\virtual hard disks\MobyLinuxVM.vhdx

C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx
您还可以打开“Hyper-V管理器”以访问Docker/MobyLinux虚拟机。

在Docker for Windows中,日志如下:
%USERPROFILE%\AppData\Local\Docker
如果您正在使用Docker for MAC(而不是
boot2docker
)然后位置是
/Users//Library/Containers/com.docker.docker/Data/

正如所回答的,如果您在Mac上,它位于

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

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

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

我只能为Ubuntu用户回答这个问题:

运行命令
docker info

Docker目录将在此行中给出:“
Docker根目录:/var/lib/Docker

关于docker映像,它们存储在docker目录中:
/var/lib/docker/aufs/diff/


记住,这些东西在docker的所有版本中都不相同。目前,我正在使用1.12.3。

扩展Tristan的答案,在使用Hyper-V的Windows中,您可以使用matthuisman的以下内容移动图像:

在Windows 10中

  • 停止码头工人等
  • 在任务栏搜索框中键入“Hyper-V管理器”,然后运行它
  • 在左侧窗格中选择您的电脑(我的称为 桌面计算机(CBP**)
  • 右键单击正确的虚拟机(我的是 称为MobyLinuxVM)
  • 选择“关闭”(如果正在运行)
  • 再次右键单击它并选择“移动”
  • 按照提示操作
  • 在Fedora上,Docker用于存储(如果可用)。在我的系统上,
    docker info
    显示:

    Storage Driver: devicemapper
     Pool Name: vg01-docker--pool
     Pool Blocksize: 524.3 kB
     Base Device Size: 10.74 GB
     Backing Filesystem: xfs
     Data file:
     Metadata file:
     Data Space Used: 9.622 GB
     ...
    

    在这种情况下,为了增加存储,您必须使用LVM命令行工具或兼容的分区管理器,如blivet。

    如果您记住Docker仍在VM中运行,那么系统路径是相对于VM的,而不是来自Mac Osx系统。 正如上面所说,所有内容都包含在一个VM文件中:

    /Users/MyUserName/Library/Containers/com.docker.docker/Data/c
       > docker info
       ...
       Docker Root Dir: C:\ProgramData\Docker
       ...
    
    Storage Driver: devicemapper
     Pool Name: vg01-docker--pool
     Pool Blocksize: 524.3 kB
     Base Device Size: 10.74 GB
     Backing Filesystem: xfs
     Data file:
     Metadata file:
     Data Space Used: 9.622 GB
     ...
    
    /var/lib/docker/image/overlay2/imagedb/content
    
    $ docker info
    ...
    Server Version: 18.06.1-ce
    Storage Driver: aufs
     Root Dir: /var/snap/docker/common/var-lib-docker/aufs
    ...
    Docker Root Dir: /var/snap/docker/common/var-lib-docker
    ...
    
    $ docker info
    Server Version: 17.09.0-ce
    Storage Driver: overlay2
     Backing Filesystem: extfs
    ...
    Docker Root Dir: /var/lib/docker
    ...
    
    $ docker info --format '{{.DriverStatus}}'
    [[Root Dir /var/snap/docker/common/var-lib-docker/aufs] [Backing Filesystem extfs] [Dirs 265] [Dirperm1 Supported true]]
    
    $ docker info --format '{{json .DriverStatus}}'
    [["Root Dir","/var/snap/docker/common/var-lib-docker/aufs"],["Backing Filesystem","extfs"],["Dirs","265"],["Dirperm1 Supported","true"]]
    
    >docker info
    ...
    Storage Driver: windowsfilter
    ...
    Docker Root Dir: C:\ProgramData\docker
    ...
    
    version: '3.7'
    ...
      services:
        demo-service:
          volumes:
            - data-volume:/var/tmp/container-volume
    
    volumes:
      data-volume:
        driver: local
        driver_opts:
          type: none
          o: bind
          device: /tmp/host-volume
    
    > docker exec -it 1234 /bin/bash
    bash-4.4$ df
    Filesystem           1K-blocks      Used Available Use% Mounted on
    ...
    osxfs                488347692 464780044  21836472  96% /var/tmp/container-volume
    
    # example. 
    "MergedDir": "/var/lib/docker/overlay2/f40cc2ea8912ec3b32deeef5a1542a132f6e918acb/merged 
    
    sudo docker info | grep -e "Root Dir"
    
    [user@localhost ~]$ docker --version
    Docker version 19.03.5, build 633a0ea838
    
    [user@localhost ~]$ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    neo4j               latest              8ed7463b8476        12 months ago       548MB
    hello-world         latest              fce289e99eb9        2 years ago         1.84kB
    
    [user@localhost ~]$ docker image inspect 8ed7463b8476
    
    ... ... ... ...
    
    "DockerVersion": "18.09.7",
    
    ... ... ... ...
    
    "GraphDriver": {
                "Data": {
                    "LowerDir": "/var/lib/docker/overlay2
    /66dc24704d7ea5f1a5dee0bf4a5297cb78bcbd0d4b36206b8cca62cd4de7f2b1/diff:
    /var/lib/docker/overlay2
    /5ab91cf721359d43d01038233d397fd9ed1c4b3857c0c7d9a2dd7f2ac5eccad0/diff:
    /var/lib/docker/overlay2
    /e82fdf7ee3e37db0a11d9ca309245ae852425d24d6f5d3313dcf604cdddb397b/diff:
    /var/lib/docker/overlay2
    /9394543085d467010d0468fffb388e5616a89e2cf16c1c2b7b31aee4e542ae69/diff:
    /var/lib/docker/overlay2
    /c7c7a16e3dbaeea1a3a3b0bbca39f34f08f6b8ab15d753e6e68f9851c80d95b4/diff:
    /var/lib/docker/overlay2
    /3b470afdf8939b45159f3171f0bef2a27085b4b980e09f0c666fbdc58b944d97/diff:
    /var/lib/docker/overlay2
    /463ba63f79eb6b2f5466e7b71041bc346a8e9c4ebddd34d23422c719824a2340/diff",
    
    ... ... ... ...
    
    [user@localhost ~]$ sudo du -sh /var/lib/docker/overlay2/66dc24704d7ea5f1a5dee0bf4a5297cb78bcbd0d4b36206b8cca62cd4de7f2b1
    141M    /var/lib/docker/overlay2/66dc24704d7ea5f1a5dee0bf4a5297cb78bcbd0d4b36206b8cca62cd4de7f2b1
    [user@localhost ~]$ sudo du -sh /var/lib/docker/overlay2/5ab91cf721359d43d01038233d397fd9ed1c4b3857c0c7d9a2dd7f2ac5eccad0/
    28K /var/lib/docker/overlay2/5ab91cf721359d43d01038233d397fd9ed1c4b3857c0c7d9a2dd7f2ac5eccad0/
    [user@localhost ~]$ sudo du -sh /var/lib/docker/overlay2/e82fdf7ee3e37db0a11d9ca309245ae852425d24d6f5d3313dcf604cdddb397b/
    100K    /var/lib/docker/overlay2/e82fdf7ee3e37db0a11d9ca309245ae852425d24d6f5d3313dcf604cdddb397b/
    [user@localhost ~]$ sudo du -sh /var/lib/docker/overlay2/9394543085d467010d0468fffb388e5616a89e2cf16c1c2b7b31aee4e542ae69/
    310M    /var/lib/docker/overlay2/9394543085d467010d0468fffb388e5616a89e2cf16c1c2b7b31aee4e542ae69/
    [user@localhost ~]$ sudo du -sh /var/lib/docker/overlay2/c7c7a16e3dbaeea1a3a3b0bbca39f34f08f6b8ab15d753e6e68f9851c80d95b4/
    36K /var/lib/docker/overlay2/c7c7a16e3dbaeea1a3a3b0bbca39f34f08f6b8ab15d753e6e68f9851c80d95b4/
    [user@localhost ~]$ sudo du -sh /var/lib/docker/overlay2/3b470afdf8939b45159f3171f0bef2a27085b4b980e09f0c666fbdc58b944d97/
    9.5M    /var/lib/docker/overlay2/3b470afdf8939b45159f3171f0bef2a27085b4b980e09f0c666fbdc58b944d97/
    [user@localhost ~]$ sudo du -sh /var/lib/docker/overlay2/463ba63f79eb6b2f5466e7b71041bc346a8e9c4ebddd34d23422c719824a2340/
    76M /var/lib/docker/overlay2/463ba63f79eb6b2f5466e7b71041bc346a8e9c4ebddd34d23422c719824a2340/
    
    [user@localhost ~]$ docker save -o neo4j.image.tar 8ed7463b8476
    [user@localhost ~]$ du -sh neo4j.image.tar 
    528M    neo4j.image.tar
    
    [user@localhost neo4j.image]$ du -sh *
    16K 2f0dd5fb60a940719a3e781133611cc64c2acded03bd47e04b0997fd0c1dae50
    8.7M    73819037a38eabeb7c622533e4058c84f5ff106475a1aba78a278f8b36c172f7
    309M    8d31d715b324a2ae3ccb1577e981d492f40e34db6371f0858da925ef02b5762e
    12K 8ed7463b84760f09b1b86a732ee6f295baaadffe72ce4fdb7ad306fe5e096bbb.json
    36K 966e726ff1d9be9dca68014cda6f1ecf974365c553b82ea3834fff5d73ea593e
    70M a32776b9621e916e8714389b1037bf47253a2d3d1c806ad515623d2150c92485
    60K d82868a318b95466f213136f81cd7258518744da72f46ca51b04b35f2351f46a
    16K e62169d79fab44bebb0a455b01af5f636bace7673a1d38fc092daad77d51cd0e
    141M    fe8014622f7933e178b9005deffda3eb4828703eb7eca93b5485232930e3916b
    4.0K    manifest.json