docker数据卷(Data Volumes)

介绍

数据卷是一个可供容器使用的特殊目录,将 主机操作系统目录 直接映射 进 容器
相当于共享文件夹

数据卷可以提供很多有用的特性,如下所示:

  1. 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效方便;
  2. 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;
  3. 对数据卷的更新不会影响镜像,解耦了应用和数据;
  4. 数据卷生存周期独立于容器的生存周期。
    数据卷会一直存在,直到没有容器使用,可以安全地卸载它。

应用场景

  1. 将程序的 日志文件 保存到宿主机中,方便查看。否则需要进入容器中查看
  2. 类似 数据库 软件,数据文件 保存到宿主机中,当容器崩溃、误删除时,不影响数据文件
  3. 在多个容器之间共享数据,多个容器可以 读写 同一个目录下的文件,实现共享数据。
  4. 需要把容器数据在不同的宿主机之间备份、恢复或迁移时,数据卷是很好的选择。

比如: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目录:

  1. 宿主机在 /tomcat_logs 目录新建、删除、修改文件,容器通过/usr/local/tomcat/logs目录可以读取到

  2. 容器在 /usr/local/tomcat/logs 目录新建、删除、修改文件,宿主机通过 /tomcat_logs 目录可以读取到

这个功能在进行测试的时候十分方便,比如用户可以将一些程序或数据放到本地目录中,然后在容器内运行和使用。

注意:

  • 主机目录 的路径必须是 绝对路径
  • 主机目录、容器目录如果不存在,Docker会自动创建。

查看元数据

docker inspect 容器id

可以查看到映射路径

重启容器

重启容器,数据卷依然有效:

  1. 主机在/tomcat_logs目录新建、删除、修改文件,容器通过/usr/local/tomcat/logs目录可以读取到

  2. 容器在/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


原文出处:/show_1EF5kAgKa5pZ.html