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
参数进行指定
Comments NOTHING