十.Docker数据卷

问题:通过镜像创建一个容器,容器一旦被销毁,则容器内的数据将一并被删除,但有些情况下,通过服务器上传的图片出会丢失。容器中的数据不是持久化状态的.
那有没有一种独立于容器,提供持久化并能服务于多个容器的东西呢?

10.1什么是数据卷

数据卷:是一个可供一个或多个容器使用的特殊目录

特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷默认会一直存在,即使容器被删除

10.2为什么需要数据卷?

这得从docker容器的文件系统说起,处于效率等一系列原因,docker容器的文件系统在宿主机上存在的方式很复杂,这会带来下面几个问题:

  • 不能在宿主机上很方便地访问容器中的文件
  • 无法在多个容器之间共享数据
  • 当容器删除时,容器中产生的数据将丢失

为了解决这些问题,docker引入了数据卷(volume)机制。数据卷是存在于一个或多个容器中的特定文件或文件夹,这个文件或文件夹以独立于docker文件系统的形式存在于宿主机中

数据卷的最大特点是:其生存周期独立于容器的生存周期

使用数据卷的最佳场景

  • 在多个容器之间共享数据,多个容器可以同时以只读或者读写的方式挂载同一数据卷,从而共享数据卷中的数据
  • 当宿主机不能保证一定存在某个目录或一些固定路径的文件时,使用数据卷可以规避这种限制带来的问题
  • 当你想把容器中的数据存储在宿主机之外的地方时,比如远程主机上或云存储上。

10.3数据卷应用

#1 创建数据卷
docker volume create 数据卷名称
#创建数据卷之后,默认会存放到目录 : /var/lib/docker/volume/数据卷名称/_data目录下
#2查看数据卷
docker volume inspect 数据卷名称
#3 查看全部数据卷信息
docker volume ls
#4删除数据卷
docker volume rm 数据卷名称
#5应用数据卷
#5.1当你映射数据卷时,如果数据卷不存在,Docker会帮你自动创建
docker run -v 数据卷名称:容器内路径 镜像ID
#5.2直接指定一个路径作为数据卷的存储位置
docker run -v 路径:容器内部的路径  镜像ID

10.4案例1

数据卷方式
创建数据卷,将项目案例放入数据卷中,启动Tomcat。来访问并进行查看(数据卷应用5.1)

docker volume create vol_qfnj #创建数据卷
docker run -it --name tomcat-8080 -d -p 8080:8080 -v vol_qfnj:/usr/local/tomcat/webapps/ tomcat #运行容器

路径方式
将项目案例放入指定路径中, -v数据卷。启动Tomcat。来访问并进行查看(数据卷应用5.2)

docker run -d -p 8080:8080 --name tomcat-8080 -v /opt/volumn_exam:/usr/local/tomcat/webapps tomcat