Skip to main content

第16章:ボリューム作成・一覧・削除(基本運用)🧰

この章は「データが消えないように守りつつ、いらない物は安全に片付ける」がテーマだよ😊 DB(後半のCompose編)に入る前に、ここを押さえるとめちゃ安心👍


1) ボリュームって結局なに?🧠💡

ボリュームは、**Dockerが管理する“永続データ置き場”**だよ📦 コンテナを消しても、ボリュームに置いたデータは残る(=コンテナの寿命と別)✨ (Docker Documentation)

  • ✅ DBのデータ(超重要🛡️)
  • ✅ アップロードされたファイル
  • ✅ 生成物キャッシュ(ビルド高速化⚡)
  • ❌ 逆に「ホストから直接ファイル触りたい」は bind mount の方が向いてることが多い(ボリュームはDocker管理で“見えにくい”) (Docker Documentation)

2) 今日のゴール🏁🎯

  • ✅ ボリュームを 作る(create)🧱
  • ✅ ボリュームを 一覧で見る(ls)📋
  • ✅ ボリュームを 安全に消す(rm / prune)🧹🗑️

3) ハンズオン:まずは「消えない体験」をする🌱✨

ここが一番大事!「コンテナ消してもデータ残るじゃん😳」を体で覚えるコーナー🎉

3-1. ボリューム作成🧱

docker volume create todo-data

作れたか確認👇

docker volume ls

3-2. ボリュームをコンテナにマウントして、ファイルを書いてみる✍️📦

まず、軽いAlpineでシェルに入るよ🐧

docker run --rm -it -v todo-data:/data alpine sh

コンテナの中で👇

echo "hello volume 🎉" > /data/hello.txt
ls -l /data
cat /data/hello.txt
exit

3-3. コンテナを“消した後”に、同じボリュームをまた使う🔁✨

docker run --rm -it -v todo-data:/data alpine sh -lc "ls -l /data && cat /data/hello.txt"

hello.txt が残ってたら勝ち〜〜〜!🏆🎉 この「残る感覚」が、DB永続化の土台になるよ🛡️


4) 一覧(ls)を使いこなす📋🔍

4-1. 基本の一覧📋

docker volume ls

4-2. “どこにも使われてない”ボリュームだけ出す(dangling)🧟‍♂️➡️🗑️

docker volume ls -f dangling=true

dangling は「どのコンテナにも参照されてないボリューム」を探すフィルタだよ🔍 (Docker Documentation)


5) inspectで「中身の住所」を見る🏠👀

docker volume inspect todo-data

ここで Mountpoint みたいな情報が見える(Dockerホスト内の場所)よ📌 ボリュームはホスト上のディレクトリとして保存されていて、それがコンテナにマウントされる仕組み👍 (Docker Documentation)

🪟補足(Windowsあるある) Docker Desktop(WSL2)だと、ボリュームはWindowsの普通のフォルダ感覚で触るものじゃなくて、WSL側の領域にあることが多いよ。エクスプローラで \\wsl$ を見ると中身にアクセスできるケースもあるけど、基本は「Dockerコマンドで管理」が安全✅ (Stack Overflow)


6) 削除(rm)を安全にやる🗑️😇

6-1. まずは単体削除(rm)🧹

docker volume rm todo-data

ただし!コンテナが使用中のボリュームは消せない(データ事故防止)⚠️ (Docker Documentation)


7) prune(まとめて掃除)を“事故らず”使う🧯🧹

pruneは便利だけど、雑にやると泣く😭 だから「挙動を知ってから」使おうね🙏

7-1. docker volume prune の基本💣➡️🧼

docker volume prune
  • 「未使用ボリューム」を削除する
  • デフォルトは匿名(anonymous)ボリューム中心
  • 確認プロンプトが出る(-f でスキップ可能)
  • --all を付けると 名前付き(named)も対象になる⚠️ (Docker Documentation)

7-2. “残したいボリューム”をラベルで守る🏷️🛡️

先に「守る印」を付けるの超おすすめ😊 作るときにラベルを付けられるよ👇 (Docker Documentation)

docker volume create todo-db-data --label keep=yes --label app=todo

そして prune を「keep以外だけ」みたいに絞れる👇(事故りにくい!) (Docker Documentation)

docker volume prune --filter "label!=keep"

8) Composeを使い始めたら絶対知っておくこと🧩⚠️

8-1. Composeはボリュームを自動で作る🧱✨

Composeの volumes: で「名前付きボリューム」を定義できて、docker compose up で無ければ作られるよ👍 (Docker Documentation)

(例)こういうやつ👇

services:
api:
# ...
volumes:
- todo-db-data:/var/lib/app

volumes:
todo-db-data:

8-2. docker compose down は、デフォで名前付きボリュームを消さない😳

これ超重要! 「downしたのにDBが残ってる!」って混乱しがちだけど、仕様だよ🙏 (Docker Documentation)

消したいときだけ👇

docker compose down --volumes

9) “安全に消す”ための手順テンプレ✅🧠

ボリューム削除前は、この順番でいこう😄

  1. 🧾 本当に消していい?(DBなら特に慎重!)
  2. 🔍 docker volume ls で対象確認
  3. 🧩 Compose利用なら docker compose down だけで消えないのを理解(消すなら --volumes) (Docker Documentation)
  4. 🧹 単体なら docker volume rm <name>(使用中なら消せない=安全) (Docker Documentation)
  5. 🧨 まとめ掃除は docker volume prune(必要なら --all) (Docker Documentation)

10) AI活用(コピペでOK)🤖💬✨

そのまま投げて使えるプロンプト例🪄

  • 「この環境で、todo-db-data を消しても安全か確認する手順をチェックリスト化して」✅
  • docker volume prune を事故らない運用にしたい。ラベル設計(keep/app/env)案を出して」🏷️
  • 「Composeで down したのにDBが残る理由を、初心者向けに短く説明して」🧑‍🏫

11) ミニ理解チェック🎓✅

  • Q1. コンテナを消してもデータを残したいとき、何を使う?📦
  • Q2. “どこにも参照されてないボリューム”だけ表示するコマンドは?🔍
  • Q3. docker compose down で名前付きボリュームはデフォで消える?消したい時は?🧩

次の章(第17章)は、いよいよ「DBデータをどう守る?」に突入だよ🛡️🔥 ここまでできたら、もう“データ事故”の確率がガクッと下がる👍✨