1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker ボリュームのバックアップ方法(Windows環境)

1
Last updated at Posted at 2025-09-11

1. はじめに

本記事では、Windows環境におけるDockerのボリュームバックアップ方法について解説します。

  • 対象読者

    • Dockerで永続データ管理をしている方
    • ボリュームのバックアップやリストア方法を知りたい方
  • ゴール

    • Dockerボリュームのバックアップ&リストアの手順を理解し、実践できるようになる

2. Dockerとは?

Dockerとは、アプリケーションとその実行環境をひとまとめにした「コンテナ」という単位で管理・実行できる、軽量な仮想化技術です。
このコンテナは、アプリが動作するのに必要なOSやライブラリ、設定などをすべてパッケージ化しており、どこでも同じ環境を再現できます。

例えば、開発者のPCで動くものが、そのまま本番環境や別のマシン上でも同じように動作するため、「環境による不具合」を大幅に減らすことができます。

Dockerの裏側では、ホストOSのカーネルを共有しながらプロセスを隔離することで、仮想マシンよりも軽量かつ高速に環境を構築できます。

補足
Dockerの基本概念やWSL上での利用方法は以下の記事を参照してください。

3. ボリュームとは?

Dockerにおけるボリューム(Volume)とは、Dockerが管理する専用の永続ストレージ領域です。
コンテナの外にデータを保存し、コンテナ削除後も保持できます。

補足

一般的なIT用語としての「ボリューム」は、HDDなどの物理的な記憶媒体(ストレージ)を論理的に区切った領域の一部、または全体を指しますが、
Dockerの文脈では「Docker専用のデータ保存領域」という意味で使われます。

ボリュームについてまとめた記事はこちら
Docker ボリュームマウント、バインドマウント、一時メモリマウント まとめ(Windows環境)

4. マウントとは?なぜ必要?

マウントとは、ホストやDockerボリュームのストレージ領域をコンテナ内のディレクトリに接続する仕組みです。
これによりコンテナから永続化されたデータにアクセスできます。

5. バックアップとリストアの仕方

補足
下記の記事で紹介しているDockerプロジェクトを例に解説します。
Docker(Docker Compose)基礎解説(WindowsのWSLを使用した環境構築編)

Docker でコンテナに外部ストレージを接続する方法は、大きく分けて 3 種類 あります。

  • ボリュームマウント(Volume Mount)
    今回解説する対象
  • バインドマウント(Bind Mount)
    → フォルダをコピーすればOK
  • 一時メモリマウント(tmpfs Mount)
    → 永続化をさせないのでバックアップを取る場面は限られるはず

5-1. バックアップを取得

例:db_data ボリュームをバックアップ

# powershellで実行
docker run --rm `
  -v docker-sample_db_data:/volume `
  -v ${PWD}:/backup `
  alpine `
  tar czf /backup/db_data_backup.tar.gz -C /volume .

docker run --rm alpine

  • alpine イメージ(軽量なLinux)で一時的なコンテナを起動
    (他にはbusyboxも軽量なため用途に適している)
  • --rm で実行後にコンテナは自動削除

-v docker-sample_db_data:/volume

  • Docker Volume db_data をコンテナ内の /volume にマウント

-v ${PWD}:/backup

  • ホスト側の現在のディレクトリ(${PWD})を /backup にマウント
  • これにより、コンテナ内で /backup に書き込むと、ホスト側のカレントフォルダにファイルが作られる

tar czf /backup/db_data_backup.tar.gz -C /volume .

  • tar コマンドで /volume の中身をアーカイブ
    • c = 作成 (create)
    • z = gzip 圧縮
    • f = ファイルに出力
  • 出力先は /backup/db_data_backup.tar.gz
  • -C /volume ./volume に移動してその中身を全部まとめる

5-2. バックアップから復元

# powershellで実行
docker run --rm `
  -v docker-sample_db_data:/volume `
  -v ${PWD}:/backup `
  alpine `
  sh -c "tar xzf /backup/db_data_backup.tar.gz -C /volume"

docker run --rm alpine

  • alpine イメージ(軽量なLinux)で一時的なコンテナを起動
    (バックアップ同様、busybox も軽量で用途に適している)
  • --rm で実行後にコンテナは自動削除

-v docker-sample_db_data:/volume

  • 復元先の Docker Volume db_data をコンテナ内の /volume にマウント

-v ${PWD}:/backup

  • ホスト側の現在のディレクトリ(${PWD})を /backup にマウント
  • これにより、コンテナ内で /backup を参照するとホスト側のカレントフォルダにアクセスできる

sh -c "tar xzf /backup/db_data_backup.tar.gz -C /volume"

  • tar コマンドでアーカイブを展開
    • x = 展開 (extract)
    • z = gzip 圧縮の解凍
    • f = ファイル指定
  • /backup/db_data_backup.tar.gz/volume に展開
  • -C /volume/volume に移動して中身を全て復元

