栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

docker数据持久化

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

docker数据持久化

文章目录
  • 数据挂载的三种模式
  • 使用 -v 指令
  • 使用 --mount 指令(推荐使用方式)
  • tmpfs内存模式
  • 参考

数据挂载的三种模式

  • bind mount: 可以存储在宿主机器任何一个地方,但是会依赖宿主机器的目录结构,不能通过docker CLI 去直接管理,并且非docker进程和docker进程都可以修改该路径下的文件
  • volume: 在宿主的文件系统上的docker工作路径下创建一个文件夹(/var/lib/docker/volumes)来存储数据,其他非docker进程是不能修改该路径下的文件,完全由docker来管理
  • tmpfs : 有时候你不想把容器的数据存储在主机上,但出于性能或安全原因,或者如果数据是不需要持久化的状态信息,你也不希望将数据写入容器的可写层。例如容器的应用程序根据需要创建和使用的一次性临时密码。为了让容器能够访问数据而不需要永久地写入数据,可以使用 tmpfs 挂载
  • volumn适用场景
    • 多个容器这间共享数据
    • 宿主机不保证存在固定的目录结构
    • 持久化数据到远程主机或者云存储而非本地
    • 需要备份、迁移、合并数据时。停止container,将volume整体复制,用于备份、迁移、合并等。
  • bind mount适用场景
    • container共享宿主机配置文件。比如docker会将宿主机文件/etc/resov.conf文件bind mount到容器上,两者会使用相同的DNS服务器。
    • 开发环境中宿主机与container之间共享源代码、构建构件等。比如将整个build过程container化,将宿主机上的源代码文件夹bind mount到build container中。修改代码后,运行build container的build命令,build container则将build结构写入另一个bind mount的文件夹中。
    • 一些监控类container,通过读取宿主机固定文件中的数据实现监控等。
  • tmpfs mounts的使用场景
    • 当你因为安全或其他原因,不希望将数据持久化到容器或宿主机上,那你可以使用tmpfs mounts模式。
    • tmpfs 挂载只能用于 Linux 容器,不支持 Windows 容器。
使用 -v 指令

挂载宿主机目录到容器内的目录,默认使用的宿主机路径是/var/lib/docker/volumes, 即volume模式,也可以自定义路径,这时候使用的是bind mount模式。

eg: docker run … -v [宿主机路径]:[挂载的容器路径] …

使用 --mount 指令(推荐使用方式)

-v能做的–mount指令都可以做,与-v指令对比,–mount指令更灵活,支持更多复杂操作,并且不需要严格按照参数顺序,通过key value键值对方式进行配置,可读性更高。

mount有以下几个参数:

  • type - type可以是bind、volume或者tmpfs,默认是volume
  • source - 宿主机上的目录路径,可以用缩写src
  • destination - 目标路径,容器上挂载的路径,可以用dst或者 target
  • readonly - 可选项,如果设置了,那么容器挂载的路径会被设置为只读
  • volume-opt - 可选项,当volume驱动接受同时多个参数作为选项时,可以以多个键值对的方式传入

tmpfs内存模式

使用tmpfs写入内存,在容器读写层是看不到的:

使用docker inspect [容器/镜像] 查看容器或者镜像相关信息

fzz@ubuntu:~/mount_test$ docker inspect bind_test
"GraphDriver": {
    "Data": {
        "LowerDir": "/var/lib/docker/overlay2/60b4d6dc5bfdfe8a3be1883407dd4475a1aeefba7acb8c66addc2bd21fdb6af4-init/diff:/var/lib/docker/overlay2/c105b658706af65e4f83011692c4e2e947e5ff05512c91fe95a90c6949efeac2/diff:/var/lib/docker/overlay2/ea84a82defeaf4abb8c94b6fb41a1d261ff9cd54435895a0a90410646b856ca8/diff:/var/lib/docker/overlay2/0ac69cbb34d117f5041e41ac18961be9ebc1795e8b4e49a68c070121f9c02253/diff:/var/lib/docker/overlay2/aee396c956bed0b3dcdf7b6bc460ff456d38210956d20bf3ea7c536b381d99e5/diff",
        "MergedDir": "/var/lib/docker/overlay2/60b4d6dc5bfdfe8a3be1883407dd4475a1aeefba7acb8c66addc2bd21fdb6af4/merged",
        "UpperDir": "/var/lib/docker/overlay2/60b4d6dc5bfdfe8a3be1883407dd4475a1aeefba7acb8c66addc2bd21fdb6af4/diff",
        "WorkDir": "/var/lib/docker/overlay2/60b4d6dc5bfdfe8a3be1883407dd4475a1aeefba7acb8c66addc2bd21fdb6af4/work"
    },
    "Name": "overlay2"
},

此时在容器读写层的文件夹内看不到/root/tmpfs里的内容

参考

Docker深入浅出系列 | 容器数据持久化
【docker】 bind-mount或者COPY时需要注意 用户、文件权限 的问题
Docker镜像分层
Docker镜像存储-overlayfs

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/296803.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号