Docker学习笔记(五)——Docker容器数据卷

1.数据卷是什么

先来看看Docker的理念:

  • 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的

  • 容器之间希望有可能共享数据

Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。为了能保存数据在docker中我们使用卷。

一句话总结:就像redis数据库的导出的rdb、aof文件。

2.数据卷能干什么

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止

总的来说,数据卷就是容器停止或关闭以后用来进行数据持久化以及容器间继承和共享数据的。

3.容器内添加数据卷

方式一:使用直接命令添加

1.执行命令
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名,比如执行docker run -it -v /hostVolume:/centosVolume centos,这条命令会在宿主机绝对路径下新建一个hostVolume文件夹,在docker内的centos系统中的绝对路径下新建一个centosVolume文件夹,两个文件夹是关联起来的。
2.查看数据卷是否挂载成
可以直接查看宿主机中是否新建了名为hostVolume的文件夹,也可以通过docker inspect centos 来查看文件之间的关联信息。

查看是否新建了文件夹

查看文件之间的关联

需要注意的是,如果挂载主机目录Docker访问出现cannot open directory .: Permission denied错误,只需在挂载目录后多加一个--privileged=true参数即可,即 docker run -it -v /hostVolume:/centosVolume --privileged=true centos

3.容器和宿主机之间数据共享
在宿主机中的hostVolume里面新建一个文件夹,会发现docker中的centos的centosVolume文件夹也会发生变化。即使容器关闭了,在宿主机中修改该文件夹,重启容器之后也会进行同步。


数据共享

4.共享时添加权限
在不添加权限时,使用deocker inspect 查看共享文件的权限信息,可以看到是可读可写的。

不添加权限时

可以使用docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名来创建具有只读权限的共享文件。也就是说,默认是rw模式,现在改成ro模型。例如使用docker run -it -v /hostVolume:/centosVolume:ro centos创建的共享文件RW为Flase。这时候,只有宿主机可以单向的对共享文件进行读写,而容器内只能读,不能写。
共享时添加权限

方式二:使用Docker File进行添加

下面演示使用docker file进行添加的全过程

  1. 根目录下新建mydocker文件夹并进入
  2. 使用VOLUME指令来给镜像添加一个或多个数据卷,编写docker file,内容如下:

volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash

  1. 使用docker build -f [docker file所在路径] -t [新的镜像命名空间]/[新的镜像名]生成新的镜像。例如: docker build -f /mydocker/dockerfile -t dfx/centos .,注意,此命令必须在mydocker文件夹下运行且最后有个"."表示当前路径。如果是在当前目录下有名为Dockerfile的文件,可以省略-f参数及其路径。
    生成新的镜像

    查看新生成的镜像

也就是说,新生成的dfx/centos刚“出厂”就自带两个dataVolumeContainer1和dataVolumeContainer2这两个卷。

  1. 运行新建的容器
    使用docker run -it dfx/centos运行新建的镜像,可以看到刚开始就自带了两个卷。
    运行新的镜像
  2. 与宿主机实现文件共享
    由于使用docker file创建卷时并没有指定宿主机的共享文件的位置,所以docker会指定一个默认的位置。


    查看宿主机共享文件的默认位置

    在容器中的其中的一个卷中新建一个文件,可以看到宿主机的默认位置也有了这个文件。


    容器中新建文件

    宿主机中实现了同步

以上就实现了使用docker file的方式进行文件共享。

4.数据卷容器

命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。通俗一点,就是“活动硬盘”上挂载“活动硬盘”,实现数据的传递依赖。

下面使用实例来讲解容器间的传递共享--volumes -from

  1. 使用修改后带有两个卷的centos,启动一个父容器dc01,并在dataVolumeContainer2中新增一些内容。


    启动修改后centos

    dc01的第二个卷新增文件
  2. dc02、dc03继承自dc01,并在各自的dataVolumeContainer2中新增一些内容。相当于dc01是dc02和dc03模板。在dc02和dc03做完新增之后,查看dc01是否也有改变。


    继承后数据传递共享

    可以看到,dc02、dc03继承自dc01,并做了新增,但是这个改变也传递给了dc01。即,父到子,子到父都可以传递。

  3. 现在删除dc01,查看dc02/dc03是否可以访问


    删除dc01,查看dc02

    可以看到,dc02照样可以访问。

  4. 在dc02中再进行新增,查看dc03是否有变化


    dc03也会跟着dc02变化

    可以看到,dc03也有dc02刚新增的文件,即使没有dc01了,他们也是共享的。

小结:容器之间的配置信息的传递,数据卷的是生命周期一直持续到没有容器使用它为止。

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