Docker笔记之数据卷

为什么使用数据卷,那先来了解一下Docker的联合文件系统。

0.数据卷基础

0.1 Docker联合文件系统

Docker镜像是有多层只读文件叠加而成,当运行起一个容器的时候,Docker会在制只读层上创建一个读写层。如果运行中的容器需要修改文件,那么并不会修改只读层的文件,只会把该文件复制到读写层然后进行修改,只读层的文件就被隐藏了。当删除了该容器之后,或者重启容器之后,之前对文件的更改会丢失,镜像的只读层以及容器运行是的“读写层”被称为联合文件系统(Union File System)
为了实现容器与主机之间、容器与容器之间共享文件,容器中数据的持久化,将容器中的数据备份迁移恢复等,Docker加入了数据卷(volumes)机制。简单的讲,就是做了一个文件夹的实时共享,有点像局域网的文件共享。

0.2 数据卷的特点
  1. 数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。
  2. 数据卷可以是目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了荣期间的数据共享和交换。
  3. 容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中。
  4. 容器对数据卷的修改是实时进行的。
  5. 数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会相互影响。

1.Docker挂载容器数据卷 查看更多

bind mountsVolumes、和tepfs mounts三种方式,还有就是共享其他容器的数据卷,其中tmpfs是一种基于内存的临时文件系统。tepfs mounts数据不会存储在磁盘上,在次笔记中暂不做笔记。

1.1 bind mounts

bind mounts示意图
使用bind mounts挂载数据卷时,宿主机上的文件或者目录将载入到容器中。文件或目录由其在主机上的绝对路径或相对路径引用。如果将数据卷绑定到容器上的非空目录中,则绑定装置会隐藏目录的现有内容。

bind mounts方式挂载数据卷的两种方式:

利用docker run/create的参数为容器挂载数据卷:

方式一:-v --volume

-v宿主机文件或者文件夹路径:容器中文件或文件夹的路径:可选字段
其中 宿主机文件或者文件夹路径和容器中文件或文件夹的路径是必须的,可选字段,用分号分隔选项,非必须,如 ro,consistent,delegated,cached,z,和Z

-v

方式二: --mount

其参数由多个键值对组成,以逗号分隔。

  • type选项,其可以是bindvolume,或tmpfs。本主题讨论绑定装入,因此类型始终是bind
  • source选项。对于绑定装入,这是Docker守护程序主机上的文件或目录的路径。可以指定为source/src
  • destination文件或目录安装在容器中的路径作为其值。可以指定为destinationdsttarget
  • readonly选项(如果存在)导致绑定装入以只读方式装入容器中
  • bind-propagation选项(如果存在)会更改 绑定传播。可以是一个rprivateprivatersharedsharedrslaveslave
  • consistency选项,如果存在,可以是一种consistentdelegatedcached。此设置仅适用于Docker for Mac,并在所有其他平台上被忽略。
  • --mount标志不支持zZ修改selinux标签的选项。
--mount
-v和--mount之间的区别

使用-v绑定宿主机上不存在的文件或者目录时,会自动生成相应的文件或者目录,--mount则会抛出异常,所以用--mount指定文件和路径时需要提前创建以保证其存在。

1.2 volumes的方式挂载数据卷

Docker挂载数据卷
Volumes是保存Docker容器生成和使用数据的首选机制。

利用docker run/create的参数为容器挂载数据卷:

方式一:-v --volume

-vvolume_name:容器中文件或文件夹的路径:可选字段。
其中 volume_name是数据卷的名称,在宿主机上是唯一的,可以省略该字段,会自动创建。

docker run -v

docker inspect
方式二: --mount

其参数由多个键值对组成,以逗号分隔。

  • type选项,其可以是bindvolume,或 tmpfs。本主题讨论卷,因此类型始终是 volume
  • source选项。对于命名卷,这是卷的名称。对于匿名卷,省略此字段。可以指定为source /src
  • destination文件或目录安装在容器中的路径作为其值。可以指定为destinationdst/target
  • readonly选项(如果存在)导致绑定装入以只读方式装入容器中
  • volume-opt选项可以多次指定,它采用由选项名称及其值组成的键值对。
    docker run --mount
用volumes方式挂载的数据卷,实际上是创建了数据卷对象,可以用以下命令进行管理:
    docker volume create     创建数据卷对象
    docker volume inspect    查看数据卷的详细信息
    docker volume ls         查看已创建的数据卷对象
    docker volume prune      删除所有未被使用的数据卷对象
    docker volume rm         删除一个或多个数据卷对象

1.3 使用其他容器的数据卷

使用dockers run/create--volumes-from参数指定数据卷容器docker run/create --volume-form CONTAINER

2. 注意

Docker的数据卷更多会是使用volumes方式来进行使用,但值得注意的是:

  • 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。(我的测试:使用 -v 参数并没有这个效果,需要使--mount参数,如果不符请指正)

  • 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中目录非空,那么这些原始数据会被隐藏掉

---------------------------------------万恶的分隔线------------------------------------------

参考资料:Docker 文档

总注:通过volumes方式挂载数据卷还有很多要注意的,一些比较厉害的功能在这里没有涉及,需要看一下官方文档介绍的比较详细。因为是初学,如有问题,欢迎指正!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271