docker容器数据持久化——tmpfs mount 详解
阅读本文前,希望你已经对docker容器数据持久化相关问题及解决方案,有初步的了解,具体可以参考以下文章:
了解其他几种容器数据存储方案具体可以参考以下文章:
默认容器的数据的读写发生在容器的存储层,当容器被删除时其上的数据将会丢失。所以我们应该尽量保证容器存储层不发生写操作,为了实现数据的持久化存储我们需要选择一种方案来保存数据,当前有以下几种方式:
- Volumes
- Bind mounts
- tmpfs mounts
无论你选择哪种mount类型,从container内部看没有区别,它们都是目录或者文件。数据都是寄存在宿主机上,只不过具体位置有所区别,如下图:
tmpfs mount:tmpfs类型文件与普通文件的区别是只存在于宿主机内存中,不会持久化。
Volumes和Bind mounts模式使我们能够在宿主机和容器间共享文件从而我们能够将数据持久化到宿主机上,以避免写入容器存储层带来的容器停止后数据的丢失的问题。
如果你使用linux运行Docker,那么避免写入数据到容器存储层还有一个方案:tmpfs mounts。
tmpfs mounts,顾名思义,是一种非持久化的数据存储。它仅仅将数据保存在宿主机的内存中,一旦容器停止运行,tmpfs mounts会被移除,从而造成数据丢失。
命令解析 --mount 或 --tmpfs
使用--mount
参数时,需要指定type=bind
:
1、镜像run的使用 加上参数配置
2、 commit提交副本镜像,重新启动新镜像加上参数配置(针对容器已经有数据的情况下)
--mount
由多个名值对组成,逗号分隔,每个键值由 = 元组组成。–mount 语法比 -v 或 --volume更冗长,但键的顺序并不重要,并且标志的值更易于理解
上面的例子将宿主机上的/root文件夹挂载到容器中的/tmp文件夹。
$ docker run -itd --name tmptest --mount type=tmpfs,destination=/app nginx:latest
- 要挂载的类型 type,可以是 bind、volume 或 tmpfs。
- 要挂载的源 source,对于有名字的卷,这里是卷的名字。对于匿名卷忽略这个字段。可以指定为 src 或 source。
- 要挂载的目的地 destination,将文件或目录挂载在容器中的路径作为其值。 可能被指定为 destination、dst 或 target。
- 只读选项 readonly,这个选项会使得挂载到容器中的绑定挂载只读。
- volume-opt可以多次指定的选项采用键值对,该键值对由选项名称及其值组成。
- 最后的/bin/bash,表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示什么也不做,只需进入命令行即可
tmpfs mounts 可选选项
Option | Description |
---|---|
tmpfs-size | 挂载的tmpfs的字节数,默认不受限制 |
tmpfs-mode | tmpfs的文件模式,例如700或1700.默认值为1777,这意味着任何用户都有写入权限 |
docker run -itd \
--name tmptest \
--mount type=tmpfs,destination=/app,tmpfs-mode=1770 \
nginx:latest
--tmpfs
使用
--tmpfs
参数无法指定任何其他的可选项,并且不能用于Swarm Service(集群节点服务)。
$ docker run -itd --name tmptest --tmpfs /app nginx:latest
使用docker container inspect tmptest
命令,然后查看Mounts
部分可以看到:
"Tmpfs": {
"/app": ""
},
tmpfs mounts使用场景
请参考这篇文章:Docker容器数据持久化问题及解决方案
如果有兴趣了解更多详细资料,具体请查看官方文档:https://docs.docker.com/storage/volumes/