容器数据卷 ¶
什么是容器数据卷 ¶
Docker的理念回顾
- 将应用和环境打包成一个镜像!
- 数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!
- 需求:数据可以持久化
- MySQL,容器删了,删库跑路!需求:MySQL数据可以存储在本地!
- 容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux 宿主机上面!
总结
容器的持久化和同步操作!容器间也可以数据共享!
使用数据卷 ¶
方式一:使用命令进行挂载 -v ¶
1. 使用 -v 启动容器 ¶
# docker run -it -v 主机目录:容器内目录
docker run -it -v /home/test:/home/test2 centos /bin/bash
2. 查看挂载信息 ¶
docker inspect centos|grep -A 10 "Mounts"
3. 测试文件是否同步 ¶
4. 测试删除容器、重新启动、文件是否存在 ¶
1. 停止容器
2. 启动容器
3. 查看容器内数据是否存在

结论
我们以后修改文件只需在 Linux 宿主机修改即可,容器内会自动同步!
案例:启动 mysql 并持久化 ¶
1. 启动 mysql:8.0 ¶
docker run -it -d --name=mysql8.0 -p 3306:3306 -v ./mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=12345678 mysql:8.0
2. 打开 Data Sources 测试连接 ¶
3. 新建数据库 test001 查看数据是否持久化 ¶
4. 删除容器、重新启动 看数据是否持久化 ¶
结论
我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能!
具名挂载和匿名挂载 ¶
docker vloume 命令 ¶
查看所有的 vloune 的情况
docker vloume ls
查看卷具体信息
docker vloume inspect <卷名称>
-v 挂载 参数使用 ¶
# 如何 具名挂载 、 匿名挂载、指定路径挂载
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v 宿主机绝对路径:容器内路径 # 指定路径挂载
-
docker
容器内的卷,没有指定目录的情况下是在/var/lib/docker/volumes/xxxxx/_data
-
我们通过具名挂载可以方便的找到我们的一个卷,大多数情况在使用的
具名挂载
扩展:
# 通过-v容器内路径: ro rw 改变读写权限
ro readonly #只读,这个路径只能通过宿主机来操作,容器内部无法操作!
rw readwrite #可读可写
#一旦这个了设置了容器权限,容器对我们挂载出来的内容就有权限了!
docker run -d -P --name nginx -v test-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx -v test-nginx:/etc/nginx:rw nginx