Docker 持久化
Docker 持久化
docker 三种持久化方式
- 数据卷(Volumes)
- 绑定挂载 (Bind Mounts)
- tmpfs
数据卷(Volumes)
-
Volumes 是Docker推荐的挂载方式,与把数据存储在容器的可写层相比,使用Volume可以避免增加容器的容量大小,还可以使存储的数据与容器的生命周期独立。
-
Volumes是可供一个/多个容器使用的特殊目录,其作用和特性如下所示:
- 可以在容器之间共享和重用;
- 可以被修改,且立即生效;
- 对其进行更新,并不影响镜像;
- 默认情况下,即使容器被删除了,它也会一直存在;
- 与bind mounts相比,volumes更易于备份或迁移。
- 您可以使用Docker CLI命令或Docker API管理Volumes。
- volumes在Linux和Windows容器上均可工作。
- 可以在多个容器之间更安全地共享volumes。
- volumes驱动程序使您可以将volumes存储在远程主机或云提供程序上,以加密volumes内容或添加其他功能
创建 Volumes
# 创建一个名为 dv_mysql_data 的 volumes
docker volume create dv_mysql_data
查看所有 Volumes
docker volume ls
查看某个 Volumes 详细
# 查看 dv_mysql_data 的 详细
docker volume inspect dv_mysql_data
删除 Volumes
# 移除一个或多个卷。不能删除容器正在使用的卷。
docker volume rm dv_mysql_data
docker volume remove dv_mysql_data
# 移除所有未使用的本地卷。
docker volume prune
启动一个挂载 Volumes 的容器
# 使用 --mount (推荐) [--mount type=volume 是默认值,可以省略]
docker run -p 3306:3306 --name mysql \
--mount source=dv_mysql_data,target=/var/lib/mysql \
-d mysql:8.0.20
# 使用 -v
docker run -p 3306:3306 --name mysql \
-v dv_mysql_data:/var/lib/mysql \
-d mysql:8.0.20
--mount
-
-v能做的--mount指令都可以做,与-v指令对比,--mount指令更灵活,支持更多复杂操作,并且不需要严格按照参数顺序,通过key value键值对方式进行配置,可读性更高。
-
--mount有以下几个参数:
- type - type可以是bind、volume或者tmpfs,默认是volume
- source - 宿主机上的目录路径,可以用缩写src
- destination - 目标路径,容器上挂载的路径,可以用dst或者 target
- readonly - 可选项,如果设置了,那么容器挂载的路径会被设置为只读
- volume-opt - 可选项,当volume驱动接受同时多个参数作为选项时,可以以多个键值对的方式传入
绑定挂载(Bind-Mounts)
-
与volumes相比,bind mount的功能有限。 使用绑定安装时,会将主机上的文件或目录安装到容器中。 文件或目录由主机上的完整或相对路径引用。 相比之下,当您使用volume时,将在主机上Docker的存储目录中创建一个新目录,并且Docker管理该目录的内容。
-
该文件或目录不需要在Docker主机上已经存在。 如果尚不存在,则按需创建。 bind mounts性能非常好,但是它们依赖于具有特定目录结构的主机文件系统。 如果要开发新的Docker应用程序,请考虑使用命名volume。 您不能使用Docker CLI命令直接管理bind mounts
# 使用 --mount (推荐) [--mount type=bind 不可以省略]
docker run -p 3306:3306 --name mysql \
--mount type=bind,source=/home/data,target=/var/lib/mysql \
-d mysql:8.0.20
# 使用 -v
docker run -p 3306:3306 --name mysql \
-v /home/data:/var/lib/mysql \
-d mysql:8.0.20
tmpfs
- 使用tmpfs不会持久化数据,数据只会存放在宿主机器内存中
docker run -p 3306:3306 --name mysql \
--mount type=tmpfs,source=/home/data,target=/var/lib/mysql \
-d mysql:8.0.20
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)