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

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


当前回答

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

$ docker info

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

其他回答

ENV

操作系统:fedora 29 x86_64工作站

码头工人:

[user@localhost ~]$ docker --version
Docker version 19.03.5, build 633a0ea838

图片信息:"DockerVersion": "18.09.7"


这些映像默认存储在/var/lib/docker/overlay2中。


我的例子

展示图片:

[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

图像大小为548M。

查看8ed7463b8476的镜像信息。

[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/

我们可以看到接近548M的尺寸。

我们还可以将图像保存到输出文件中。

[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

我们还可以将/var/lib/docker/overlay2/文件夹存档,以便将包的大小与图像文件进行比较。大小也接近图像大小。

更多有用的阅读:

docker image - GraphDriver的合并/diff/work/LowerDir组件,

Docker镜像存储在哪里?Docker容器路径解释,

覆盖文件系统

sudo docker info | grep -e "Root Dir"

这是过去的做法,现在已经改变了。从2019年开始,请忽略这个答案

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

该虚拟机将存储在VirtualBox镜像的正常位置:

OS X: ~/VirtualBox VMs/boot2docker-vm

窗口:%用户框%/虚拟盒子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 .

在Fedora上,如果可用的话,Docker使用LVM作为存储。在我的系统上,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
 ...

在这种情况下,要增加存储空间,就必须使用LVM命令行工具或兼容的分区管理器(如blivet)。

对于“Docker桌面”,点击Docker系统托盘图标,然后点击“设置”。

在“高级”选项卡上,可以看到磁盘映像的位置。