十.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