一.概念  

  数据卷是一个可供一个或多个容器使用的特殊目录实现让容器的一个目录和宿主机中的一个文件或者目录进行绑定。数据卷 是被设计用来持久化数据的,对于数据卷你可以理解为NFS中的哪个分享出来的挂载点,指宿主机共享的目录。

二.功能和特性
  容器中数据的持久存储
  容器间的资源共享
  容器的迁移(分布式)
  对数据卷的修改会立马生效
  对数据卷的更新,不会影响镜像
  数据卷默认会一直存在,即使容器被删除 (注意docker自主管理的会被删除,容器删除前一定要对数据卷进行备份)

三.作用

  实现了宿主机之间的文件共享 并且实现了数据的持久化

四.使用

  -v 选项
注意:-v 后面的目录如果在宿主机及docker当中不存在时,都会自动创建
指定的宿主机目录会覆盖容器目录内容
/tian:/usr/local/apache2
宿主机目录:容器web目录
第一类:指定宿主机目录
#实现web网站数据持久化
docker run -d -p 88:80 -v /tian:/usr/local/apache2/htdocs httpd
验证数据持久化:
docker rm -f $(docker ps -aq)
docker run -d -p 89:80 -v /tmp/tian:/usr/local/apache2/htdocs httpd

第二类:docker自管理
#docker自管理挂载
docker run -d -p 89:80 -v /usr/local/apache2/htdocs httpd
查看挂载点:
docker inspect bbb11e5d1bd6 | grep -i "Source"
docker自管理挂载点:
/var/lib/docker/volumes/3b93f4c1c9a202afa5a118240a8c172521999521ede613bf329570e57ac70e6b/_data

第三类:基于容器实现文件共享

docker run -d -p 87:80 --volumes-from 240c900beb78 httpd
总结:
1.指定挂载点:宿主机目录会覆盖容器目录内容,宿主机目录会被挂载到容器当中
2.docker自管理:docker目录会覆盖宿主机目录

项目1:上线小游戏网站
第一步:启动容器
docker run -d -p 88:80 -v /tian1:/usr/local/apache2/htdocs httpd

第二步:把网站数据放到/tian1目录之下
cp game /tian1 -a

第三步:浏览器访问
192.168.200.13:88/game/sky_fight.html

第四步:验证数据持久化:
删掉容器
docker rm -f $(docker ps -aq)
再次启动容器
docker run -d -p 86:80 -v /tian1:/usr/local/apache2/htdocs httpd
浏览器验证:

项目2:
1.启动mysql容器
2.创建数据库和表
3.模拟节点A宕机
4.在节点B上启动并恢复数据

第一步:启动mysql容器
docker run -d -p 3306:3306 -v /tian2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 mysql

第二步:进入容器创建数据库
docker exec -it ba5b6d4bbda4 bash
root@ba5b6d4bbda4:/# mysql -uroot -p123
create database tian;
use tian;
create table test (
id int,
name char(20),
gender char(20));
show tables;
insert into test values (1,"tian","M");
select * from test;

第三步:复制文件至节点B
scp -r /tian2 192.168.200.14:/root

第四步:节点B启动docker数据库并验证数据一致性
docker run -d -p 3306:3306 -v /root/tian2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 mysql
docker ps -a

查看卷组
docker volume ls

在删除容器的时候删除docker自管理的目录: #只需要在删除容器的时候使用-v选择即可
docker rm -f -v 377323cbe8a3c

批量删除孤儿卷:
docker volume rm $(docker volume ls -q)

五.volume生命周期管理
1.备份
因为 volume 实际上是 host 文件系统中的目录和文件,所以 volume 的备份实际上是对文件系统的备份
docker run -d -v /tian:/usr/share/nginx/html nginx-game:v1
2.恢复
volume 的恢复也很简单,如果数据损坏了,直接用之前备份的数据拷贝到 /tian就可以了。
3.迁移
docker stop 当前容器。启动新版本容器并 mount 原有 volume
docker run -d -v /tian:/var/www/html httpd
4.销毁
可以删除不再需要的 volume,但一定要确保知道自己正在做什么,volume 删除后数据是找不回来的。

最新文章

  1. [No00008C]图解SQL的各种连接join让你对SQL的连接一目了然
  2. 关于sql 的列转行
  3. Windows WMIC命令使用详解
  4. 谁在死锁Mutex——用Windbg查找Mutex死锁所有者线程
  5. js基础细节
  6. Android Framework框架_转
  7. Android SurfaceView + MediaPlayer实现分段视频无缝播放
  8. webstorm使用教程--主题设置
  9. java_设计模式_装饰者模式_Decorator Pattern(2016-07-28)
  10. c语言memset详解
  11. FZU 2170 花生的序列(动态规划)
  12. 高斯RBF核函数中Sigma取值和SVM分离面的影响
  13. 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场
  14. 【春华秋实】深入源码理解.NET Core中Startup的注册及运行
  15. LOJ#510 北校门外的回忆(找性质+倍增+线段树)
  16. CentOS 6.5 64位 安装Nginx, MySQL, PHP
  17. 2017.12.10《“剑锋OI”普及组多校联盟系列赛(14)#Sooke#Kornal 的课余时间 》分析报告
  18. What's news in Visual Studio 2017
  19. 动态创建js脚本和 css样式
  20. hdu6398 计算几何

热门文章

  1. JavaScript基础3
  2. Redis第二讲【Redis基本命令和五大数据结构】
  3. Java基础篇
  4. Django之models模块
  5. java中小数点位数
  6. CCF-CSP题解 201709-3 JSON查询
  7. Nginx在开发中常用的基础命令
  8. 剑指offer笔记面试题2----实现Singleton模式
  9. JS---最终版本--封装缓动(变速)动画函数---增加任意多个属性&回调函数&层级&透明度
  10. Android动态添加碎片