Docker数据管理-数据卷 data volumes和数据卷容器data volumes containers的使用详解
此文来源于:https://yq.aliyun.com/ziliao/43471
参考原文件之外,做了些修改。
Volume数据卷是Docker的一个重要概念。数据卷是可供一个或多个容器使用的特殊目录,可以为容器应用存储提供有价值的特性:
- 持久化数据与容器的生命周期解耦:在容器删除之后数据卷中的内容可以保持。Docker 1.9之后引进的named volume(命名文件卷)可以更加方便地管理数据卷的生命周期;数据卷可以被独立地创建和删除。
- 数据卷可以用于实现容器之间的数据共享
- 可以支持不同类型的数据存储实现
数据的管理目前提供如下两种方式:
- 数据卷 data volumes
- 数据卷容器 data volumes containers
Docker缺省提供了对宿主机本地文件卷的支持,可以将宿主机的目录挂载到容器之中。由于没有容器分层文件系统带来的性能损失,**本地文件卷非常适合一些需要高性能数据访问的场景**,比如MySQL的数据库文件的存储。同时Docker支持通过volume plugin实现不同类型的数据卷,可以更加灵活解决不同应用负载的存储需求。比如在阿里云容器服务中可以为容器提供基于云盘的块存储、基于OSSFS和NAS/NFS的共享文件存储。
注意:
数据卷经常出的问题在于权限问题,ossfs只能有一个用户可写,加上allow_other后可多个用户读,但依然是只有一个用户可写。而且ossfs并发为10,如果大量并发的场合显然不合适。
一,数据卷
数据卷,说白了就是一个特殊目录,类似linux下对目录或文件进行mount挂载操作,只不过他绕过了文件系统。具有如下特点:
(1) 数据卷可以在容器之间进行共享和重用
(2)对数据卷的更改会立即生效
(3)对数据卷的更新不会影响到镜像 (镜像只读)
(4)卷会一直存在,知道没有容器使用
数据卷的添加可以通过-v 参数来设定,后边跟上目录。一下举例说明:
1,创建一个数据卷/homedata到容器os123中:
[root@docker5 home]# docker run -d -ti --name os123 -v /homedata centos
[root@docker5 home]# docker exex -ti os123 /bin/bash
[root@d1a05a7d5efe /]# ll
total 40
-rw-r--r--. 1 root root 18301 Jun 2 13:27 anaconda-post.log
lrwxrwxrwx. 1 root root 7 Jun 2 13:25 bin > usr/bin
drwxr-xr-x. 5 root root 380 Jun 23 02:42 dev
drwxr-xr-x. 48 root root 4096 Jun 23 02:42 etc
drwxr-xr-x. 2 root root 6 Aug 12 2015 home
drwxr-xr-x. 2 root root 6 Jun 23 02:42 homedata
..
[root@d1a05a7d5efe /]# cd homedata/
[root@d1a05a7d5efe homedata]# ll
total 0
[root@d1a05a7d5efe homedata]# touch 21yunwei.txt ;echo 123>> 21yunwei.txt
[root@d1a05a7d5efe homedata]# cat 21yunwei.txt
123
2,挂载本地服务器上的一个目录/home/data到容器os456 目录/homedata中:
home/data事先里边建立一个文件1.txt并内容hello world
[root@docker5 home]# docker run -d -ti --name os456 -v /home/data:/homedata centos
9347d5ef84ffc532000df2637ff3280da001573029e826427d3b71cc88aa4703
[root@docker5 home]# docker exec -ti os456 /bin/bash
[root@9347d5ef84ff homedata]# cd /homedata;cat 1.txt
hello world
通过上边两个容器os123 和os456,基本了解了如何创建数据卷以及如何挂载本地目录到数据卷中。注意,两个容器中的如果是单独挂载的数据卷(即没有挂载同一个数据卷容器),那么数据是互不影响的,进入不同的数据卷相同目录下比如/homedata,内容可以不一样。
注意:删除容器的时候,数据卷不会删除。如果要删除容器的时候同时删除数据卷,需加上-v参数。比如: docker rm os456 -v /homedata
二,数据卷容器
建立的容器很多时候不是单一的,需要容器之间进行数据共享,进行数据同步和更新操作。这样就需要建立一个数据卷容器。
数据卷容器就是一个普通的容器,里边带有设置好的数据卷,专门提供给其他容器挂载使用。 通过–volumes-from 数据卷容器名 来实现。
我有一个网站程序放到了服务器本机的/home/webdata目录 ,下边创建一个数据卷容器webdata,同时将我服务器上的/home/webdata挂载到数据卷容器的/web目录:
[root@docker5 home]# docker run -d -ti --name webdata -v /home/webdata:/home/web centos
进入容器并查看数据
[root@docker5 home]# docker exec -ti webdata /bin/bash
[root@289598d6e24d /]# cd /home/web/
[root@289598d6e24d web]# ll
total 7872
drwxr-xr-x. 3 root root 54 Mar 27 2013 META-INF
drwxr-xr-x. 6 root root 4096 Dec 25 2014 WEB-INF
drwxr-xr-x. 3 root root 63 Mar 27 2013 css
drwxr-xr-x. 2 root root 8192 Mar 27 2013 flags
-rw-r--r--. 1 root root 97 Mar 27 2013 index.jsp
drwxr-xr-x. 2 root root 4096 Mar 27 2013 js
drwxr-xr-x. 2 root root 6 Jun 23 03:43 probe
通过这里建立1.txt 并插入内容,可以看到服务器上的/home/webdata数据是同步的。可见容器以及目录挂载都没问题。
[root@docker5 home]# docker run -dti --volumes-from webdata --name os147 centos
[root@docker5 home]# docker run -dti --volumes-from webdata --name os258 centos
分别创建了两个容器,都通过–volumes-from webdata 挂载了同一个数据卷容器,进入os147 和os258 分别查看/home/web可见数据都是存在的,于是这里就实现了数据的共享同步。
[root@docker5 home]# docker exec -ti os147 /bin/bash
[root@b4cfa4c4e11c /]# cd /home/web/
[root@b4cfa4c4e11c web]# ll
total 7876
-rw-r--r--. 1 root root 11 Jun 23 03:46 1.txt
drwxr-xr-x. 3 root root 54 Mar 27 2013 META-INF
drwxr-xr-x. 6 root root 4096 Dec 25 2014 WEB-INF
drwxr-xr-x. 3 root root 63 Mar 27 2013 css
drwxr-xr-x. 2 root root 8192 Mar 27 2013 flags
-rw-r--r--. 1 root root 97 Mar 27 2013 index.jsp
drwxr-xr-x. 2 root root 4096 Mar 27 2013 js
drwxr-xr-x. 2 root root 6 Jun 23 03:43 probe
说明:
1,可以多次使用–volume-from参数从多个容器挂载多个目录。 也可以从其他已经挂载了数据卷的容器来挂载数据卷(类似传递)。
2,再次强调:如果删除了挂载的容器,数据卷不会被自动删除。如果要删除容器的时候同时删除数据卷,需加上-v参数。
三,通过数据卷容器进行数据备份、数据恢复和数据迁移
1,备份:我们创建一个专门用来备份probe的容器:probebak进行备份数据卷容器中的数据,命令如下
docker run -dti --volumes-from webdata --name probebak -v /home/web_probebak:/backup centos tar zcvf /backup/web_probe.tar.gz /home/web
命令为创建一个专用备份的容器probebak,挂载了数据卷容器webdata,同时将服务器本地目录 /home/web_probebak挂载到了备份容器上的/backup目录容器启动以后,会执行tar zcvf /backup/web_proce.tar.gz /home/web操作,完成服务器上/home/web备份,打包到/backup/web_proce.tar.gz,也就是打包到了/home/web_probebak/web_probe.tar.gz 实现了数据备份。
2,恢复
创建一个容器os999 ,挂载有数据卷 /testdata
[root@docker5 home]# docker run -v /testdata --name os999 centos /bin/bash
再建一个容器,通过–volumes-from os999挂载刚才设置好的数据卷,解压数据:
[root@docker5 home]# docker run --volumes-from os999 -v /home/web_probebak:/backup busybox tar zxvf /backup/web_probe.tar.gz
Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.
home/web/
home/web/probe.zip
home/web/probe/
home/web/css/
home/web/css/classic/
home/web/css/classic/datasourcetest.css.
Docker数据管理-数据卷 data volumes和数据卷容器data volumes containers的使用详解的更多相关文章
- 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解
引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...
- Java数据持久层框架 MyBatis之API学习六(Mapper XML 文件详解)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- 大数据笔记(十九)——数据采集引擎Sqoop和Flume安装测试详解
一.Sqoop数据采集引擎 采集关系型数据库中的数据 用在离线计算的应用中 强调:批量 (1)数据交换引擎: RDBMS <---> Sqoop <---> HDFS.HBas ...
- 数据在数组中存储的顺序:小端 OR 大端模式 详解
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放: 小端模式,是指数据的高 ...
- 大数据入门第八天——MapReduce详解(三)MR的shuffer、combiner与Yarn集群分析
/mr的combiner /mr的排序 /mr的shuffle /mr与yarn /mr运行模式 /mr实现join /mr全局图 /mr的压缩 今日提纲 一.流量汇总排序的实现 1.需求 对日志数据 ...
- docker入门级详解
Docker 1 docker安装 yum install docker [root@topcheer ~]# systemctl start docker [root@topcheer ~]# mk ...
- Docker数据管理(数据卷&数据卷容器)
生产环境中使用Docker的过程中,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: 数据卷(Data Volumes):容 ...
- Docker容器数据卷-Volume详解
Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume).数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享.数据 ...
- Docker 数据管理-三种数据mount方式
可以在Container可写层存储数据,但是有三个缺点: 当Container销毁时,数据不能持久保存. Container的可写层和Container所在的主机紧耦合,不容易将数据移动到其他地方. ...
随机推荐
- csp-s模拟48,49 Tourist Attractions,养花,画作题解
题面:https://www.cnblogs.com/Juve/articles/11569010.html Tourist Attractions: 暴力当然是dfs四层 优化一下,固定两个点,答案 ...
- VS2012与windos版本不兼容问题
昨天晚上加完班,想着把windows更新下.今天上午就发现再运行VS报错了,提示VS2012与windows版本不兼容,打开.sln文件后,VS自动关闭.错误如下: 查看后网上提示安装VS2012的一 ...
- dubbo入门学习(五)-----dubbo的高可用
zookeeper宕机与dubbo直连 现象 zookeeper注册中心宕机,还可以消费dubbo暴露的服务. 原因 健壮性 l 监控中心宕掉不影响使用,只是丢失部分采样数据 l 数据库宕掉后,注册中 ...
- Ubuntu为什么远程连接不上
因为没有安装ssh,输入以下命令, sudo apt-get install openssh-server openssh-client执行完再用xshell就可以连接上了
- [转] 允许远程用户登录访问mysql的方法
需要手动增加可以远程访问数据库的用户. 方法一.本地登入mysql,更改 "mysql" 数据库里的 "user" 表里的 "host" 项 ...
- Leetcode401Binary Watch二进制手表
二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59). 每个 LED 代表一个 0 或 1,最低位在右侧. 给定一个非负整数 n 代表当前 LED 亮着 ...
- C++ 静态绑定与动态绑定------绝不重新定义继承而来的缺省参数
在了解静态绑定和动态绑定之前,先了解什么是对象的静态类型,什么是对象的动态类型. 对象的静态类型:对象在声明时采用的类型.是在编译器决定的. 对象的动态类型:目前所指对象的类型.是在运行期决定的. 动 ...
- 15分钟构建超低成本数据大屏:DataV + DLA
第一步:准备低成本存储的业务数据和DLA表 OSS(https://www.aliyun.com/product/oss)是云上低成本数据存储的优选方案 DLA(https://www.aliyun. ...
- beego 批量删除问题
o := orm.NewOrm() qs := o.QueryTable(new(ExecutionJobs)) javaTimestamp = 1557738394000 qs = ...
- Shell 常用特性
管道(|) 管道 (|): 将一个命令的输出作为另外一个命令的输入. 管道同样可以在标准输入输出和标准错误输出间做代替工作,这样一来,可以将某一个程序的输出送到另一个程序的输入,其语法如下: ...