Docker容器的数据卷(data volume),数据卷容器,数据卷的备份和还原。
数据卷就是数据(一个文件或者文件夹)。
Docker的理念之一是将应用与其运行的环境打包,docker容器的生命周期是与其运行的程序一致的,而对数据的要求是持久化,docker容器之间也需要有共享数据的渠道。
数据卷是特殊的目录,可以绕过联合文件系统,为一个或多个容器提供访问。数据卷设计的目的是数据的永久化,是完全独立于容器的生命周期,不会在容器删除时删除其挂载的数据卷,也不会存在类似垃圾收集机制,对容器引用的数据卷进行处理。

数据卷存在于宿主机中,独立于容器,和容器的生命周期是分离的,数据卷存在于宿主机的文件系统中,数据卷可以目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换。

数据卷的特点:
1.容器启动的时候初始化的,如果容器使用的镜像包含了数据,这些数据也会拷贝到数据卷中。
2.容器对数据卷的修改是及时进行的。
3.数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会有相互影响。
4.数据卷是宿主机中的一个目录,与容器生命周期隔离。
为容器添加数据卷(数据存放的地址):
$sudo docker run -v ~/container_data:/data -it ubuntu /bin/bash :-v指定数据卷在本机中的目录和在容器中映射的目录名。如果本机目录container_data不存在会创建,data 是容器中映射的目录。
yw1989@ubuntu:~$ docker run -it -v ~/ywjuan:/ywjuan ubuntu /bin/bash
root@b78c81987d93:/# ls : 就包含了叫ywjuan的目录
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr ywjuan
root@b78c81987d93:/# touch ywjuan/c1 : 在这个目录中创建一个文件
root@b78c81987d93:/ywjuan# echo "i am yaowen" > c1 : 文件中写入一个字符串
exit退出容器。 本机ls可以看到ywjuan文件夹,查看文件可以看到c1文件存在于ywjuan中了。
yw1989@ubuntu:~$ ls
Desktop Documents examples.desktop Pictures Templates ywjuan
dockerfile Downloads Music Public Videos
yw1989@ubuntu:~$ cd ywjuan/
yw1989@ubuntu:~/ywjuan$ ls
c1 :刚才输入的字符也存在了 查看刚才的镜像:
yw1989@ubuntu:~/ywjuan$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b78c81987d93 ubuntu "/bin/bash" 15 minutes ago Up 15 minutes nifty_wozniak $docker inspecr b78c81987d93:可以看到Volumes信息。 为数据卷添加权限:$sudo docker run -it -v ~/datavolume:/data:ro --name=bghd ubuntu /bin/bash ,ro是只读, 在容器的data文件目录中就不能创建文件,因为是只读的。$docker inspecr b78c81987d93可以看到数据卷信息和权限。 可以在dockerfile文件中加上VOLUME[“/data”]来创建含有数据卷的镜像并使用该镜像创建包含数据卷的容器。Dockefifle可以创建多个数据卷,与在run命令中创建数据卷不同,dockerfile中的数据卷不能映射到已经存在的本地文件目录的,在镜像构建时指定的数据卷会在容器启动时创建指定名字的数据卷,运行同样镜像的容器创建的数据据是不一样的(可以看到不同容器的数据卷地址是不一样的)。当容器中的数据卷地址不一样时,容器之间就无法共享数据了。
Docker run --name 容器名 -it 该镜像名。 数据卷容器:命名的容器挂在数据卷,其他容器通过挂在这个容器实现数据共享,挂在数据卷的容器叫做数据卷容器。数据卷容器挂载了一个本地目录,其他容器连接这个容器来实现数据的共享(数据地址的拷贝)。

