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

posted @   等你下课啊  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示