什么是数据卷
使用docker容器的时候,会产生一系列的数据文件,这些数据文件在删除docker容器时是会消失的,但是其中产生的部分内容是希望能够把它给保存起来另作用途的,Docker将应用与运行环境打包成容器发布,程序员希望在运行过程钟产生的部分数据是可以持久化的的,而且容器之间我们希望能够实现数据共享。数据卷是一个可供一个或多个容器使用的特殊目录,它将主机操作系统目录直接映射进容器。在容器中修改的内容可以在宿主机对应的目录下看到,比如:重要日志 、配置文件等。
数据卷的特点
Docker 数据卷是 Docker 容器中持久存储数据的机制,具有以下特点:
- 持久性:数据卷独立于容器的生命周期,容器删除后数据卷仍然存在,可以被其他容器挂载和使用。
- 共享性:多个容器可以共享同一个数据卷,实现数据在容器之间的共享和传递。
- 数据卷可以提供外部数据:可以将主机文件系统的目录或文件挂载为数据卷,容器可以直接访问主机上的数据。
- 容器之间隔离:即使多个容器共享同一个数据卷,它们之间的操作仍然是相互隔离的,不会相互影响。
- 高性能:与将数据存储在容器内部相比,使用数据卷通常具有更高的性能,因为数据卷可以利用主机文件系统的优势。
- 可备份和恢复:可以轻松备份和恢复数据卷中的数据,方便进行数据管理和迁移。
通过使用数据卷,Docker 提供了一种灵活且持久的方式来管理容器中的数据,使数据在容器之间共享和持久化成为可能。
Docker数据卷操作
管理卷
列出所有卷
docker volume 命令可以对 Docker 自己管理的卷(/var/lib/docker/volumes/xx)目录进行操作。
创建卷
查询卷详情
删除卷
移除无用卷
卷挂载
匿名卷
什么也不需要写,也不要加冒号,直接写容器内的目录 实际上是系统自动生成一个卷的名字
查看容器
查看所有volume
可以看到刚刚创建的nginx容器对应的是 b24408483f4adc0decfbc66787dd0534dab86bcb4715d7e166361b332a4e697c volume 进入到 目录 可以看到容器内的数据
测试持久化,进入容器内目录创建test文件
回到宿主机查看
具名卷
首先创建一个 volume nginx
使用具名卷映射
查看容器
查看所有volume
可以看到刚刚创建的nginx容器对应的是 nginx volume 进入到 目录 可以看到容器内的数据
测试持久化,进入容器内目录创建test文件
回到宿主机查看
删除容器重新创建
进入容器内查看数据
持久化保存成功
绑定挂载(bind)
将本地主机的 path 映射到 容器里
查看容器
查看所有volume,可以看出来没有多出来的 volume name
进入到主机 目录 看不到容器内的数据, 需要注意的是
使用 bind 方式做数据卷的映射时,首次 docker run -v 运行,如果本机的文件夹是没有内容的,docker容器中的文件夹是有内容的,则本机的会覆盖dokcer容器中的,也就是容器中原本有内容的也会没有内容
如果本机的文件夹是有内容的,docker容器中的文件夹是有内容的,则本机的会覆盖dokcer容器中的 由于宿主机上 /tmp/nginx 这个目录底下没有文件,所以容器内的数据会被主机目录覆盖清空。
测试持久化,进入容器内目录创建test文件
回到宿主机查看
删除容器重新创建
进入容器内查看数据
持久化保存成功