数据卷

假如你创建了一个MySQL的容器,并且在MySQL中存储了一些数据

  • 一旦这个MySQL容器被删除了,那数据就一起丢失了
  • 所以我们要将数据持久化

容器之间,数据共享的技术

  • Docker容器中产生的数据,可以时刻同步到本地,这就是卷技术
  • 其实就是目录的挂载,将容器内的目录,挂载到宿主机上(容器内的目录 与 宿主机目录 的双向绑定)

数据卷的目的

  1. 容器数据的持久化和同步操作
  2. 容器间数据共享

数据卷相关命令

  1. docker volume ls

挂载

创建容器时做挂载

使用-v参数

docker run -it -v <主机目录>:<容器内目录> ...
    #windows中的路径,比如D:\data。应该写成:/d/data

# 查看是否挂载
docker inspect <容器ID>

image.png

拓展参数

-v <主机目录>:<容器内目录>:ro    #readonly        容器对宿主机的目录只读
-v <主机目录>:<容器内目录>:rw    #readwrite    容器对宿主机的目录可读可写

在Dockerfile中写挂载

还有一种方法,在Dockerfile中写挂载命令
请参考《Dockerfile》

挂载类型:具名/匿名挂载

挂载有两种方式,一个是具名挂载,一个是匿名挂载。

  1. 具名挂载:挂载时,指定了宿主机的目录,或者指明了卷的名称
  2. 匿名挂载:挂载时,没有指定目录或卷的名称

匿名挂载举例:

$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的挂载配置,复制过来了

把三个容器都删除了,匿名卷才会被删除

如果指定的是具名挂载,三个容器删除了,数据卷还在

```