介绍
数据卷是一个可供容器使用的特殊目录,将 主机操作系统目录 直接映射 进 容器
相当于共享文件夹
数据卷可以提供很多有用的特性,如下所示:
- 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效方便;
- 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;
- 对数据卷的更新不会影响镜像,解耦了应用和数据;
- 数据卷生存周期独立于容器的生存周期。
数据卷会一直存在,直到没有容器使用,可以安全地卸载它。
应用场景
- 将程序的 日志文件 保存到宿主机中,方便查看。否则需要进入容器中查看
- 类似 数据库 软件,数据文件 保存到宿主机中,当容器崩溃、误删除时,不影响数据文件
- 在多个容器之间共享数据,多个容器可以 读写 同一个目录下的文件,实现共享数据。
- 需要把容器数据在不同的宿主机之间备份、恢复或迁移时,数据卷是很好的选择。
比如:web应用都会有配置文件,数据库连接配置等信息,将web应用打包进docker,运行容器时可以与宿主机共享一个配置文件
挂载主机目录作为容器数据卷
使用docker run -v 主机目录:容器数据卷挂载主机目录作为容器数据卷
docker run -d -p 8080:8080 --name web -v /tomcat_logs:/usr/local/tomcat/logs tomcat
上面的命令将 宿主机 的/tomcat_logs目录 映射到 容器 的/usr/local/tomcat/logs目录:
宿主机在
/tomcat_logs目录新建、删除、修改文件,容器通过/usr/local/tomcat/logs目录可以读取到容器在
/usr/local/tomcat/logs目录新建、删除、修改文件,宿主机通过/tomcat_logs目录可以读取到
这个功能在进行测试的时候十分方便,比如用户可以将一些程序或数据放到本地目录中,然后在容器内运行和使用。
注意:
- 主机目录 的路径必须是 绝对路径
- 主机目录、容器目录如果不存在,Docker会自动创建。
查看元数据
docker inspect 容器id
重启容器
重启容器,数据卷依然有效:
主机在
/tomcat_logs目录新建、删除、修改文件,容器通过/usr/local/tomcat/logs目录可以读取到容器在
/usr/local/tomcat/logs目录新建、删除、修改文件,主机通过/tomcat_logs目录可以读取到
设置读写权限
Docker挂载数据卷的默认权限是读写(rw),用户也可以通过ro指定为只读:
$ docker run -d -p 8080:8080 --name web -v /tomcat_logs:/usr/local/tomcat/logs:ro tomcat
加了:ro之后,容器内对所挂载数据卷内的数据就无法修改了。
也可以挂载一个主机文件作为数据卷,但会出问题
更多功能:
https://www.cnblogs.com/sparkdev/p/8504050.html
https://www.cnblogs.com/sparkdev/p/6216154.html


