アップデート2
未加工の単一ボリュームバックアップbashスクリプト:
#!/bin/bash
# This script allows you to backup a single volume from a container
# Data in given volume is saved in the current directory in a tar archive.
CONTAINER_NAME=$1
VOLUME_NAME=$2
usage() {
echo "Usage: $0 [container name] [volume name]"
exit 1
}
if [ -z $CONTAINER_NAME ]
then
echo "Error: missing container name parameter."
usage
fi
if [ -z $VOLUME_NAME ]
then
echo "Error: missing volume name parameter."
usage
fi
sudo docker run --rm --volumes-from $CONTAINER_NAME -v $(pwd):/backup busybox tar cvf /backup/backup.tar $VOLUME_NAME
raw単一ボリューム復元bashスクリプト:
#!/bin/bash
# This script allows you to restore a single volume from a container
# Data in restored in volume with same backupped path
NEW_CONTAINER_NAME=$1
usage() {
echo "Usage: $0 [container name]"
exit 1
}
if [ -z $NEW_CONTAINER_NAME ]
then
echo "Error: missing container name parameter."
usage
fi
sudo docker run --rm --volumes-from $NEW_CONTAINER_NAME -v $(pwd):/backup busybox tar xvf /backup/backup.tar
使用法は次のようになります。
$ volume_backup.sh old_container /srv/www
$ sudo docker stop old_container && sudo docker rm old_container
$ sudo docker run -d --name new_container myrepo/new_container
$ volume_restore.sh new_container
前提条件は次のとおりです。バックアップファイルはbackup.tarという名前で、バックアップおよび復元スクリプトと同じディレクトリにあり、ボリューム名はコンテナ間で同じです。
更新
コンテナーからボリュームをバックアップすることは、データコンテナーからボリュームをバックアップすることと同じです。
ボリュームはコンテナにリンクされたパスに他ならないので、プロセスは同じです。
docker-backupが同じコンテナーボリュームでも機能するかどうかはわかりませんが、以下を使用できます。
sudo docker run --rm --volumes-from yourcontainer -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
そして:
sudo docker run --rm --volumes-from yournewcontainer -v $(pwd):/backup busybox tar xvf /backup/backup.tar
更新を終了
Dockerボリュームコンテナーをバックアップおよび復元できる、この便利なツールがあります。
https://github.com/discordianfish/docker-backup
次のようないくつかのコンテナーボリュームにリンクされているコンテナーがある場合:
$ docker run --volumes-from=my-data-container --name my-server ...
次のようにすべてのボリュームをバックアップできます。
$ docker-backup store my-server-backup.tar my-server
次のように復元します:
$ docker-backup restore my-server-backup.tar
または、公式の方法に従うことができます:
あるホストから別のホストにデータ専用ボリュームを移植するにはどうすればよいですか?