欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Docker 管理应用数据 - 使用 tmpfs 挂载数据

程序员文章站 2022-06-24 19:53:23
Docker 管理应用数据 - 使用 tmpfs 挂载数据。 默认情况下,卷和绑定挂载将挂载到容器的文件系统中,并将其内容存储在主机上。 有时候你不想把容器的数据存储在主机上,...

Docker 管理应用数据 - 使用 tmpfs 挂载数据。

默认情况下,卷和绑定挂载将挂载到容器的文件系统中,并将其内容存储在主机上。

有时候你不想把容器的数据存储在主机上,但出于性能或安全原因,或者如果数据是不需要持久化的状态信息,你也不希望将数据写入容器的可写层。例如容器的应用程序根据需要创建和使用的一次性临时密码。

为了让容器能够访问数据而不需要永久地写入数据,可以使用 tmpfs 挂载,该挂载仅存储在主机的内存中(如果内存不足,则为 swap)。当容器停止时,tmpfs 挂载会被移除。如果提交容器,则不会保存 tmpfs 挂载。

Docker 管理应用数据 - 使用 tmpfs 挂载数据

1. 选择 --tmpfs 或 --mount 标志

最初,--tmpfs 标志用于独立容器,而 --mount 标志用于 swarm 服务。但是,从 Docker 17.06 开始,也可以在独立容器上使用 --mount。一般来说,--mount 更明确和详细。最大的不同在于 --tmpfs 语法将所有选项组合在一个字段中,而 --mount 语法将它们分开。下面是每个标志的语法比较。

知识点:初学者应该使用 --mount 语法。有经验的用户会更熟悉 --tmpfs 语法,但是仍然建议使用 --mount 语法,因为调查显示它更加易用。

--tmpfs: Mounts a tmpfs mount without allowing you to specify any configurable options, and can only be used with standalone containers.

--mount 标志:由多个名值对组成,逗号分隔,每个键值由 = 元组组成。--mount 语法比 --tmpfs 更冗长,但键的顺序并不重要,并且标志的值更易于理解。

要挂载的类型 type,可以是 bind、volume 或 tmpfs。本主题主要使用 tmpfs。 要挂载的目的地 destination,将文件或目录挂载在容器中的路径作为其值。 可能被指定为 destination、dst 或 target。 tmpfs-type 和 tmpfs-mode 选项。

下面的例子在可能的地方展示了 --mount 和 --tmpfs 语法。

1.1 --tmpfs 和 --mount 之间的表现差异

--tmpfs 标志不支持任何配置选项。 --tmpfs 标志不能用于 swarm 服务。必须使用 --mount。

2. tmpfs 容器的限制

tmpfs 挂载不能在容器之间共享。 tmpfs 挂载只能用于 Linux 容器,不支持 Windows 容器。

3. 在容器中使用 tmpfs 挂载

要在容器中使用 tmpfs 挂载,使用 tmpfs 标志,或使用在容器中使用 --mount 标志同时指定 type=tmpfs 和 destination 选项。下面的例子在 Nginx 容器中的 /app 创建了一个 tmpfs 挂载。第一个例子使用 --mount 标志,第二个使用 --tmpfs 标志。

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

通过 docker container inspect tmptest 来验证挂载类型是 tmpfs,查看 Mounts 部分:

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

删除容器:

$ docker container stop tmptest

$ Docker container rm tmptest

3.1 指定 tmpfs 选项

tmpfs 挂载允许两个配置选项,都不是必须的。如果你需要指定这些选项,必须使用 --mount 标志。

选项 描述
tmpfs-size tmpfs 挂载的大小,单位字节。默认无限制
tmpfs-mode tmpfs 的八进制文件模式。例如,700或0770。默认为 1777 或所有人都可写。

下面的示例将 tmpfs-mode 设为 1770,这样容器中就不是所有人都可写的。

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