tmpfs マウントの利用

読む時間の目安: 2 分

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

Docker を Linux 上にて稼動させている場合は、さらに 3 つめの方法があります。 それがtmpfsマウントです。 tmpfsマウントを用いてコンテナーを生成した場合、コンテナーが書き込むファイルは、コンテナーの外部にある書き込みレイヤーに生成されます。

ボリュームやバインドマウントとは違ってtmpfsマウントは一時的なものであり、ホストマシンのメモリ上にのみ存在します。 コンテナーが停止されるとtmpfsマウントは削除されてしまうため、そこに書き込まれたファイルを保持し続けることはできません。

Docker ホスト上の tmpfs

これが有用になるのは、重要な情報を含んだファイルを一時的に保存したい場合です。 こういった情報は、ホスト上およびコンテナーの書き込みレイヤー上のいずれであっても、ずっと残しておくわけにはいかないものです。

tmpfs マウントの制約

  • ボリュームやバインドマウントとは違って、tmpfsマウントはコンテナー間で共有することはできません。
  • この機能は Docker on Linux を稼動させている場合にのみ利用可能です。

--tmpfs フラグ、--mount フラグの使い分け

一般に--mountの方が、より明示的なものであり多くの記述を必要とします。 はっきりとした違いは--tmpfsフラグでは設定変更可能なオプションが用意されていないということです。

  • --tmpfs: tmpfsマウントを行いますが、設定変更が行えるようなオプション指定はありません。 またこのオプションはスタンドアロンコンテナーに対してしか用いることはできません。

  • --mount: 複数のキーバリューペアを指定し、個々は<key>=<value>の記述としてそれぞれをカンマで区切ります。 --mountの書式は--tmpfsに比べて多くの記述を必要とします。

    • typeによりマウントのタイプ、つまり bind, volume, tmpfs のいずれかを指定します。 tmpfsの説明を行っていますから、ここではtmpfsとします。
    • destinationはバリューにパスを指定します。 これはコンテナー内にてtmpfsマウントを行うパスを表わします。 destinationdsttargetとして指定することもできます。
    • tmpfs-sizetmpfs-modeオプションがあります。 tmpfs オプション を参照してください。

以降では--mount--tmpfsの両方について、利用可能な書式を示します。 はじめに示すのは--mountです。

--tmpfs--mountの違い

  • --tmpfsフラグには設定変更可能なオプションの指定はありません。
  • --tmpfsフラグは Swarm サービスに対して用いることはできません。 その場合は--mountを用います。

コンテナー内での tmpfs マウントの利用

コンテナー内にてtmpfsマウントを利用するには--tmpfsフラグを用います。 あるいは--mountフラグにてtype=tmpfsdestinationオプションを指定します。 tmpfsマウントにsourceオプションは存在しません。 以下の利用例は Nginx コンテナー内の/appに対してtmpfsマウントを生成するものです。 1 例めでは--mountフラグ、2 例めでは--tmpfsフラグを用いています。

$ docker run -d \
  -it \
  --name tmptest \
  --mount type=tmpfs,destination=/app \
  nginx:latest
$ 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 進数表記で指定します。たとえば7000770などです。デフォルトはすべて書き込み可能な1777です。

以下の例ではtmpfs-mode1770を指定しています。 つまりこのコンテナー内においては、全ユーザーからの読み取りが制限されます。

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

次のステップ

storage, persistence, data persistence, tmpfs