数据卷
假如你创建了一个MySQL的容器,并且在MySQL中存储了一些数据
- 一旦这个MySQL容器被删除了,那数据就一起丢失了
- 所以我们要将数据持久化
容器之间,数据共享的技术
- Docker容器中产生的数据,可以时刻同步到本地,这就是卷技术
- 其实就是目录的挂载,将容器内的目录,挂载到宿主机上(容器内的目录 与 宿主机目录 的双向绑定)
数据卷的目的
- 容器数据的持久化和同步操作
- 容器间数据共享
数据卷相关命令
docker volume ls
挂载
创建容器时做挂载
使用-v参数
docker run -it -v <主机目录>:<容器内目录> ...
#windows中的路径,比如D:\data。应该写成:/d/data
# 查看是否挂载
docker inspect <容器ID>

拓展参数
-v <主机目录>:<容器内目录>:ro #readonly 容器对宿主机的目录只读
-v <主机目录>:<容器内目录>:rw #readwrite 容器对宿主机的目录可读可写
在Dockerfile中写挂载
还有一种方法,在Dockerfile中写挂载命令
请参考《Dockerfile》
挂载类型:具名/匿名挂载
挂载有两种方式,一个是具名挂载,一个是匿名挂载。
- 具名挂载:挂载时,指定了宿主机的目录,或者指明了卷的名称
- 匿名挂载:挂载时,没有指定目录或卷的名称
匿名挂载举例:
$docker run -d -P --name ngix01 -v /etc/nginx nginx
#创建一个容器,并将/etc/nginx目录挂载出来
#但此时没有指定宿主机的目录
$docker volume ls
#查看所有卷,你能看到,没有名字的卷就是匿名挂载时创建的
匿名挂载时,所创建卷的保存目录:/var/lib/docker/volumes/xxx/...
数据卷容器(—volumes-from)
两个容器间如何做到数据共享,共用一个数据卷容器
- 比如多个MySQL数据共享一个
```shell
创建一个容器
docker run —it —name docker01 centos #注意,这里创建的是匿名卷创建第二个容器
docker run —it —name docker02 —volumes-from docker01 centos—volumes-from 数据卷与docker01的相同
如此,docker01与docker02就共用了同一个数据卷
创建第三个容器
docker run —it —name docker03 —volumes-from docker01 centos
#其实是把docker01的挂载配置,复制过来了
把三个容器都删除了,匿名卷才会被删除
如果指定的是具名挂载,三个容器删除了,数据卷还在
```
