Docker tmpfs挂载的使用详解

绑定挂载使您可以在主机和容器之间共享文件,以便即使容器停止后也可以保留数据。

如果您在Linux上运行Docker,则还有第三种选择:tmpfs挂载。 当您创建带有tmpfs挂载的容器时,该容器可以在该容器的可写层之外创建文件。

与卷和绑定挂载相反,tmpfs挂载是临时的,并且仅保留在主机内存中。 当容器停止时,tmpfs挂载将被删除,并且写入其中的文件将不会保留。

types-of-mounts-tmpfs.png

这对于当您在不想在主机持久保存或写入容器的可写层中,临时存储敏感文件很有用。

tmpfs挂载的局限性

  • 与卷和绑定挂载不同,您不能在容器之间共享tmpfs挂载。
  • 仅当您在Linux上运行Docker时,才可以使用此功能。

选择--tmpfs或--mount标记

最初,--tmpfs标记用于独立容器,而--mount标记用于群集服务。但是,从Docker 17.06开始,您还可以将--mount与独立容器一起使用。通常,--mount更为明确和详细。最大的区别是--tmpfs标记不支持任何可配置的选项。

  • --tmpfs:挂载tmpfs挂载而不允许您指定任何可配置的选项,并且只能与独立容器一起使用。

  • --mount:由多个键/值对组成,用逗号分隔,每对均由一个<key> = <value>元组组成。 --mount语法比--tmpfs更冗长:

    • 挂载的类型,可以是bindvolumetmpfs。本主题讨论tmpfs,因此类型始终为tmpfs
    • destinationtmpfs挂载在容器中挂载的路径作为其值。可以指定为destination, dst, 或者 target
    • tmpfs-sizetmpfs-mode选项。请参阅本文后面部分讲述的tmpfs选项。

下面的示例在可能的情况下同时显示--mount--tmpfs语法,并且首先显示--mount

--tmpfs--mount行为之间的区别

  • --tmpfs标记不允许您指定任何可配置的选项。
  • --tmpfs标记不能与swarm服务一起使用。您必须使用--mount

在容器中使用tmpfs挂载

要在容器中使用tmpfs挂载,请使用--tmpfs标记,或将--mount标记与type = tmpfsdestination选项一起使用。没有tmpfs挂载的source。以下示例在Nginx容器中的/ app处创建tmpfs挂载。第一个示例使用--mount标记,第二个示例使用--tmpfs标记。


$ docker run -d   -it   --name tmptest   --mount type=tmpfs,destination=/app   nginx:latest

$ docker run -d   -it   --name tmptest   --tmpfs /app   nginx:latest

通过运行docker container inspect tmptest并查找Mounts部分,验证该挂载是否为tmpfs挂载:

"Tmpfs": {
    "/app": ""
},

删除容器:

$ docker container stop tmptest

$ docker container rm tmptest

指定tmpfs选项

tmpfs挂载允许两个配置选项,都不是必需的。 如果需要指定这些选项,则必须使用--mount标记,因为--tmpfs标记不支持它们。

选项 说明
tmpfs-size tmpfs挂载的大小(以字节为单位)。 默认不受限制。
tmpfs-mode 八进制的tmpfs的文件模式。 例如7000770。默认值为1777

下面的示例将tmpfs-mode设置为1770,以使其在容器内不可读。

docker run -d   -it   --name tmptest   --mount type=tmpfs,destination=/app,tmpfs-mode=1770   nginx:latest

下一步