docker数据持久化

数据挂载的三种模式

在这里插入图片描述

  • 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值