ボリュームのバックアップ/リストア

Docker Desktop for Windows が管理する docker ボリュームのバックアップおよびリストアの方法。

バックアップ

バックアップ対象ボリュームの特定

 どのボリュームをバックアップするのか、予め特定しておく。

PS> docker.exe images

 なお、リストア時にもボリューム名を指定する必要があるため、もし、バックアップ時と同名で展開したいのであれば、それを覚えておく必要がある。
例えば、ファイル名を volume-<ボリューム名>.tar.gz 等にしておけばリストア時にも間違えにくい。

コンテナの削除

 対象となるボリュームにアクセスしているコンテナがある場合にはそれを停止および削除しておく。

PS> docker.exe container stop <コンテナ名>
PS> docker.exe container rm <コンテナ名>

バックアップする

 バックアップ対象のボリュームを、tar.gzファイルにアーカイブする。
※ディストロ alpine のコンテナを生成し、その中でバックアップを行う。

PS> docker.exe run --name <ContainerName> --rm `
    -v <VolumeName>:/<MountPoint>/vol `
    -v <gzDir>:/<MountPoint>/tar `
    alpine `
    /bin/sh -c `
    --% "cd /<MountPoint>/vol ; tar -zcvf /<MountPoint>/tar/<gzFileName> $(ls -A)"
---
<ContainerName>: バックアップ用コンテナ名(何でもOK・既存コンテナ以外)
<VolumeName>: バックアップ対象の docker ボリューム名
<MountPoint>: ディストロ内マウントフォルダ(何でもOK・既存フォルダ以外)
<gzDir>: .tar.gzアーカイブを出力するWindowsディレクトリ(フルパス)
<gzFileName>: .tar.gzアーカイブのファイル名(ディレクトリは含まない)

以下に例を記す。
<ContainerName>: backup
<VolumeName>: targetVolume
<MountPoint>: mntp
<gzDir>: C:\backup
<gzFileName>: targetVolume.tar.gz

PS> docker.exe run --name backup --rm `
    -v targetVolume:/mntp/vol `
    -v C:\backup:/mntp/tar `
    alpine `
    /bin/sh -c --% "cd /mntp/vol ; tar -zcvf /mntp/tar/targetVolume.tar.gz $(ls -A)"

リストア

コンテナの削除

 対象となるボリュームが存在し、アクセスしているコンテナがある場合にはそれを停止および削除しておく。

PS> docker.exe container stop <コンテナ名>
PS> docker.exe container rm <コンテナ名>

ボリュームの削除

 リストア対象となるボリュームが存在する場合には、それを削除しておく。

PS> docker.exe volume rm <ボリューム名>

リストアする

 バックアップしたボリュームのtar.gzファイルをリストアする。

PS> docker.exe run --name <ContainerName> --rm `
    -v <VolumeName>:/<MountPoint>/vol `
    -v <gzDir>:/<MountPoint>/tar `
    alpine `
    /bin/sh -c `
    --% "cd /<MountPoint>/vol ; tar -zxvf /<MountPoint>/tar/<gzFileName>"
---
<ContainerName>: リストア用コンテナ名(何でもOK・既存コンテナ以外)
<VolumeName>: リストア対象の docker ボリューム名
<MountPoint>: ディストロ内マウントフォルダ(何でもOK・既存フォルダ以外)
<gzDir>: .tar.gzアーカイブが存在するWindowsディレクトリ(フルパス)
<gzFileName>: .tar.gzアーカイブのファイル名(ディレクトリは含まない)

以下に例を記す。
<ContainerName>: backup
<VolumeName>: targetVolume
<MountPoint>: mntp
<gzDir>: C:\backup
<gzFileName>: targetVolume.tar.gz

PS> docker.exe run --name backup --rm `
    -v targetVolume:/mntp/vol `
    -v C:\backup:/mntp/tar `
    alpine `
    /bin/sh -c `
    --% "cd /mntp/vol ; tar -zxvf /mntp/tar/targetVolume.tar.gz"

ボリュームの復旧操作

 docker上で動作する環境に変更がなければそのまま使用することが可能であるが、もしボリュームのマウント先変更やWindowsユーザ変更などでバックアップ時とは異なる状態の場合には、それを手動で復旧する必要がある。(復旧内容はボリュームの使い方によって変わるため、個別に対応する必要がある)