$docker run --volumes-from [container name]
1.创建包含数据卷的镜像
使用镜像创建容器:docker run -it --name dvt4 jingxiang(或者 docker run -it --name=dvt4 -v ~/ywjuan:/ywjuan ubuntu /bin/bash)
2.可以看到在容器中创建了数据卷文件目录,然后在目录中创建文件,并写入数据
3.退出容器
4.创建一个容器来挂载刚才这个容器$docker run -it --name dvt5 --volumes-from dvt4 ubuntu /bin/bash
5.进入新的容器,看有没有文件
6.创建一个容器来挂载刚才这个容器$docker run -it --name dvt6 --volumes-from dvt4 ubuntu /bin/bash 看看有没有文件
挂在容器就不用连接到宿主机的目录去,可以隐藏服务器的实际目录,
$docker inspect --format=”{{.Volumes}}” dvt5 dvt6
返回的是数据卷的目录不是数据卷容器的信息,dvt5 dvt6信息是一致的。修改一个容器其他容器也改了。
$docker rm dvt4 :删除数据卷容器,挂载了这个数据卷容器的容器仍然可以访问数据卷容器挂在的目录。通过数据卷容器挂载数据卷容器的作用仅仅是一个数据卷配置信息的传递(就是数据地址的引用)。
创建新的数据卷容器dvt8,
docker run -it --name dvt8 jingxiang(或者 docker run -it --name=dvt8 -v ~/ywjuan:/ywjuan ubuntu /bin/bash)
dvt9挂在dvt8
docker run -it --name dvt9 --volumes-from dvt8 ubuntu /bin/bash
删除dvt8和其数据卷:docker rm -v dvt8
$docker restart dvt9
$docker attach dvt9
#ls : 容器9中依然可以访问容器8挂载的数据卷。Docker中一个数据卷还在被容器使用那么他就会一直存在,数据卷容器的作用仅仅是传递数据卷的配置,没有其他用处。 Docker数据卷的备份和还原迁移:
$docker run --volumes-from [container name] -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar [container data volume]
--volumes-from : 挂载一个容器。
-v :指定保存数据的路径。
tar cvf :是容器运行时执行的命令,执行的是一个压缩文件tar命令,将要备份容器中的目录压缩到指定的目录下。

要备份的数据容器的数据,是备份在一个容器上,这个容器是挂载了要备份数据的容器。
执行备份命令的容器既挂载了一个需要备份的数据卷(volumes-from本就是对数据地址的引用)又挂载了一个备份数据的数据卷。(数据卷就是数据,一个文件或者文件夹)
$docker restart dvt5 : 重启dvt5容器
$docker attach dvt5 : 登陆这个容器
#ls : 现在要备份datavolume1这个目录
#exit : 退出这个容器
$docker run --volumes-from dvt5 -v ~/backup1:/backup2:wr --name=dvt10 ubuntu tar cvf /backup/dvt5.tar /datavolume1(这个容器的名字叫做dvt10,挂载在dvt5上,宿主机目录是backup1,容器中的目录是backup2,权限是读写权限,运行ubuntu系统,压缩之后的路径是/backup/dvt5.tar,/datavolume1是需要压缩备份的目录):
将一个包含数据卷的容器中的数据,通过一个容器执行一个压缩命令,从而将数据备份出来。 解压缩命令实现备份数据的还原:$docker run --volumes-from [container name] -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar [container data volume]

