第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) “安全に消す”ための手順テンプレ✅🧠
ボリューム削除前は、この順番でいこう😄
- 🧾 本当に消していい?(DBなら特に慎重!)
- 🔍
docker volume lsで対象確認 - 🧩 Compose利用なら
docker compose downだけで消えないのを理解(消すなら--volumes) (Docker Documentation) - 🧹 単体なら
docker volume rm <name>(使用中なら消せない=安全) (Docker Documentation) - 🧨 まとめ掃除は
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データをどう守る?」に突入だよ🛡️🔥 ここまでできたら、もう“データ事故”の確率がガクッと下がる👍✨