Docker容器数据卷详解

207 阅读2分钟

什么是容器数据卷

数据如果都在容器中,容器删除数据就会丢失,需求:数据可以持久化,可以存储在本地。 所以需要容器之间可以有一个数据共享的技术!Docker容器中 产生的数据存储到本地,这就是卷技术。这就是目录的挂载,即将我们的容器里的内容挂载到Linux上。

image.png

总结:为了容器的持久化和同步操作,并且容器间也可以数据共享

使用数据卷

方式一:直接用命令来挂载 -v

docker run -it -v 主机目录:容器内目录

测试

docker run -itd -v /hmoe/ceshi:home centos /bin/bash

启动后可以通过docker inspect 容器id查看是否挂载成功

image.png

测试文件的同步

image.png

再测试!

  1. 停止容器

  2. 宿主机上修改文件

  3. 启动容器

  4. 容器内的数据依旧同步

image.png

实战测试:安装MySQL

思考: 数据持久化的问题

获取镜像:ddocker pull mysql:5.7

运行容器,需要做数据挂载,并且mysql需要配置密码:docker run -d-p 192.168.124.128:3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQ_ROOT_PASSWORD=123456 mysql:5.7

启动成功后数据就挂载上了。

假设我们将容器删除,会发现本地的数据卷依旧没有丢失, 这就实现了容器数据持久化功能。

具名和匿名挂载

匿名挂载 -v 容器内路径

docker run -d -P -name nginx01 -v /etc/nginx nginx

查看所有的卷的情况

docker volume ls

image.png

这种就是匿名挂载,因为在-v时只谢了容器内路径,没有写容器外路径

具名挂载 -v 卷名:容器内路径 docker -d -P --name nginx02 -v ju-ming:/etc/nginx nginx

查看卷的路径

image.png

所有docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxxx

我们通过具名挂载可以只方便的找到存在容器内的卷的位置

如何确定具名挂载还是匿名挂载

-v 容器内的路径 匿名挂载

-v 卷名:容器内路径 具名挂载

-v 宿主机路径:容器内路径

拓展:

通过 -v 容器内路径 ro rw 改变权限

ro readonly只读

rw writeonly 只写

一旦这个设置了容器权限,容器对我们挂载出来的内容就有限定了。只要看到ro就不能在docker变了,只能在宿主机里操作