05-Docker持久化存储

nobility 发布于 2022-08-01 2812 次阅读


Docker持久化存储

要知道镜像本身是只读的,只能通过创建的容器,在容器层进行文件的读写,若该容器被删除,则该容器中读写的数据就会消失,为了解决这个问题,Docker本身提供了两种方式,以及第三方的存储方案

数据卷方式

数据卷创建

数据卷其实就是一个存放数据的一个目录,Docker中创建的数据卷目录默认在/var/lib/docker/volumes/目录下,以数据卷名为目录名,该目录下的_data目录

在运行容器docker container run命令时使用-v参数,将宿主机的数据卷作为容器的数据卷,以MySQL为例,该镜像的具体使用参照dockerHub官网进行查询

  • 参数值的格式为数据卷名:容器中挂载数据卷的目录,使用docker image history可搜索到容器中挂载的目录
  • 若不指定该参数则创建一个自动命名的数据卷,前提是该镜像有挂载过匿名卷
  • 若该数据卷不存在则代表创建该数据卷并作为容器的数据卷,若该数据卷已经存在则代表使用该数据卷作为容器的数据卷
  • 容器删除后数据卷依然存在
  • 多个数据卷可使用多个-v参数进行指定
docker run -d -e MYSQL_ROOT_PASSWORD="root" --name=mysql1 mysql  #此时查看数据卷会有一个随机名的数据卷
docker run -d -e MYSQL_ROOT_PASSWORD="root" -v mysql:/var/lib/mysql --name=mysql2 mysql  #此时查看数据卷会有一个自定义名的数据卷

数据卷管理

  • docker volume ls:列出当前Docker中的所有数据卷
  • docker volume inspect:查看某个数据卷的详细信息
  • docker volume rm:删除某个数据卷

挂载目录方式

在运行容器docker container run命令时使用-v参数,将宿主机的目录和容器的目录进行映射

  • 参数值的格式为宿主机目录:容器目录,与数据卷不同的就是自定义了宿主机的目录
  • 由于权限的问题,最好指定--privileged参数,让容器拥有该宿主机目录的最高权限
  • 通常使用绝对路径,使用$(pwd)可获取当前宿主机的绝对路径
  • 多个目录映射可使用多个-v参数进行指定
此作者没有提供个人介绍
最后更新于 2022-08-01