轻松学透docker数据卷

Posted Friends of the wind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了轻松学透docker数据卷相关的知识,希望对你有一定的参考价值。


学习一点通

docker数据卷:类似于Linux的一种卷,挂载到目录,实现容器内数据备份、配置修改。
特点:

  1. 数据卷可以在容器之间共享和复用
  2. 对数据卷的修改会立即影响到对应容器
  3. 对数据卷的修改不会影响镜像
  4. 即使容器被删除,只要不删除数据卷的本机目录,数据卷一直存在

学习窍门:命令记不住?教你一招,创造使用命令关键字的场景
本节重要命令:
检查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,查看数据是否在

数据依然存在

以上是关于轻松学透docker数据卷的主要内容,如果未能解决你的问题,请参考以下文章

Portainer认识安装使用

docker容器数据卷

Docker容器和数据可视化管理工具Flocker

Docker——Docker 容器数据卷(Volumes)

Docker----数据卷安全

Docker 数据卷