总结:要理解它,您必须首先了解文件系统是如何工作的。 只读层和其上的读/写层的组合简称为联邦文件系统,它使用了一种重要的资源管理技术,称为写时复制。 下面我们看一个真实的例子。 该函数指定容器的主机名。
要了解Docker Volume,首先需要了解Docker文件系统是如何工作的。 Docker 镜像由多个文件系统的只读层组成。 当使用 docker run 命令启动容器时,Docker 会加载只读镜像层,并将读/写层添加到镜像堆栈的顶部。 当正在运行的容器修改一个现有文件时,该文件会从读写层下面的只读层复制到读写层,但该文件的只读版本仍然存在,只是变成了隐藏。 。 通过在读/写层复制文件。
当 Docker 容器被删除并通过镜像重新启动时,之前读/写层的更改将会丢失。 在Docker中,只读层和其之上的读/写层的组合称为联合文件系统(简称UnionFS)。 它使用一种重要的资源管理技术,称为写入时复制。 写时复制(copy-on-write)也称为隐式共享,是一种资源管理技术,可提供可变资源的高效复制。 对于重复的资源,如果它们没有发生变化,您可以共享资源,而无需立即创建新资源。 仅当发生更改时才会创建新资源。 这显着降低了复制未更改资源的成本。 事实上,COW的概念对于程序员来说并不完全陌生。 广泛应用于ABAP内表复制动作、Java字符串复制实现等各个领域。 Docker 基于 UnionFS 创建容器。
让我们看下面的一个工作示例。
要查看该命令的帮助文档,请使用命令行 docker run --help。 -h 用于指定容器的主机名。
使用命令行创建一个新容器。
docker run -it --name jerry-container-test -h CONTAINER -v /databusybox /bin/sh
名字是 jerry [我使用k4]container-test创建了一个卷/data,-v
创建后,在容器内运行cd /data进入该目录Masu。 此时仍然是空的。
Docker ps 检查容器的状态。
接下来我想知道主机上使用哪个内部目录来实现这个卷。
使用命令 docker Inspection jerry-container-test 显示关键字“volumes”。
获取容器内实现/data的目录。 主机上:
/var/lib/docker/volumes/96aa969033ee7e6d7ff607a0a47de5a5866613a422518ed3f86fee6240bae8cc/_data
然后在主机上使用touch命令直接在这个目录下创建一个文件。
p>
sudo touch /var/lib/docker/volumes/96aa969033ee7e6d7ff607a0a47de5a5866613a422518ed3f86fee6240bae8cc/_data/test.s
接下来,切换到容器。 您还可以使用 ls touch 命令直接查看主机内部文件夹中创建的文件。
获取更多Jerry原创文章,请关注公众号“王子熙”:
评论前必须登录!
注册