资讯专栏INFORMATION COLUMN

用一个实际例子理解Docker volume工作原理

taohonghui / 2719人阅读

摘要:要了解,首先我们需要理解文件系统的工作原理。在中,只读层及在顶部的读写层的组合被称为联合文件系统,简称,它用到了一个重要的资源管理技术叫写时复制。我们下面看一个实际例子。的作用是指定容器的主机名。

要了解Docker Volume,首先我们需要理解Docker文件系统的工作原理。Docker镜像是由多个文件系统的只读层叠加而成。当一个容器通过命令docker run启动时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,但是该文件的只读版本依然存在,只不过已经被读写层中该文件的副本所隐藏。

当删除Docker容器,并通过该镜像重新启动时,之前在读写层的更改将会丢失。在Docker中,只读层及在顶部的读写层的组合被称为Union File System(联合文件系统),简称UnionFS,它用到了一个重要的资源管理技术,叫写时复制。写时复制(copy-on-write),也叫隐式共享,是一种对可修改资源实现高效复制的资源管理技术。对于一个重复资源,若不修改,则无需立刻创建一个新的资源,该资源可以被共享使用。当发生修改的时候,才会创建新资源。这会大大减少对于未修改资源复制的消耗。其实COW这个概念对编程人员来说一点也不陌生,广泛用在各种领域,比如ABAP里对于内表(Internal table)的拷贝动作,Java字符串的拷贝实现等等。Docker基于UnionFS去创建containers。

我们下面看一个实际例子。

使用命令行docker run --help查看这个命令的帮助文档。 -h 的作用是指定容器的主机名。

使用命令行创建一个新的容器:

docker run -it --name jerry-container-test -h CONTAINER -v /data busybox /bin/sh
名称为jerry-container-test, 用-v创建了一个volume /data

创建完毕之后,在容器里执行cd /data进入这个目录,这个时候还是空的。

docker ps查看容器状态:

现在我想知道主机上为了实现这个volume,使用了哪个internal目录。

用命令docker inspect jerry-container-test查看关键字"volumes":

得到了容器里/data在主机上实现的目录:

/var/lib/docker/volumes/96aa969033ee7e6d7ff607a0a47de5a5866613a422518ed3f86fee6240bae8cc/_data

现在我在主机上使用touch命令在这个目录下直接创建一个文件:

sudo touch /var/lib/docker/volumes/96aa969033ee7e6d7ff607a0a47de5a5866613a422518ed3f86fee6240bae8cc/_data/test.s

现在切换到容器里,用ls也能看到直接在主机上用touch命令在internal folder里创建的文件了。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/33115.html

相关文章

  • 一个实际例子理解Docker volume工作原理

    摘要:要了解,首先我们需要理解文件系统的工作原理。在中,只读层及在顶部的读写层的组合被称为联合文件系统,简称,它用到了一个重要的资源管理技术叫写时复制。我们下面看一个实际例子。的作用是指定容器的主机名。 要了解Docker Volume,首先我们需要理解Docker文件系统的工作原理。Docker镜像是由多个文件系统的只读层叠加而成。当一个容器通过命令docker run启动时,Docker...

    helloworldcoding 评论0 收藏0
  • 一个实际例子理解Docker volume工作原理

    摘要:要了解,首先我们需要理解文件系统的工作原理。在中,只读层及在顶部的读写层的组合被称为联合文件系统,简称,它用到了一个重要的资源管理技术叫写时复制。我们下面看一个实际例子。的作用是指定容器的主机名。 要了解Docker Volume,首先我们需要理解Docker文件系统的工作原理。Docker镜像是由多个文件系统的只读层叠加而成。当一个容器通过命令docker run启动时,Docker...

    fengxiuping 评论0 收藏0
  • docker 实践开发

    本文摘自: docker 高级进阶前面几篇详细的介绍了,docker的一些基本内容和知识. 这里, 我们来实践一下,在正式环境中,docker是怎么搭建的.在开始之前,说一些docker运行时的基本原理.docker最大的特点就是虚拟化, 通过VM来获得底层的操作权限,并且利用自身的进程构建了一个庞大的集群系统, 相当于,一个docker下面,我们可以连接上不同的电脑. 但实际上, 他们都可以虚拟...

    alanoddsoff 评论0 收藏0
  • 带着问题学 Kubernetes 基本单元 Pod

    摘要:后面会涉及以配置文件进行部署。的调度完成,被分配到指定上。这是的一种最终状态。图相较而言,除了提供的基本功能,还支持声明式的更新和回滚。共享数据存储的问题主要分为数据临时存储与持久性存储。 带着问题学 Kubernetes 基本单元 Pod 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog 文章一:带着问题学 Kube...

    pcChao 评论0 收藏0
  • 带着问题学 Kubernetes 基本单元 Pod

    摘要:后面会涉及以配置文件进行部署。的调度完成,被分配到指定上。这是的一种最终状态。图相较而言,除了提供的基本功能,还支持声明式的更新和回滚。共享数据存储的问题主要分为数据临时存储与持久性存储。 带着问题学 Kubernetes 基本单元 Pod 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog 文章一:带着问题学 Kube...

    frontoldman 评论0 收藏0

发表评论

0条评论

taohonghui

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<