一、概述

docker 容器数据卷是容器在运行过程中持久化数据的一种方式,卷是目录或文件存在于一个或多个容器中,由docker 挂载到容器,但不属于联合文件系统,因此能够绕过Union File System 提供一些用于持续存储或共享数据的特性;卷的设计目的就是数据持久化,完全独立于容器的生命周期,因此docker不会在容器删除时,删除其挂载的数据卷
特点:

  1. 数据卷可在容器之间共享或重用数据。
  2. 卷中的更改可以直接生效。
  3. 数据卷中的更改,不会包含在镜像中的更新。
  4. 数据卷的生命周期一直持续到没有容器使用它为止。

二、 容器数据卷添加

2.1、直接命令添加

  1. docker run -it -v /宿主机绝对路径:/容器内目录:权限 镜像名
  2. 权限: ro readonly容器只能查看)
  3. 权限: rw (容器内可读可写)
  4. #例子:启动Tomcat容器,执行完此命令后我们已经启动一个tomcat。并且宿主机的/home/webapps目录和容器中的/usr/local/tomcat/webapps 目录相关联,当这两个目录中的文件会互相同步
  5. docker run -d -p 8080:8080 --name tomcat-v -v /home/webapps:/usr/local/tomcat/webapps tomcat
  6. #此时可以通过 docker inspect 命令查看挂载信息,可以看到binds或者mounts属性有该关联信息
  7. #格式:docker inspect 容器ID

2.2.1、匿名挂载和具名挂载

  1. 所有的docker容器内的卷,没有指定目录的情况下都是再 /var/lib/docker/volumes/xxx/_data
  2. 我们通过具名挂载可以方便找到一个卷,所以大部分情况下都是使用具名挂载
  3. 如何确定具名和匿名挂载:
  4. -v 容器内的路径 #匿名挂载
  5. -v 卷名:容器内的路径 #具名挂载
  6. -v /宿主机的路径/容器内的路径 #具名挂载
  7. #docker volume ls:查看所有挂载的卷,返回卷名
  8. #docker volume inspect 容器卷名 #查看一下某个卷的具体信息

2.2、docker file 添加

在dockerfile里通过命令··VOLUME [“/dataVlolumeContainer1”,”/dataVlolumeContainer1”]·· 可以创建目录

三、数据卷容器

  1. docker run -it --name 容器1名称 --volumes-from 来源容器名称 启动的镜像名/镜像ID
  2. #这样可以实现容器1内的文件和来源容器的文件路径下的内容一致,从而实现容器间的数据共享
  3. #只要其中一个容器还在,数据就还在,不会因为其中一个容器被删除了数据就丢失的情况
  4. #容器之间的配置信息传递,容器卷的生命周期一致持续到没有容器使用为止,但是一旦数据持久化到了本地,本地的数据是不会删除的