问题:通过镜像创建一个容器。容器一旦被销毁,则容器内的数据将一并被删除。但有些情况下,通过服务器上传的图片出会丢失。容器中的数据不是持久化状态的。
那有没有一种独立于容器、提供持久化并能服务于多个容器的东西呢?
什么是数据卷
数据卷 : 是一个可供一个或多个容器使用的特殊目录
特性:
· 数据卷可以在容器之间共享和重用
· 对数据卷的修改会立马生效
· 对数据卷的更新,不会影响镜像
· 数据卷默认会一直存在,即使容器被删除
为什么需要数据卷?
这得从 docker 容器的文件系统说起。出于效率等一系列原因,docker 容器的文件系统在宿主机上存在的方式很复杂,这会带来下面几个问题:
· 不能在宿主机上很方便地访问容器中的文件。
· 无法在多个容器之间共享数据。
· 当容器删除时,容器中产生的数据将丢失。
为了解决这些问题,docker 引入了数据卷(volume) 机制。数据卷是存在于一个或多个容器中的特定文件或文件夹,这个文件或文件夹以独立于 docker 文件系统的形式存在于宿主机中。
数据卷的最大特定是:其生存周期独立于容器的生存周期。
使用数据卷的最佳场景
· 在多个容器之间共享数据,多个容器可以同时以只读或者读写的方式挂载同一个数据卷,从而共享数据卷中的数据。
· 当宿主机不能保证一定存在某个目录或一些固定路径的文件时,使用数据卷可以规避这种限制带来的问题。
· 当你想把容器中的数据存储在宿主机之外的地方时,比如远程主机上或云存储上。
· 当你需要把容器数据在不同的宿主机之间备份、恢复或迁移时,数据卷是很好的选择。
数据卷应用
路径方式
将项目案例放入指定路径中,-v数据卷。启动Tomcat。
docker run -d -p 8080:8080 --name tomcat-8080 -v /opt/volumn_exam:/usr/local/tomcat/webapps tomcat