开发者学堂课程【Docker 快速入门:Docker 容器数据卷 volumes-from】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/616/detail/9404
Docker 容器数据卷 volumes-from
数据卷就是数据持久化的操作,数据卷容器是命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。
活动硬盘上挂活动硬盘,实现数据的传递依赖。主机到容器,容器到主机,比如一组,二组,三组的组长三个活动硬盘,挂在班长的活动硬盘上面,可以进行数据的传递。
以上一步新建的镜像 zyy/centos 为模板并运行容器 dc01/dc02/dc03,新生成的镜像只要运行 zyy/centos,就会在根目录生成,dataVolumeContainer1,dataVolumeContainer2,假设 1 是父容器,像 redis 做的主从复制,1 号机有了,另外的机也会有,父有子,子父之间有继承,java 中的 extends。
1、容器间传递共享(--volumes-from),需求是 2 的数据来自于 1,如何写?Dc01传给 2,
(1)先启动一个父容器 dc01,在 dataVolumeContainer2 新增内容。
exit 退出
Docker ps
当前没有运行容器
Docker run -it --name dc01 zzyy/centos
自定义
ll 运行
Cd dataVolumeContainer2
Pwd
/dataVolumeContainer2
Ll
Total0
在当前目录下
touch dc01_ add. txt 一号机做的事
Ctrl+p+q 退出
Docker ps
1 号机 dc01 运行着
没加名字--name dc01,所以 docker 内部随机给一个,但是加了名字,注意有些是一个警号,有些是两个警号。指定名字。
Dc01 作为父容器
(2)dc02/dc03 继承自 dc01
执行命令 docker run -it -- name dc02 -- volumes- from dc01 zzyy/ centos
运行 dc02,它也是以 zzyy/ centos 为模版,肯定会有 dataVolumeContainer2,因为是来自同一个模版。
Cd dataVolumeContainer2
Pwd
/dataVolumeContainer2
有了 dataVolumeContainer2 文件夹,在 033 容器有 dc01_ add. Tx。
touch dc02_ add. Txt
退出 exit
Docker ps
可以看到 dc01,dc02。
docker run -it --name dc03 -- volumes- from dc01 zzyy/ centos
Cd dataVolumeContainer2
Ll
3 也来自于 1,
touch dc03_ add. Txt
全部退出。
Docker ps
可以看到 dc01,dc02,dc03。
3 和 2 继承 1,会不会反作用影响前面,比如子类继承 dc01,ll 之后,dco1_add. Txt ,dc02_add. txt 中有 1 和 2,在 3 里面添加以后,是否会影响 1 和 2。
Docker attach dc01
Pwd
/dataVolumeContainer2
Ll
Total
dc01_ add, txt
dc02_ add. txt
dc03_ add, txt
继承后,容器卷即达到了继承又达到了共享,传递数据相关的目的,docker 容器很强大,父到子,子到父,可以互相传递。
(3)回到 dc01 可以看到 02/03 各自添加的都能共享了
(4)删除 dc01,dc02 修改后 dc03 可否访问
如果不换新,docker attach dc02
Ll2 里面也有 123,一样。
dc01_ add, txt
dc02_ add. txt
dc03_ add, txt
Docker ps
Dc03,dc02,dc01 三个容器
删除 dc01
docker rm -f dc01
2 和 3 继承 1。
Docker ps
只有 2。
Docker attach dc02
Pwd
/dataVolumeContainer2
Ll 还是在当前路径下面
1 没有,2 和 3 还在。
dc02_ update. Txt
Touch dc02_ update. Txt
Ll
dc01_ add. txt
dc02_ add. txt
dc02_ update. txt
dc03_ add. Txt
之前 2 和 3 都继承 1,现在 2 没有受到影响,不用验证,3 也不受影响,但是 2 和 3 都继承 1,没有 1,在 2 上进行修改,3 上会不会有?
退出,docker attach dc03
Pwd
/dataVolumeContainer2
Ll
3 继承于 1,1 没有了。
dc01_ add. txt
dc02_ add. txt
dc02_ update. txt
dc03_ add. Txt
数据之间进行共享
(5)删除 dc02 后 dc03 可否访问,再进一步
让 4 继承 3,
docker run - it
-- name dq04 --volumes- from dc03 zzyy/ centos_ dc
(6)新建 dc04 继承 dc03 后再删除 dc03
根据 2 删除 1,2,3,存在。删除 3,4 有。
4 继承 3
docker run- it·- name dc04 --volumes- from dc03 zzyy/ centos
Ll
dc01_ add. txt
dc02_ add. txt
dc02_ update. txt
dc03_ add. txt
dc03_ update. Txt
删除 3 后 4 有。
结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。只要还有,就可以进行全链备份。
3、容器间传递共享(--volumes from)。