Docker容器的数据卷(data volume),数据卷容器,数据卷的备份和还原。的更多相关文章

  1. Docker 容器数据卷(Data Volume)与数据管理

    卷(Volume)是容器中的一个数据挂载点,卷可以绕过联合文件系统,从而为Docker 提供持久数据,所提供的数据还可以在宿主机-容器或多个容器之间共享.通过卷,我们可以可以使修改数据直接生效,而不必 ...

  2. Docker系列教程05-Docker数据卷(Data Volume)学习

    引言 在Docker中,容器的数据读写默认发生在容器的存储层,当容器被删除时其上的数据将会丢失.要想实现数据的持久化,需要将数据从宿主机挂载到容器中.目前Docker提供了三种方式将数据从宿主机挂载到 ...

  3. centos7下安装docker(13.1docker存储--data volume)

    我们现在知道docker 有两种存储方式:storage driver和data volume stroage driver这种存储方式主要是存储那些无状态的数据,是镜像层和容器层组成的,而data ...

  4. 22. docker 数据持久化 Data Volume

    1 . 使用场景 在docker 容器被删除的时候  希望数据不丢失 2 . Volume 的使用 * 注意 在 mysql 的 Dockerfile 内 定义了 VOLUME ["var/ ...

  5. 数据持久化之Data Volume

    废话不多说直接操作 1.启动一个MySQL测试容器 [root@localhost labs]# docker pull mysql #下载MySQL镜像 [root@localhost labs]# ...

  6. jQuery1.9.1源码分析--数据缓存Data模块

    jQuery1.9.1源码分析--数据缓存Data模块 阅读目录 jQuery API中Data的基本使用方法介绍 jQuery.acceptData(elem)源码分析 jQuery.data(el ...

  7. Docker数据管理-数据卷 data volumes和数据卷容器data volumes containers的使用详解

    此文来源于:https://yq.aliyun.com/ziliao/43471 参考原文件之外,做了些修改. Volume数据卷是Docker的一个重要概念.数据卷是可供一个或多个容器使用的特殊目录 ...

  8. docker 数据卷和docker数据卷容器以及数据卷的备份和还原

    一:数据卷 1.什么是数据卷 数据卷是通过特殊设计的目录,可以绕过联合文件系统,为一个或者多个容器提供服务,数据卷是在docker宿主机当中,数据卷可以是文件也可以是文件夹. 2.特点 1.数据卷在容 ...

  9. Docker数据卷Volume实现文件共享、数据迁移备份(三)--技术流ken

    前言 前面已经写了两篇关于docker的博文了,在工作中有关docker的基本操作已经基本讲解完了.相信现在大家已经能够熟练配置docker以及使用docker来创建镜像以及容器了.本篇博客将会讲解如 ...

随机推荐

  1. es6 --数组--Array.from() 、Array.isArray()、Array.of()、find()、findIndex()、fill()、entries() 、keys() ,values()

    将两类对象转为真正的数组 Array.from()方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Se ...

  2. Echarts-之显示百分比

    对于使用echarts要显示百分比,要改两个地方,第一个地方时坐标轴显示为百分比的格式,第二个是让值以百分比的形式显示,如50,在图上面显示为50%. yAxis: [ { type: 'value' ...

  3. python学习之-- 故障记录汇总

    以下为我编程期间遇到的错误并进行记录,起始时间2017-6-21 时间:2018/11/21问题现象:ajax 执行异步提交后,在访问日志看出现了2次post执行分析:默认ajax提交是执行一次,然后 ...

  4. FMDB使用Cached Statement功能

    FMDB使用Cached Statement功能   在FMDB中,Cached Statement功能是一种提高SQLite数据库访问的技术.在SQLite中,所有的SQL语句都会被编译,形成预处理 ...

  5. PyTorch学习笔记之计算图

    1. **args, **kwargs的区别 def build_vocab(self, *args, **kwargs): counter = Counter() sources = [] for ...

  6. JavaWeb过滤器.监听器.拦截器-?原理&区别

    过滤器可以简单理解为“取你所想取”,忽视掉那些你不想要的东西:拦截器可以简单理解为“拒你所想拒”,关心你想要拒绝掉哪些东西,比如一个BBS论坛上拦截掉敏感词汇. 1.拦截器是基于java的反射机制,过 ...

  7. Android Service实现双向通信(一)

    首先,大概来总结一下与Service的通信方式有很多种: 通过BroadCastReceiver:这种方式是最简单的,只能用来交换简单的数据: 通过Messager:这种方式是通过一个传递一个Mess ...

  8. 百科知识 kux文件如何打开

    即使是官方自带的浏览器也无法打开   你可以直接复制文件名   然后在百度里搜即可   你自己下载的东西还是能转码的      

  9. PS 基础知识 渐变编辑器如何使用

    ps渐变编辑器在哪 [ 标签:渐变,ps 渐变,编辑器 ] _______志 敏 回答:3 人气:9 解决时间:2009-04-16 15:28 满意答案 你先点渐变工具 然后左上出现渐变条设置 如图 ...

  10. POJ 3978(求素数)

    知识点:      1.求素数的test,从2~sqrt(n):           2.假设数据非常多,能够用素数表记录,然后sum=prime[m]-prime[n]求得! ! !! !!! !! ...