ボリューム は、Docker でコンテナの外へデータを保持して、消えにくくするための仕組みです。
初心者向けにかなりざっくり言うと、コンテナを作り直しても残したいデータの置き場 です。
Docker Docs でも、volumes は persistent data stores for containers と説明されています。
つまり、コンテナ本体の一時的な書き込み領域ではなく、長く残したいデータを別で持つための仕組みです。
まず押さえたいポイント
- コンテナを消しても残したいデータを外へ逃がすために使う
- DB データ、アップロードファイル、キャッシュの一部などでよく使う
- ボリュームが無いと、コンテナ作り直し時にデータが消えやすい
- コンテナ本体の writable layer とは別で考える
どんな場面で使うか
一番よくあるのは、MySQL や PostgreSQL のデータを残したいときです。
アプリ本体は作り直してもよくても、DB の中身が消えるのは困るので、ボリュームへ逃がしておきます。
ほかにも、
などで使われます。
bind mount との違い
ここは混ざりやすいです。
- ボリューム: Docker が管理する保存領域
- bind mount: ホスト側の特定パスをそのままコンテナへ見せる仕組み
ホストのフォルダを直接見たいなら bind mount、Docker 管理で永続化したいならボリューム、と考えると整理しやすいです。
実務で見るポイント
ボリュームは 消えない魔法 ではありません。
どのコンテナに何をマウントしているか、削除コマンドで一緒に消えないか、バックアップをどう取るかまで見ないと、思ったより危ないです。
特に DB では、ボリュームがあるだけで安心せず、バックアップや復旧手順まで持っておく方が実務では大事です。
よくある誤解
コンテナを止めたらデータは全部消える?
止めただけなら消えないこともありますが、コンテナを作り直したり削除したりすると、コンテナ本体の領域に書いたデータは消えやすいです。
残したいならボリュームに分ける方が安全です。
ボリュームならホストのファイルを自由に見やすい?
それは bind mount の方が向いています。
ボリュームは Docker 管理の領域なので、ホストの任意パスを直接いじりたい用途とは少し違います。