一.概念  

  数据卷是一个可供一个或多个容器使用的特殊目录实现让容器的一个目录和宿主机中的一个文件或者目录进行绑定。数据卷 是被设计用来持久化数据的,对于数据卷你可以理解为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 删除后数据是找不回来的。

Docker 中卷组管理的更多相关文章

  1. AIX中卷组管理

      1.创建卷组 使用mkvg指令创建卷组. mkvg 指令参数 -B 创建大型卷组,该卷组最大能容纳128个物理卷和512个逻辑卷 -C 创建增加型并发卷组 -f 强制创建卷组 -G 与-B一样,创 ...

  2. Linux LVM卷组管理

    Linux LVM卷组管理 由于传统的磁盘管理不能对磁盘进行磁盘管理,因此诞生了LVM技术,LVM技术最大的特点就是对磁盘进行动态管理. 由于LVM的逻辑卷的大小更改可以进行动态调整,且不会出现丢失数 ...

  3. Docker - 卷组管理(三)

    一.不指定宿主机目录 首先运行一个nginx容器 docker run -d --name mynginx -p 8080:80 -v /usr/share/nginx/html nginx --na ...

  4. docker数据卷的管理和使用

    数据卷的使用,数据库可以保证如果容器出现问题但是数据不丢失的作用,比如MySQL/date下的数据 或者Nginx根目录下的index.html 查看数据卷 [root@docker ~]# dock ...

  5. Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理

    (一)相关概念 逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先需要了解逻辑卷管理中的一些概念. 物理卷(Physical Volume, ...

  6. Docker Volume 之权限管理(转)

    Volume数据卷是Docker的一个重要概念.数据卷是可供一个或多个容器使用的特殊目录,可以为容器应用存储提供有价值的特性: 持久化数据与容器的生命周期解耦:在容器删除之后数据卷中的内容可以保持.D ...

  7. Docker Volume 之权限管理(一)

    摘要: Volume数据卷是Docker的一个重要概念.数据卷是可供一个或多个容器使用的特殊目录,可以为容器应用存储提供有价值的特性.然而Docker数据卷的权限管理经常是非常令人困惑的.本文将结合实 ...

  8. AIX 5L 系统管理技术 —— 存储管理——卷组

    卷组 在安装系统时,就会创建一个rootvg卷组.包含自带硬盘(内置硬盘)和系统逻辑卷,一个系统只能有一个rootvg卷组.一般情况下rootvg卷组最好只包含自带硬盘. 一.创建卷组 在创建卷组之前 ...

  9. Docker背后的容器管理——Libcontainer深度解析

    Libcontainer 是Docker中用于容器管理的包,它基于Go语言实现,通过管理namespaces.cgroups.capabilities以及文件系统来进行容器控制.你可以使用Libcon ...

随机推荐

  1. GRPC的metadata使用

    文章目录 一.简析 1.创建metadata 2.发送metadata 3.接收metadata 二.代码举例 1.proto文件编写 2.server端编写 3.client端编写 三.实际使用举例 ...

  2. POJ 1651 Mulitiplication Puzzle

    The multiplication puzzle is played with a row of cards, each containing a single positive integer. ...

  3. HDU1885 Key Task

    The Czech Technical University is rather old — you already know that it celebrates 300 years of its ...

  4. Koa - 使用koa-multer上传文件(上传限制、错误处理)

    前言 上传文件在开发中是很常见的操作,今天我选择使用koa-multer中间件来实现这一功能,除了上传文件外,我还会对文件上传进行限制,以及发生上传错误时的处理. 由于原来的 koa-multer 已 ...

  5. Python脚本之三种运行方式,你会几个?

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:Jeremy_Lee123  一.交互模式下执行 Python 这种模式 ...

  6. Python3 类与对象之王者荣耀对战小游戏

    王者荣耀对战小游戏 # 定义英雄: 亚瑟 class Arthur: hero_type = 'Tank' def __init__(self, attack_value=164, armor=98, ...

  7. 【Webpack】320- Webpack4 入门手册(共 18 章)(下)

    介绍 1. 背景 最近和部门老大,一起在研究团队[EFT - 前端新手村]的建设,目的在于:帮助新人快速了解和融入公司团队,帮助零基础新人学习和入门前端开发并且达到公司业务开发水平. 本文也是属于[E ...

  8. Wireshark数据包分析入门

    Wireshark数据包分析(一)——使用入门   Wireshark简介: Wireshark是一款最流行和强大的开源数据包抓包与分析工具,没有之一.在SecTools安全社区里颇受欢迎,曾一度超越 ...

  9. 【CentOS7】开发环境配置

    [CentOS7]开发环境配置 目录 ===================================================================== 1.安装openjdk ...

  10. Mybatis需要注意的细节

    mybatis第二篇 1.${}和#{}的区别 1.#在传参的时候,会自动拼接单引号:$不能拼接单引号; 2.$传参时,一般不支持jdbcType指定类型的写法;#则可以;如: ​ #{name,jd ...