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

JerryWangSAP JerryWangSAP     2022-11-24     463

关键词:

要了解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的原创文章,请关注公众号"汪子熙":

技术分享图片









dockervolume

1.dockervolume原理docker镜像是由多个文件系统(只读层)叠加而成的。启动一个容器时,会加载只读层并在其上创建一个可读写层。所以,容器中更改据都存放在这个可读写层中,当删除docker容器,并通过该镜像重新启动,之前的... 查看详情

runloop 的实际工作原理

...我让它工作了,但我仍然不完全理解它。如果runloop只是一个与线程相关联的循环并且它不会在幕后产生另一个线程,那么我的线程中的任何其他代码(为简单起见是主线程)如何执行而不会被“阻塞”/ 查看详情

区块链原理(结合实际例子较详细的讲述原理)(代码片段)

...,可以点击此处阅读:长理小生-区块链原理(结合实际例子较详细的讲述原理)去中心化中心化:我们使用支付宝、微信来支付,这就是中心化的应用, 查看详情

理解channel工作原理以及源码

...,并可能并行执行channels:用于goroutines之间的通讯、同步一个简单的事务处理的例子 对于下面这样的非并发的程序:funcmain(){tasks:=getTasks()//处理每个任务for_,task:=rangetasks{process(task)}}将其转换为Go的并发模式很容易,使用典型... 查看详情

数据卷

数据卷【Docker进阶】从五方面深入理解DockerVolume的工作原理http://cloud.51cto.com/art/201501/463143.htm 查看详情

systemd stop 命令的实际工作原理

...【发布时间】:2017-08-1603:27:14【问题描述】:我正在使用一个systemd服务,它在“启动”时调用一个进程(例如$systemctlstarttest.service)。根据设计,进程永远处于循环中,我们可以使用“ps”命令查看进程的存在。我们还看到该进... 查看详情

区块链原理(结合实际例子较详细的讲述原理)(代码片段)

...宝、微信来支付,这就是中心化的应用,它存在一个中心机构来管理服务。去中心化:再比如自己寝室里室友之间代替付费,一天室友A给室友B出了一顿饭钱,室友B下午又给室友C出了一顿饭钱,室友B就告... 查看详情

了解 Lambda 函数的工作原理 [重复]

...函数,我检查了很多代码,但我仍然无法理解它。也许有一个简单的例子,在此先感谢。【问题讨论】:google.com/…docs.python.org/3/tutorial/controlflow.html#la 查看详情

理解hashmap底层原理,一个简单的hashmap例子(代码片段)

packagecom.jl.testmap;/***自定义一个HashMap*@authorJiangLai**/publicclassMyHashMap<K,V>Node<K,V>[]table;//位桶数组intsize;//存放键值对的个数publicMyHashMap()table=newNode[16];//长度一般定义为2的整数次幂publicvoidpu 查看详情

通过一个实际例子理解kubernetes里pod的自动scale-水平自动伸缩(代码片段)

...际例子来观察scale命令到底能达到什么效果。命令行创建一个deployment:kubectlrunjerry-nginx--image=nginx:1.12.2kubectlgetdeploy查看刚刚创建的deployment:自动被deployment创建的pod:kubectlgetpod:使用下列命 查看详情

git的思想和基本工作原理2

那么,简单地说,Git究竟是怎样的一个系统呢?请注意,接下来的内容非常重要,若是理解了 Git 的思想和基本工作原理,用起来就会知其所以然,游刃有余。在开始学习Git的时候,请不要尝试把各种概念和其他版本控制... 查看详情

使用plumbing命令来深入理解gitadd和gitcommit的工作原理(代码片段)

...tcommit等命令plumbing命令可以理解为更底层的命令,实际上一个porcelain命令可以由若干个plumbing命令完成(见下文),plumbing命令可以帮助我们了解git底层的工作原理阅读本文还需要了解.git目录的 查看详情

用一个javascript四则运算解释器来理解编译原理(代码片段)

...,就会耗费掉不少的时间,所以我在这里设计了一个小实验,帮助你快速理解编译原理相关的知识。1.分析按照编译原理相关的知识,我们来设计一下工作,这 查看详情

利用dockervolume修改nginxdocker镜像里index.html

通过这个小例子我们可以进一步加深对Dockervolume概念的理解和使用方法。我们都知道运行基于Docker的Nginx镜像后,访问localhost能看到Nginx默认的首页,这个首页的位置是Nginx镜像内的/usr/share/nginx/html目录下面。假设我们有个需求,... 查看详情

决策树模型(简单例子理解原理)

...熵:表示(某种事物)随即不确定性的大小。样本:假设一个人身上有四种属性,分别是年龄【青年,中年,老年】,是否有工作【有工作,没有工作】,是否有房【有房,没房】,信用等级【非常好,好,一般好】;现在样本... 查看详情

简单socket服务器的基本理解

...看它是如何工作的。现在有些事情我无法理解。让我们举一个例子,如here所示,使用Python套接字库用Python编写的简单回显客户端和服务器。echo服务器 查看详情

从一个简单例子来理解js引用类型指针的工作方式

 <script>vara={n:1};varb=a;a.x=a={n:2};console.log(a.x);//-->undefinedconsole.log(b.x);//-->[objectObject]</script> 上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了——“a.x不是指向对象a了么?为啥log(a.x)是 查看详情

补码原理——负数为什么要用补码表示(代码片段)

...dquo;模”的概念。所以首先看一下什么是模,然后通过一个小例子来理解补码。1模(Modulo)1.1 查看详情