4.4 Docker tmpfsマウント完全ガイド|メモリ上の一時領域をコンテナに提供

【第2章】イメージとコンテナの基本操作

Docker tmpfsマウント完全ガイド|メモリ上の一時領域をコンテナに提供

4-2 Named Volume、4-3 Bind Mount と2つの「永続化」を学んできました。最後の3つ目は真逆の発想——tmpfs(ディスクに絶対書かない、メモリ上の一時領域)です。

「一時的だからこそ価値がある」データ、たとえば機密情報・セッションデータ・高速キャッシュを扱うときに使います。

💡 この記事のゴール
① tmpfs とは何か(Linux標準機能であることを含め)
② Docker で tmpfs を使う2つの書式(--tmpfs--mount type=tmpfs
③ 機密情報・キャッシュ向けの典型パターン
④ Named Volume / Bind Mount との使い分けまとめ

目次

  1. tmpfs とは何か
  2. なぜDockerで tmpfs を使う?
  3. 2つの書式
  4. ハンズオン:tmpfs に書いたファイルは再起動で消える
  5. サイズと権限のオプション
  6. Linux限定という制約
  7. 3方式の総まとめ(Named / Bind / tmpfs)
  8. まとめ

1. tmpfs とは何か

tmpfs は Linux カーネルの標準機能で、物理ディスクではなくメモリ(RAM)上に作るファイルシステムです。Dockerが独自に作ったものではなく、Linux に昔からあります(/tmp/run が tmpfs で実装されているディストリビューションも多い)。

【tmpfs の位置づけ】
⚡ tmpfs
RAM 上
超高速・揮発性

💾 Named Volume / Bind Mount
ディスク上
永続・I/O遅め

↑ tmpfs は再起動・コンテナ停止でデータ消滅。その代わり、ディスク書込が発生しない

2. なぜDockerで tmpfs を使う?

「消える」ことが機能になる場面があります。

ユースケース なぜ tmpfs が向く?
機密情報の一時保管
(APIキー・セッションID・復号鍵)
ディスクに書かれないので、万一の流出リスクが低い
高速キャッシュ
(テンプレートキャッシュ・セッション・Rails の tmp/)
RAM 速度で読み書きできる(SSDの数倍〜数十倍)
ログや中間ファイルの一時置き場 容量制限を付けてディスク逼迫を防げる
読み取り専用コンテナと併用
--read-only
コンテナ全体を ro にして /tmp だけ tmpfs に開放、セキュリティ向上
💡 「永続化したくない」ことこそが要件
Named Volume や Bind Mount が「データを残す」仕組みなのに対し、tmpfs は「絶対に残さない」仕組み。対極の設計思想です。

3. 2つの書式

3-1. --tmpfs(簡単な書き方)

docker run --tmpfs /tmp <image>

# サイズや権限のオプション付き
docker run --tmpfs /tmp:rw,size=64m,mode=1777 <image>

3-2. --mount type=tmpfs(明示的な書き方・推奨)

docker run --mount type=tmpfs,destination=/tmp,tmpfs-size=64m <image>
💡 スクリプトでは --mount 推奨
どちらも動きは同じですが、--mount は key=value 形式で意図が明示され、スペースミスが起きにくく、CI/CD 向き。短いコマンドでは --tmpfs が楽です。

4. ハンズオン:tmpfs に書いたファイルは再起動で消える

# tmpfs を /mytmp に作って ubuntu 起動
$ docker run -it --name tmpfs-demo --tmpfs /mytmp:size=32m ubuntu bash

# tmpfs としてマウントされているか確認
root@xxx:/# mount | grep mytmp
tmpfs on /mytmp type tmpfs (rw,nosuid,nodev,noexec,relatime,size=32768k,...)

# ファイル作成
root@xxx:/# echo "秘密" > /mytmp/secret.txt
root@xxx:/# cat /mytmp/secret.txt
秘密

# コンテナから抜ける
root@xxx:/# exit

# 再起動して確認
$ docker start -ai tmpfs-demo
root@xxx:/# ls /mytmp/
(空 — tmpfs は再起動で消える)
✅ 挙動確認
コンテナ停止→再起動で tmpfs の中身は空に戻ります(メモリが一度解放されるため)。つまり「コンテナを起動している間だけ存在する一時領域」になります。

5. サイズと権限のオプション

オプション(--tmpfs 側) 意味 デフォルト
size=64m 最大容量(超えると書込失敗) ホストのRAM次第(実質無制限)
mode=1777 パーミッション(8進数・/tmp相当の stickyビット付き) 1777
rw / ro 読み書き / 読み取り専用 rw
uid= / gid= 所有 UID / GID 0(root)
# 非rootユーザーで書き込みさせたい場合
docker run --tmpfs /cache:rw,size=128m,uid=1000,gid=1000 myapp
⚠️ サイズは必ず指定する(本番)
size を指定しないと、理論上ホストのRAM全部まで tmpfs が肥大化できてしまいます。悪意ある/暴走プロセスにメモリを食い尽くされるリスク回避のため、本番では必ず size=... を付けましょう。

6. Linux限定という制約

tmpfs はLinuxカーネル機能なので、ホストが Linux のときだけ使えます。

環境 tmpfs 使える? 補足
Linux(直接) ✅ OK ホストOSの機能をそのまま利用
WSL2(Docker Desktop) ✅ OK WSL2 の Linuxカーネル上で動くため
macOS(Docker Desktop) ✅ OK Docker Desktop の軽量Linux VM内で動く
Windows Containers ❌ NG Windowsネイティブコンテナは対象外(通常は Linux Container モード)

7. 3方式の総まとめ(Named / Bind / tmpfs)

第4章で学んできた3つのマウント方式を、一覧で総まとめします。

観点 Named Volume(4-2) Bind Mount(4-3) tmpfs(4-4)
保存場所 Docker管理領域 ホスト任意パス RAM
永続性 ◎ コンテナ削除後も残る ◎ ホストに残る × 再起動で消える
速度 ○(ネイティブ) △〜○(OS依存) ◎◎ RAM速度
ホストから編集 × 触らない前提 ○ 普段のエディタで × そもそも触れない
クロスプラットフォーム △(Win/Mac は遅い) △(Linux限定)
主な用途 DB・本番永続データ 開発ソース・設定ファイル 機密・キャッシュ・一時領域
書式(-v代替) -v name:/path -v /host:/path --tmpfs /path
💡 併用もよくある
たとえばセキュアなWebアプリなら、ソースは bind mount で開発、DBは named volume で永続化、セッション管理の一時ファイルは tmpfs、という風に3種類を適材適所で組み合わせます。

8. まとめ

押さえどころ 内容
正体 Linuxカーネルの tmpfs(RAM上のファイルシステム)
特徴 超高速・揮発性(再起動で消える)
書式 --tmpfs /path[:size=64m,mode=1777] または --mount type=tmpfs,...
用途 機密情報・セッション・キャッシュ・読み取り専用コンテナの /tmp 開放
必須設定 本番では size= を必ず指定(メモリ枯渇防止)
対応OS Linuxコンテナのみ(WSL2/macOS/LinuxはOK、Windowsネイティブ×)
✅ 次のステップ
4-5 ボリュームのバックアップとリストアで、本章のクロージング。Named Volume に溜まった大事なデータを tar.gz で安全に退避・復元する手順を学びます。事故に備える最後の1ピースです。

参考リンク


Dockerの基礎を動画で体系的に学びませんか?

実務で使う基礎だけを3時間に凝縮。環境構築から丁寧に解説しています。

Udemy Docker入門講座 クーポン割引で講座を見る →

コメント

タイトルとURLをコピーしました