補足

  • バックアップ対象ボリュームを使用中のコンテナは停止推奨(データ整合性のため)
  • 複数ボリュームの場合は個別に実施
  • 定期的にバックアップするならスケジューラーや専用ツールを活用

6. 実際にバックアップとリストアができるか確認

6-1. Docker Composeでビルドをして volume を作成

# volumeを作成する
PS C:\Users\UserName\00.個人フォルダ\01.Git\docker-sample> docker-compose up -d --build
(省略)
[+] Running 5/5
 ✔ docker-sample-app                  Built
 ✔ Network docker-sample_app-network  Created
 ✔ Volume "docker-sample_db_data"     Created
 ✔ Container db                       Started
 ✔ Container spring-app               Started

# 作成したvolumeを確認する
PS C:\Users\UserName\00.個人フォルダ\01.Git\docker-sample> docker volume ls
DRIVER    VOLUME NAME
local     docker-sample_db_data

6-2. DBを更新

更新前
image.png

更新後
image.png

6-3. volume のバックアップを作成

PS C:\Users\UserName\00.個人フォルダ\01.Git\docker-sample> docker run --rm `
>>   -v docker-sample_db_data:/volume `
>>   -v ${PWD}:/backup `
>>   alpine `
>>   tar czf /backup/db_data_backup.tar.gz -C /volume .

6-4. volume を削除

コンテナを停止&削除→volumeを削除→コンテナを再作成
※ボリュームは存在しないので再作成される

# コンテナを停止&削除
PS C:\Users\UserName\00.個人フォルダ\01.Git\docker-sample> docker-compose down
[+] Running 3/3
 ✔ Container spring-app               Removed 
 ✔ Container db                       Removed
 ✔ Network docker-sample_app-network  Removed

# 初期状態のvolumeが存在することを確認
PS C:\Users\UserName\00.個人フォルダ\01.Git\docker-sample> docker volume ls    
DRIVER    VOLUME NAME
local     docker-sample_db_data

# volumeを削除
PS C:\Users\UserName\00.個人フォルダ\01.Git\docker-sample> docker volume rm docker-sample_db_data
docker-sample_db_data

# volumeが削除されていることを確認
PS C:\Users\UserName\00.個人フォルダ\01.Git\docker-sample> docker volume ls
DRIVER    VOLUME NAME

# コンテナを再作成
PS C:\Users\UserName\00.個人フォルダ\01.Git\docker-sample> docker-compose up -d
[+] Running 4/4
 ✔ Network docker-sample_app-network  Created
 ✔ Volume "docker-sample_db_data"     Created
 ✔ Container db                       Started
 ✔ Container spring-app               Started

PS C:\Users\UserName\00.個人フォルダ\01.Git\docker-sample> docker volume ls
DRIVER    VOLUME NAME
local     docker-sample_db_data

DBの状態は初期化されている
image.png

6-5. volume をリストア

コンテナを停止&削除→volumeを削除→volumeをリストア→コンテナを再作成
※ボリュームは存在するのでそのまま利用される

# コンテナを停止&削除
PS C:\Users\UserName\00.個人フォルダ\01.Git\docker-sample> docker-compose down
[+] Running 3/3
 ✔ Container spring-app               Removed 
 ✔ Container db                       Removed
 ✔ Network docker-sample_app-network  Removed 

# 初期状態のvolumeが存在することを確認
PS C:\Users\UserName\00.個人フォルダ\01.Git\docker-sample> docker volume ls    
DRIVER    VOLUME NAME
local     docker-sample_db_data

# 初期状態のvolumeを削除
PS C:\Users\UserName\00.個人フォルダ\01.Git\docker-sample> docker volume rm docker-sample_db_data
docker-sample_db_data

# 初期状態のvolumeが削除されていることを確認
PS C:\Users\UserName\00.個人フォルダ\01.Git\docker-sample> docker volume ls
DRIVER    VOLUME NAME

# 6-3でバックアップしておいたvolumeをリストア
PS C:\Users\UserName\00.個人フォルダ\01.Git\docker-sample> docker run --rm `
>>   -v docker-sample_db_data:/volume `
>>   -v ${PWD}:/backup `
>>   alpine `
>>   sh -c "tar xzf /backup/db_data_backup.tar.gz -C /volume"

# リストアしたvolumeが存在することを確認
PS C:\Users\UserName\00.個人フォルダ\01.Git\docker-sample> docker volume ls
DRIVER    VOLUME NAME
local     docker-sample_db_data

# コンテナを再作成
PS C:\Users\UserName\00.個人フォルダ\01.Git\docker-sample> docker-compose up -d
[+] Running 3/3
 ✔ Network docker-sample_app-network  Created
 ✔ Container db                       Started
 ✔ Container spring-app               Started  

バックアップを取った時点のDBの状態になっている
image.png

7. まとめ

本記事では、Windows環境におけるDockerボリュームのバックアップとリストア方法を解説しました。

  • Dockerボリュームのデータをtarアーカイブ化して安全に保存
  • docker run で一時コンテナを使い、簡単にバックアップ・復元可能

9. 参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?