【Docker基礎】ボリュームマウントの確認方法

ボリュームのバックアップ

 これまで、コンテナが保持するデータを消さずに保存するためにボリュームマウントという仕組みがあると学びました。しかし、ボリュームマウント自体には「バインドマウント」と違ってホスト上で直接ファイルを扱う手軽さがなく、バックアップするのも一筋縄ではいきません。
 そこでここでは、ボリュームのバックアップ方法として、Docker 公式も推奨する「別の Linux コンテナ(例えば BusyBox)で tar コマンドを使って圧縮&保存する」という手順を解説します。

1.なぜボリュームのバックアップが難しいのか?

  • バインドマウントの場合 → ホスト側ディレクトリをそのままコピーすればOK
  • ボリュームマウントの場合 → ボリュームは Docker Engine が管理するパスにあり、ホストから直接アクセスしにくい
  • volume inspectcontainer inspect で場所やマウント状態はわかるが、実際のファイル操作がしづらい

2.バックアップの流れ(概念)

  1. メインコンテナを停止(あるいはコンテナが存在しない状態)
    ・データが書き換わらないようにする。
  2. 別の Linux コンテナを起動し、tar コマンドでボリュームを圧縮&保存
    docker run --rm オプションで、使い終わったらコンテナ自体を消す。
  3. 圧縮ファイル(.tar.gz など) をホスト側にマウントしたディレクトリへ書き出す。
    ・後でホストで自由に扱えるようにする。

3.コマンド例

docker run --rm
  -v <ボリューム名>:/src
  -v <ホスト上のバックアップ先フォルダ>:/dest
  busybox tar czvf /dest/<バックアップファイル名>.tar.gz -C /src .
  • --rm: コンテナ終了後にコンテナ自体を削除
  • -v ボリューム名:/src: ボリュームを /src にマウント(ボリュームマウント)
  • -v バックアップ先フォルダ:/dest: ホスト上のフォルダを /dest にマウント(バインドマウント)
  • busybox: 軽量の Linux イメージ
  • tar czvf /dest/~ -C /src .: /src(ボリューム)内を .tar.gz に圧縮し、/dest(ホスト)側へ保存

4.リストア(復元)の例

docker run --rm \
  -v <ボリューム名>:/src \
  -v <バックアップ先フォルダ>:/dest \
  busybox tar xzvf /dest/<バックアップファイル>.tar.gz -C /src
  • xzvf: tarで解凍するオプション

5.ポイント

  1. バックアップ時はコンテナを停止
    ・書き込み中のデータがあると不整合が起きる。
  2. tar コマンドで圧縮ファイルを作る
    ・tar, gz, zip など形式はお好み
  3. ホスト側フォルダに書き出す
    ・後で転送や保管が容易
  4. Docker社推奨の方法
    ・シンプルかつ OS に依存しにくい。
    ・バインドマウントと組み合わせて使う場面も多い。

まとめ

  • ボリュームは直接ホストからアクセスしにくいため、別の Linux コンテナを介して tar で圧縮し、バックアップするのが一般的
  • バックアップファイルはホスト側に書き出して保管し、必要に応じて リストア(復元)できる
  • バインドマウントほど手軽ではありませんが、その分 環境依存を減らせる のがボリュームの強みです

 次のコンテンツでは、コンテナのイメージ化について解説していきます。コンテナそのものではなく、コンテナをベースに新しいイメージを作る仕組みも Docker ではよく使われるテクニックです。