コンテナ・クラウド基盤

Dockerのボリュームとはデータを消さずに残す方法

Dockerのボリュームとは、コンテナが使うデータを永続化する仕組みです。コンテナを削除してもデータが残る理由、バインドマウントとの違い、バックアップや削除時の注意点を公式ドキュメントから整理します。

公的機関・公式資料などの一次情報と照合して作成しています。このサイトについて

Dockerのボリュームとは

Docker のコンテナは、削除すると、中に保存したデータも消えます。データベースの中身やアップロードされたファイルを残したいときは、データをコンテナの外に保存する必要があります。そのための仕組みが、ボリュームです。

Docker の公式ドキュメントでは、ボリュームは、コンテナが作る、または使うデータを永続化するための、Docker が作成・管理する保存領域と説明されています。さらに、コンテナが生成・利用するデータを永続化するための、推奨される方法とされています。

コンテナが独立して、削除されても他に影響しない、という性質は便利ですが、データを残したい場合には、この性質を踏まえた設計が必要です。

基本(ボリュームとバインドマウント)

データをコンテナの外に置く方法は、主に2つあります。

方式 内容 特徴
ボリューム Docker が管理する保存領域 ホストの細かいフォルダ構成に依存しない。バックアップや移行がしやすい
バインドマウント ホストの特定のフォルダを、コンテナに直接つなぐ ホストのフォルダ構成に依存する。ファイルを直接編集しやすい

公式ドキュメントが挙げる、ボリュームの利点を整理します。

利点 内容
データが残る ボリュームを使うコンテナを削除しても、データは残る
複数のコンテナで共有 複数のコンテナに同時につなげられ、アクセス権限も調整できる
バックアップと移行 バインドマウントより、バックアップや移行がしやすい
管理のしやすさ Docker のコマンドや API で管理できる。Linux と Windows の両方で使える
速度 コンテナの書き込み層に直接アクセスするより、効率がよいと説明されている

バインドマウントは、ホストのディレクトリ構造に依存するのに対し、ボリュームは、Docker が完全に管理し、ホストの主要な機能から切り離されている、というのが公式の説明です。

Dockerのボリュームの具体例

データベースのコンテナを例にします。

設定 コンテナを削除したとき 結果
ボリュームなし データも消える 登録した内容がすべて失われる
ボリュームあり コンテナは消えるが、データは残る 新しいコンテナを同じボリュームにつなげば、データを引き継げる

基本のコマンドの例です。

コマンドの例 意味
docker volume create mydata ボリュームを作る
docker run -v mydata:/var/lib/data イメージ名 ボリュームをコンテナの指定の場所につないで起動する
docker volume ls ボリュームを一覧する
docker volume rm mydata ボリュームを削除する(データも消える)

最後のコマンドは、データを消すため、実行の前に、バックアップと、本当に不要かの確認が必要です。

Docker Compose では、設定ファイルの volumes の項目で、名前つきのボリュームを定義して、サービスにつなげます。環境ごとに設定を変えられるため、開発と本番で同じ書き方を使いやすくなります。

Dockerのボリュームの実践ステップ

  1. コンテナのうち、データを残す必要があるもの(データベース、アップロード先など)を洗い出す。
  2. そのコンテナが、データを保存する場所(フォルダ)を、イメージの説明書で確認する。
  3. ボリュームを作り、その場所につないで起動する。
  4. コンテナを一度削除して、作り直し、データが残っていることを確認する。
  5. バックアップの方法と、頻度を決める。
  6. 不要になったボリュームを、確認のうえで整理する。

Dockerのボリュームの注意点

  • ボリュームを削除すると、データも消えます。コマンドの付加オプションによっては、コンテナの削除と一緒にボリュームも消える場合があります。実行前に確認します。
  • ボリュームがあっても、バックアップの代わりにはなりません。ホストの故障や、誤操作に備えて、別の場所にも保管します。
  • データベースなどの重要なデータを、実行中にそのままコピーすると、整合性が取れない場合があります。公式のバックアップの手順を確認します。
  • 秘密情報(パスワードなど)を含むデータは、ボリュームの保管場所と権限に注意します。
  • 詳しい仕様やコマンドは、公式ドキュメントで確認してください。

Dockerのボリュームでよくあるミス

  • ボリュームを設定せず、コンテナの再作成でデータを失う。
  • 保存先の場所を間違えて、つないだ場所に書き込まれない。
  • 不要なボリュームが溜まり、ディスクを圧迫する。
  • バックアップを取らず、ボリュームだけを頼りにする。

Dockerのボリュームのチェックリスト

  • データを残すコンテナを、洗い出したか。
  • 保存先の場所を、正しく指定したか。
  • コンテナを作り直して、データが残ることを確認したか。
  • バックアップの手順と頻度を決めたか。
  • 削除の操作の前に、バックアップと確認を行うか。

DockerのボリュームのFAQ(よくある質問)

Q. ボリュームとバインドマウントは、どちらを使うべきですか。
A. 公式ドキュメントでは、データの永続化にはボリュームが推奨されています。ホストのファイルを直接編集したい開発の場面では、バインドマウントが便利です。

Q. ボリュームの中身は、どこにありますか。
A. Docker が管理する領域にあり、通常は、Docker のコマンドで扱います。保存場所は環境によって異なります。

Q. 複数のコンテナで、同じボリュームを使えますか。
A. 使えます。ただし、同時に書き込むと、データが壊れる場合があるため、アプリの仕様を確認します。

筆者の見解(Dockerのボリューム)

コンテナの導入で最初に起きる事故は、設定の難しさより、データが消えるという単純なものだと考えます。コンテナを気軽に作り直せる便利さの裏返しで、残すべきデータの置き場所を決めていないと、作り直しがそのままデータの消失になるためです。私見では、新しいコンテナを使い始めるときは、最初に、何を残すか、どこにあるか、どうバックアップするかを、3点セットで書き出す習慣をつけると、事故が大きく減ります。

Dockerのボリュームの関連項目

出典(一次情報)

本記事は一般的な情報の提供を目的としています。SaaS・ツールの機能・料金・無料枠・仕様は頻繁に更新されるため、最新の内容は各社の公式ページでご確認ください。契約・法務・セキュリティに関する判断は、専門家や社内の担当部門にご相談ください。「筆者の見解」は一つの考え方です。