はじめに
Dockerは軽量なコンテナ技術として開発から本番運用まで幅広く利用されています。しかし、コンテナは基本的に「使い捨て」が前提の仕組みであり、コンテナが削除されるとその内部に保存されたデータも一緒に消えてしまいます。
たとえば、アプリケーションログやユーザーがアップロードしたファイル、データベースの中身といった永続化すべきデータがコンテナ削除で消えてしまうのは大きな問題です。
そこで登場するのが Dockerのボリューム管理 です。本記事ではボリュームの基本から、実際に手を動かして確認できるハンズオンを通じて、Dockerでのデータ永続化の基礎を理解していきましょう。
Dockerのボリュームとは?
コンテナとデータの関係
Dockerのコンテナは非常に軽量ですが、コンテナが終了・削除されると内部データも失われます。そのため、アプリケーションが扱う大事なデータを保存するには「コンテナの外にデータを置く」必要があります。
ボリュームの種類
Dockerでは主に次の3種類のマウント方法があります。
- ボリューム(named volume)
- Dockerが管理する永続化用の領域
docker volume create
で作成し、コンテナにマウント可能- コンテナを削除してもデータが残る
- バインドマウント(bind mount)
- ホスト側のディレクトリやファイルを直接コンテナにマウント
- 開発環境でコードを即座に反映したい場合などに便利
- tmpfsマウント
- ホストメモリ上に一時的に作成される領域
- 永続化はされず、コンテナ終了でデータは消える
ボリューム管理の基本コマンド
ボリューム操作は非常にシンプルです。
- ボリュームを作成する:
docker volume create my_volume
- ボリューム一覧を表示:
docker volume ls
- ボリュームの詳細を確認:
docker volume inspect my_volume
- ボリュームを削除:
docker volume rm my_volume
ハンズオン: ボリュームを使った実践
ここからは実際に手を動かして、ボリューム管理を体験してみましょう。
ステップ1: ボリュームを作成
docker volume create mydata
ステップ2: Nginxコンテナにマウントして利用
docker run -d \
--name nginx-with-volume \
-v mydata:/usr/share/nginx/html \
-p 8080:80 \
nginx
これで、/usr/share/nginx/html
の内容が mydata
というボリュームに保存されるようになります。
ステップ3: データを書き込み、確認
コンテナにログインしてデータを追加します。
docker exec -it nginx-with-volume bash
echo "Hello Volume" > /usr/share/nginx/html/index.html
exit
次にホストからアクセスして確認します。
curl http://localhost:8080
結果: Hello Volume
と表示されます。
ステップ4: コンテナ削除後もデータが残ることを確認
docker rm -f nginx-with-volume
新しいコンテナを同じボリュームで起動します。
docker run -d \
--name nginx-reuse \
-v mydata:/usr/share/nginx/html \
-p 8081:80 \
nginx
ブラウザやcurlで http://localhost:8081
にアクセスすると、先ほど作成した Hello Volume
が表示されます。
→ コンテナを削除してもデータが保持されることを確認できました。
まとめ
- Dockerのボリュームは、コンテナのライフサイクルに依存しないデータの永続化手段です。
- ボリュームを使うことで、コンテナを削除・再作成してもデータが保持されます。
- 開発・検証から本番運用まで、ボリュームは欠かせない機能です。
次のステップ
今回のハンズオンでは、単一コンテナでのボリューム利用を学びました。次のステップとしては以下を進めてみましょう。
- docker-compose.ymlでボリュームを定義
- 複数サービス間でのボリューム共有を体験
- 例: Nginxとアプリケーション間で静的ファイルを共有
- データベースの永続化
- MySQLやPostgreSQLをDockerで起動し、ボリュームを用いてデータを保持する
- 実運用に近いシナリオを構築可能
- バックアップとリストア戦略
docker run --rm -v mydata:/data busybox tar cvf /backup.tar /data
- データを定期的に保存・復元する仕組みを学ぶ
コメントを残す