docker学习笔记-04:docker容器数据卷
一、容器数据卷是什么
1、为了保存docker容器运行时产生的数据,做数据的持久化,我们需要用到容器数据卷。因为如果不通过docker commit 生成新的镜像,那么当容器被删除时,数据自然就没有了。
2、容器数据卷可以将容器中的数据持久化,并且实现容器之间的数据共享。
二、容器数据卷可以干什么
1、卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器中,但不属于联合文件系统,因此能够绕过联合文件系统,提供一些用于持续存储或共享数据的特性。
2、卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此docker不会在容器删除时删除其挂载的数据卷。
3、特点:
(1)数据卷可以在容器之间共享或重用数据。
(2)卷中的更改可以直接生效。
(3)数据卷中的更改不会包含在镜像的更新中。
(4)数据卷的生命周期会一直持续到没有容器使用它为止。
三、添加数据卷
(一)直接命令添加
1、将宿主机目录 /myDataVolumn 复制到容器的目录 /dataVolumnContainer ,如果目录不存在则自动创建:docker run -it -v /myDataVolumn: /dataVolumnContainer centos
2、无论在宿主机还是容器中修改文件,都会同步更新。当容器先停止退出,主机修改了文件,然后重新进入之前的容器,同样可以看到主机修改过的文件。即内容同步。
3、命令带权限,比如容器中的目录只读:docker run -it -v /myDataVolumn:/dataVolumnContainer:ro centos
4、如果docker挂载宿主机目录时访问出现问题:cannot open directory .:Permission denied,解决办法是:在挂载目录后多加一个 --privileged=true 参数即可。
docker run -it -v /myDataVolumn: /dataVolumnContainer --privileged=true centos
(二)dockerFile 添加
1、DockerFile是镜像模板的描述文件,在docker hub 官网上,查找镜像,然后点击进去,选择一个版本进去,就可以跳转到github,看到某软件镜像的DockerFile。
2、具体步骤:
(1)根目录下新建mydocker文件夹并进入
(2)可在DockerFile中使用VOLUME指令来给镜像添加一个或多个数据卷
- VOLUME ['/dataVolumeContainer1','dataVolumeContainer2']
- 出于可移植和分享的考虑,用-v 主机目录:容器目录 这种方法不能够直接在DockerFile中实现
- 由于宿主机目录是依赖于特定宿主机的,并不能保证所有的宿主机都存在这样的特定目录,所以只加入容器目录
(3)编写DockerFile文件,案例:
# volume test
FROM centos
VOLUME ['/dataVolumeContainer1','dataVolumeContainer2']
CMD echo 'finished,------success1'
CMD /bin/bash
(4)build后生成新镜像,获得一个新镜像(以centos为例,一定要注意最后那个 “.”,即指定为当前的路径):
docker build -f /mydocker/DockerFile -t dyy/centos .
(5)查看docker给宿主机默认分配的容器卷目录:
docker inspect 容器ID,然后查看“Volumes”后面的信息,前一半是容器中的容器卷目录,后一半是宿主机中的容器卷目录(可能为空{})。
四、数据卷容器
(一)数据卷容器是什么
容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称为数据卷容器。类似于移动硬盘通过移动硬盘传递数据。
(二)创建父容器,并挂载其他容器
1、通过设定名称来指定父容器:docker run -it --name dc01 dyy/centos
2、其他容器从父容器挂载,其他容器中新创建的资源,同时会在父容器、其他各容器之间共享:docker run -it --name dc02 --volumes-from dc01 dyy/centos
3、把父容器 dc01 删除后,从父容器中继承以及新创建的文件,还会共享:docker rm -f dc01
4、哪怕所有的容器都继承自dc01,把dc01删除后,各容器各自的修改,依然会共享。数据卷的生命周期会一直持续到没有容器使用它为止
docker学习笔记-04:docker容器数据卷的更多相关文章
- Docker小白到实战之容器数据卷,整理的明明白白
前言 上一篇把常用命令演示了一遍,其中也提到容器的隔离性,默认情况下,容器内应用产生的数据都是由容器本身独有,如果容器被删除,对应的数据文件就会跟着消失.从隔离性的角度来看,数据就应该和容器共存亡:但 ...
- Docker系列(16)- 容器数据卷
什么是容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像 数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!新增一个需求:数据可以持久化 MySQL,容器删了等于删库跑路!新增一个 ...
- Docker学习笔记之Docker的数据管理和存储
0x00 概述 数据是应用程序重要的产出,所以很好的管理和存储数据,是对应用程序劳动结果的尊重.特别是在大数据时代,所有的数据都是重要的资产,保护好数据是每个开发者必须掌握的技能.我们知道,在 Doc ...
- Docker学习笔记之docker volume 容器卷的那些事(一)
预览目录 volume 方式 相关用例 使用方式 使用 volume driver bind mount 方式 相关用例 使用方式 配置selinux标签 配置macOS的安装一致性 tmpfs 方式 ...
- Docker学习笔记之为容器配置网络
0x00 概述 在互联网时代,网络已经成为绝大多数应用进行数据交换的主要通道,Docker 作为集群部署的利器,在网络支持上也下了许多功夫.功能丰富和强大,并不代表使用复杂,在 Docker 的封装下 ...
- docker学习笔记2:容器操作
一.列出主机上已经创建的容器 docker ps -a 二.创建交互式容器 命令: docker run -i -t ubuntu /bin/bash 其中-i -t 表示创建一个提供交互式shell ...
- Docker学习笔记四 Docker容器
本文地址:https://www.cnblogs.com/veinyin/p/10439849.html 容器是独立运行的一个或一组应用及他们的运行态环境,对应虚拟机的操作系统和应用. 启动 可 ...
- docker学习笔记2--对镜像/容器的命令操作
Docker启动一个Centos镜像 我们下载完成一个Centos镜像之后,开始启动 docker run -d -i -t <imageID> /bin/bash 这样就能启动一个一直停 ...
- Docker学习笔记之进入容器Bash
我们在创建容器的时候,如果容器的命令(command)不是/bin/bash的时候,使用docker attach命令是会卡住进不去容器的bash shell的.如下图所示: 所以,这里记录一个可以进 ...
随机推荐
- 如果你是新晋的leader, 你可能需要了解这些。
背景 在职业发展的道路上,我们总会面临这样的抉择: 是在技术的路上一条路走到黑,做技术专家 接触管理, 走上管理 年龄大了,搬砖没人要,转型 or 去公司楼下卖炒粉 我曾经有个小小的愿望: 在毕业5年 ...
- python时间序列按频率生成日期的方法
引用:https://www.zhangshengrong.com/p/281omE7rNw/ 有时候我们的数据是按某个频率收集的,比如每日.每月.每15分钟,那么我们怎么产生对应频率的索引呢?pan ...
- 在javaweb中对于session的使用
1.初次调用session时: String username="student"; HttpSession session=request.getSession(true);// ...
- GO测试
测试 Go拥有一个轻量级的测试框架,它由 go test 命令和 testing 包构成. 你可以通过创建一个名字以 _test.go 结尾的,包含名为 TestXXX 且签名为 func (t *t ...
- [HEOI 2013]SAO
Description 题库连接 给你一个 \(n\) 个节点的有向树,问你这棵树的拓扑序个数,对大质数取模.多测,测试组数 \(T\). \(1\leq n\leq 1000, 1\leq T\le ...
- Java如何实现序列化,有什么意义?
1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存Object States, 但是Java给你提供一种应该 ...
- Spring MVC原理解析
SpringMVC Spring MVC的工作原理 ①客户端的所有请求都交给前端控制器DispatcherServlet来处理,它会负责调用系统的其他模块来真正处理用户的请求. ② Dispatche ...
- 如何用python写个人专属群聊提醒小助手?
前言 大家还记得教会父母玩微信是什么时候吗?父母学会后,我们的生活就发生了「质」的变化,父母也许会吐槽你的微信头像不好,要你换一个头像. 最近 pk哥 又被母后大人吐槽了,原因是亲戚微信群里某个亲戚生 ...
- Tensorflow之AttributeError: module 'tensorflow' has no attribute 'mul'
tf.mul已经在新版本中被移除,请使用 tf.multiply 代替
- Servlet(1):request和response对象
1.Servlet的生命周期 /** * Servlet的生命周期: * 1.从第一次调用到服务器关闭. * 2.如果Servlet在web.xml中配置了load-on-startup,生命周期为从 ...