Docker 中卷组管理

一.概念  

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

posted on 2019-11-15 07:35  负重前行岁月静好  阅读(315)  评论(0编辑  收藏  举报