学习一点通
docker数据卷:类似于Linux的一种卷,挂载到目录,实现容器内数据备份、配置修改。
特点:
- 数据卷可以在容器之间共享和复用
- 对数据卷的修改会立即影响到对应容器
- 对数据卷的修改不会影响镜像
- 即使容器被删除,只要不删除数据卷的本机目录,数据卷一直存在
学习窍门:命令记不住?教你一招,创造使用命令关键字的场景
本节重要命令:
检查inspect 卷volumes
将复杂理论变成口诀,越少越好,越耳熟能详最佳!例如:数据卷操作,增删查,具体的关键命令再一 一对应。
我们在练习的时候,把可以随意命名的地方,用命令关键字,这样久而久之,命令记住了,实验也做通了。
一、创建普通数据卷
实例1:
1.创建数据卷目录
mkdir /root/apps
2.运行Tomcat容器,并挂载数据卷到网页根目录
注意:前提是下载或载入Tomcat镜像
docker run -d -p 8081:8080 --name tomcat1
-v /root/apps:/usr/local/tomcat/webapps tomcat
3.进入容器,启动Tomcat
docker exec -it tomcat1 /bin/bash
/usr/local/tomcat/bin/startup.sh
创建测试网页
cd apps/test2/
echo volumes > index.html
访问测试
4.追踪查看容器日志,修改数据卷内容,看日志变化
docker logs -f tomcat1
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
实例
Tomcat演示
匿名挂载:
docker run -d -p 8084:8080 --name tomcat4
-v /usr/local/tomcat/webapps tomcat
进入容器:
docker exec -it tomcat3 /bin/bash
进入网页目录,创建测试目录
cd webapps
mkdir test
创建测试文件,启动Tomcat
echo "<h1>volumes</h1>" > index.html
验证:查看
验证:
1)查看容器tomcat3详情,找到mount标号
docker inspect tomcat3
2)ls /var/lib/docker/volumes/data_vo1/_data/
具名挂载:
docker run -d -p 8083:8080 --name tomcat3
-v compose:/usr/local/tomcat/webapps tomcat
验证:
1)网页访问到测试页
2)本机可以查看到数据卷目录
三、数据卷挂载mysql
1.下载mysql5.7镜像
docker pull mysql5.7
2.启动mysql容器,映射端口、设置密码、挂载自动数据卷
docker run -itd --name volumes1 -p 3306:3306
-e MYSQL_ROOT_PASSWORD=123.com
-v mysqldata:/var/lib/mysql mysql:5.7
3.连接数据卷,创建测试表(用任意方式登录数据库即可,示例以Navicat登录)
4.删除volumes1容器
docker stop volumes1
删除所有容器
docker rm -f $(docker ps -aq)
docker rm volumes1
5.此时,无法登录数据库,查看数据卷是否还有数据
ls /var/lib/docker/volume/mysqldata/_data
6.新建容器,复用旧数据卷
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 inspect1 testvolume /bin/bash
5.查看测试数据卷
可查看到两个数据卷
1)进入容器
docker exec -it inspect1 /bin/bash
2)创建测试文件
cd volume01
[root@a138176e8333 volume01]# touch inspect1
[root@a138176e8333 volume01]# cd …/volume02
[root@a138176e8333 volume02]# touch inspect2
3)进入本地数据卷目录,可查看到在容器创建的文件
数据卷:容器间数据双向同步共享
1.创建两个容器,数据卷共享inspect1的数据卷
docker run -itd --name inspect2 --volumes-from inspect1 testvolume
docker run -itd --name inspect3 --volumes-from inspect1 testvolume
2.进入容器,测试共享
docker exec -it inspect2 /bin/bash
cd volume1
touch inspect3
docker exec -it inspect3 /bin/bash
cd volume1
ls
touch inspect1
3.关闭或删除inspect1,查看数据是否在
数据依然存在