【Docker】容器中的/data目录和镜像中的/data目录有什么区别?

【Docker】容器中的/data目录和镜像中的/data目录有什么区别?

该图来自于《Docker开发指南》42页,他这里讲到:容器中的/data目录便成为了一个数据卷,然后他又接着讲:镜像中的/data目录中的所有文件将被复制到数据卷内。请问容器中的/data目录和镜像中的/data目录有什么区别?

回答

这句话的意思是说,如果镜像中本身就有/data目录,则容器会首先将镜像中/data目录中的文件复制到到数据卷内。这时,/data在本机对应的数据卷中的内容和原本镜像中的/data目录中的文件是一样的。

例如:我现在基于debian镜像,创建一个容器container3, 创建了一个数据卷挂载在/bin目录

docker run -i -t --name container3 -v /bin debian bash

但是我们都知道,debian这个镜像本身就有一个目录/bin。

【Docker】容器中的/data目录和镜像中的/data目录有什么区别?
我们接下来查看容器container3在本机对应的数据卷路径,

docker inspect container3

【Docker】容器中的/data目录和镜像中的/data目录有什么区别?

可以看到数据卷的目录为:

/var/lib/docker/volumes/8b56dfa9877c40bdf72121596ac27d02995fd8858c3801c581d6792745d38756/_data

我们在宿主机中进入该目录查看数据卷中的文件:

cd /var/lib/docker/volumes/8b56dfa9877c40bdf72121596ac27d02995fd8858c3801c581d6792745d38756/_data

ls

【Docker】容器中的/data目录和镜像中的/data目录有什么区别?

可以看到,数据卷的文件和镜像debian /bin目录下的文件是完全一致的。

现在我们在数据卷中新建一个文件:

touch 1.txt

回到容器container1,去container1的/bin目录下查看内容

 docker start -i -a container1

ls bin/

【Docker】容器中的/data目录和镜像中的/data目录有什么区别?

可以看到,在bin目录下出现了1.txt。

所以说,这本书这里并没有讲解错误,只是汉语比较绕,把我给绕糊涂了。下面的阐述方式可能更准确一点

容器中的/data目录便成为了一个数据卷的挂载点。如果镜像中原来就存在/data目录,则镜像的/data目录中的所有文件将被复制到本地数据卷内。

镜像是死的,容器是活的。容器都是由镜像创造出来的运行空间,是实际干活的,镜像只负责创建容器。
另外放弃这本书吧,当年就很多地方写得很不到位,现在版本变化这么大,早就过时了。
建议去看官方文档。

以上是 【Docker】容器中的/data目录和镜像中的/data目录有什么区别? 的全部内容, 来源链接: utcz.com/a/82519.html

回到顶部