tmpfs マウントの使用

ボリュームバインド マウント はホストマシンとコンテナ間でファイルを共有できるようにするため、コンテナを停止した後もデータを保持できます。

Linux 上で Docker を動かしている場合は、3つめのオプション tmpfs マウントがあります。 tmpfs マウントを使ってコンテナを起動すると、コンテナの書き込み可能なレイヤーの外で、コンテナはファイルを作成できます。

ボリュームやバインドマウントとは違い、 tmpfs マウントは一時的なもので、ホストメモリ上にのみ保持します。コンテナを停止すると、 tmpfs マウントは削除され、また、書き込まれたデータは保持されません。

Docker ホスト上の tmpfs

ホスト上やコンテナの書き込み可能なレイヤーのどちらにも保持したくない、機微ファイルの一時的な保存に便利です。

tmpfs マウントの制限

  • ボリュームやバインド マウントとは異なり、コンテナ間で tmpfs マウントを共有できません。
  • この機能は、 Linux 上で Docker を実行している場合のみ利用できます。

--tmpfs か --mount フラグの選択

一般的に、 --mount は明示的で冗長です。最も大きな違いは、 --tmpfs は設定用オプションのフラグをサポートしていません。

  • --tmpfstmpfs マウントのマウントは、設定用オプションの指定ができません。また、スタンドアロン コンテナにのみ利用できます。
  • --mounts :複数のキーバリューのペアで構成され、各 <key>=<value> の組み合わせは、カンマで区切ります。 --mount 構文は --tmpfs よりも冗長です。
    • マウント type (型)は bindvolumetmpfs です。このトピックでは tmpfs を扱うため、マウント型は常に tmpfs です。
    • destination の値は、 tmpfs がコンテナ内のどこにマウントするかのパスを指定します。指定は destinationdsttarget のいずれかです。
    • tmpfs-sizetmpfs-mode オプションがあります。 tmpfs オプション をご覧ください。

以下の例では --mount--tmpfs 構文の両方が出てきますが、利用可能な場合は --mount が始めに出ます。

--tmpfs--mount との挙動の違い

  • --tmpfs フラグには、設定可能なオプションはありません。
  • --tmpfs フラグは swarm サービスに使えません。 その場合は --mount を使います。

tmpfs マウントをコンテナで使用

コンテナで tmpfs マウントを使うには、 --tmpfs フラグを使うか、 --mount フラグで type=tmpfsdestinaiton オプションを使います。 tmpfs マウントには source がありません。以下の例は Nginx コンテナ内の /apptmpfs マウントを作成します。1つめの例は --mount フラグを使い、2つめは --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
    

tmpfs マウントを確認するには、 docker container inspect tmptest を実行し、 Mounts セクションをさがします。

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

コンテナを削除します。

$ docker container stop tmptest

$ docker container rm tmptest

tmpfs オプションの指定

--tmpfs マウントは2つの設定可能なオプションがあり、どちらも必須ではありません。それぞれのオプションを指定する必要があれば、 --mount フラグを使う必要があります。 --tmpfs フラグはオプション指定をサポートしていません。

オプション 説明
tmpfs-size tmpfs マウントの容量をバイトで指定。デフォルトは無制限
tmpfs-mode tmpfs のファイルモードを8進数で指定。たとえば、 7000700 です。デフォルトは 1777 であり、だれでも書き込みできます。

以下の例は tmpfs-mode1770 に設定しますので、コンテナ内では誰でも読み込みできません(world-readable ではありません)。

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

次のステップ

参考

Use tmpfs mounts
https://docs.docker.com/storage/tmpfs/