一.数据卷的作用
用来实现容器与宿主机之间或容器与容器之间的数据共享
对于一些容器我们我往往需要经常的修改配置文件,频繁的进入容器显得很麻烦。
对于容器(mysql)中的数据,我们希望可以持久化到本地,作为一种备份。
二.数据卷特点
数据卷可以在容器之间共享和复用
对数据卷的修改会立即影响到对应容器
对数据卷的修改不会影响镜像
数据卷一直存在,即使容器被删除
实例1:
1.创建数据卷目录
mkdir /root/apps
2.运行Tomcat容器,并挂载数据卷到网页根目录
docker run -d -p 8081:8080 --name tomcat1 \
-v /root/apps:/usr/local/tomcat/webapps tomcat
3.访问测试
4.追踪查看容器日志,修改数据卷内容,看日志变化
docker logs -f tomcat1
cd /root/apps
mkdir ROOT
echo "<h1>www.tomcat.com</h1>" > /root/apps/ROOT/index.html
5.数据卷容器共享,并设置容器内目录只读
docker run -d -p 8082:8080 --name tomcat2 \
-v /root/apps:/usr/local/tomcat/webapps:ro tomcat
====================================
三.数据卷操作
1.自定义数据卷目录
docker run -v 本地目录路径:容器内路径
2.自动创建数据卷
docker run -v 数据卷名(自动创建):容器内路径
3.常用数据卷命令
查看数据卷
docker volume ls
创建数据卷
docker volume create data_vo1
查看某个卷详情
docker volume inspect data_vo1
删除数据卷
docker volume rm 数据卷名
删除未用的数据卷
docker volume prune
4.实例演示
具名挂载:
docker run -d -p 8083:8080 --name tomcat3 \
-v data_vo1:/usr/local/tomcat/webapps tomcat
ls /var/lib/docker/volumes/data_vo1/_data
匿名挂载:
docker run -d -p 8084:8080 --name tomcat4 \
-v /usr/local/tomcat/webapps tomcat
=======================================
实例2:数据卷挂载mysql
1.下载mysql5.7镜像
docker pull mysql5.7
2.启动mysql容器,映射端口、设置密码、挂载自动数据卷
docker run -itd --name mysql1 -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123.com \
-v mysqldata:/var/lib/mysql mysql:5.7
3.连接数据库,创建测试表
4.删除mysql1容器
docker stop mysql1
docker rm mysql1
5.查看数据卷是否还有数据
ls /var/lib/docker/volume/mysqldata/_data
6.新建容器,复用旧数据卷
删除所有容器
docker rm -f $(docker ps -aq)
docker run -itd --name mysql1 -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123.com \
-v mysqldata:/var/lib/mysql mysql:5.7
7.连接数据库,查看旧数据表是否存在
8.再新建容器,以修改后的配置文件启动
删除所有容器
docker rm -f $(docker ps -aq)
docker run -itd --name mysql1 -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123.com \
-v mysqldata:/var/lib/mysql \
-v mysqlconf:/etc/mysql mysql:5.7
=======================================
Dockerfile挂载数据卷
1.创建目录
mkdir /root/data_volume
cd /root/data_volume
2.创建Dockerfile
vim Dockerfile
FROM centos:7
VOLUME ["volume01","volume02"]
CMD echo "---end---"
CMD /bin/bash
3.构建镜像
docker build -t testvolume .
4.启动容器
docker run -itd --name testvolume1 testvolume /bin/bash
5.查看测试数据卷
====================================
数据卷容器:容器间数据双向同步共享
1.创建两个容器,数据卷共享testvolume1
docker run -itd --name testvolume2 --volumes-from testvolume1 testvolume
docker run -itd --name testvolume3 --volumes-from testvolume1 testvolume
2.进入容器,测试共享
docker exec -it testvolume2 /bin/bash
cd volume1
touch test2
docker exec -it testvolume3 /bin/bash
cd volume1
ls
touch test3
3.关闭testvolume1,查看数据是否在