Dockerのボリューム管理入門: データを永続化する方法

はじめに

Dockerは軽量なコンテナ技術として開発から本番運用まで幅広く利用されています。しかし、コンテナは基本的に「使い捨て」が前提の仕組みであり、コンテナが削除されるとその内部に保存されたデータも一緒に消えてしまいます。
たとえば、アプリケーションログやユーザーがアップロードしたファイル、データベースの中身といった永続化すべきデータがコンテナ削除で消えてしまうのは大きな問題です。

そこで登場するのが Dockerのボリューム管理 です。本記事ではボリュームの基本から、実際に手を動かして確認できるハンズオンを通じて、Dockerでのデータ永続化の基礎を理解していきましょう。


Dockerのボリュームとは?

コンテナとデータの関係

Dockerのコンテナは非常に軽量ですが、コンテナが終了・削除されると内部データも失われます。そのため、アプリケーションが扱う大事なデータを保存するには「コンテナの外にデータを置く」必要があります。

ボリュームの種類

Dockerでは主に次の3種類のマウント方法があります。

  1. ボリューム(named volume)
    • Dockerが管理する永続化用の領域
    • docker volume create で作成し、コンテナにマウント可能
    • コンテナを削除してもデータが残る
  2. バインドマウント(bind mount)
    • ホスト側のディレクトリやファイルを直接コンテナにマウント
    • 開発環境でコードを即座に反映したい場合などに便利
  3. 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のボリュームは、コンテナのライフサイクルに依存しないデータの永続化手段です。
  • ボリュームを使うことで、コンテナを削除・再作成してもデータが保持されます。
  • 開発・検証から本番運用まで、ボリュームは欠かせない機能です。

次のステップ

今回のハンズオンでは、単一コンテナでのボリューム利用を学びました。次のステップとしては以下を進めてみましょう。

  1. docker-compose.ymlでボリュームを定義
    • 複数サービス間でのボリューム共有を体験
    • 例: Nginxとアプリケーション間で静的ファイルを共有
  2. データベースの永続化
    • MySQLやPostgreSQLをDockerで起動し、ボリュームを用いてデータを保持する
    • 実運用に近いシナリオを構築可能
  3. バックアップとリストア戦略
    • docker run --rm -v mydata:/data busybox tar cvf /backup.tar /data
    • データを定期的に保存・復元する仕組みを学ぶ

投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です