gistfile1.txt
· 2.3 KiB · Text
Raw
#!/bin/bash
# Environment check
# If migrating from localhost, set this to localhost
if [[ ! $SOURCE_HOST_ADDRESS ]]
then
echo "Please set the current host address in SOURCE_HOST_ADDRESS"
exit 1
fi
# If migrating from localhost, set this to $USER
if [[ ! $SOURCE_HOST_USER ]]
then
echo "Please set the current host user in SOURCE_HOST"
exit 1
fi
# If migrating to localhost, set this to localhost
if [[ ! $TARGET_HOST_ADDRESS ]]
then
echo "Please set the new host address in TARGET_HOST_ADDRESS"
exit 1
fi
# If migrating to localhost, set this to $USER
if [[ ! $TARGET_HOST_USER ]]
then
echo "Please set the new host user in TARGET_HOST_USER"
exit 1
fi
# Argument check
if [[ ! $1 ]]
then
echo "Please supply a docker volume name, as displayed by the command 'docker volume ls'"
exit 1
fi
volume_name=$1
# Export the volume from the current instance
echo "Exporting volume $volume_name on $SOURCE_HOST_ADDRESS"
ssh "$SOURCE_HOST_USER"@"$SOURCE_HOST_ADDRESS" "\
mkdir -p \$HOME/docker-volume-backup
docker run \
--rm \
-v $volume_name:/volume-backup-source \
-v \$HOME/docker-volume-backup:/volume-backup-target \
busybox \
sh -c 'cd /volume-backup-source && tar cf /volume-backup-target/backup.tar .' \
"
# Transfer the exported volume to the new address
echo "Transferring exported volume $volume_name from $SOURCE_HOST_ADDRESS to $TARGET_HOST_ADDRESS"
ssh "$TARGET_HOST_USER"@"$TARGET_HOST_ADDRESS" "mkdir -p \$HOME/docker-volume-backup"
scp -3 "$SOURCE_HOST_USER"@"$SOURCE_HOST_ADDRESS":./docker-volume-backup/backup.tar \
"$TARGET_HOST_USER"@"$TARGET_HOST_ADDRESS":./docker-volume-backup/backup.tar
# Restore the backup
echo "Creating volume $volume_name on $TARGET_HOST_ADDRESS"
ssh "$TARGET_HOST_USER"@"$TARGET_HOST_ADDRESS" "\
docker volume create $volume_name \
&& docker run \
--rm \
-v $volume_name:/volume-backup-target \
-v \$HOME/docker-volume-backup/:/volume-backup-source \
busybox \
sh -c 'cd /volume-backup-target && tar xf /volume-backup-source/backup.tar .' \
"
# Clean up residual files
echo "Cleaning up unnecessary files"
ssh "$SOURCE_HOST_USER"@"$SOURCE_HOST_ADDRESS" "rm -rf \$HOME/docker-volume-backup"
ssh "$TARGET_HOST_USER"@"$TARGET_HOST_ADDRESS" "rm -rf \$HOME/docker-volume-backup"
echo "Successfully migrated docker volume $volume_name from $SOURCE_HOST_ADDRESS to $TARGET_HOST_ADDRESS"
| 1 | #!/bin/bash |
| 2 | |
| 3 | # Environment check |
| 4 | |
| 5 | # If migrating from localhost, set this to localhost |
| 6 | if [[ ! $SOURCE_HOST_ADDRESS ]] |
| 7 | then |
| 8 | echo "Please set the current host address in SOURCE_HOST_ADDRESS" |
| 9 | exit 1 |
| 10 | fi |
| 11 | |
| 12 | # If migrating from localhost, set this to $USER |
| 13 | if [[ ! $SOURCE_HOST_USER ]] |
| 14 | then |
| 15 | echo "Please set the current host user in SOURCE_HOST" |
| 16 | exit 1 |
| 17 | fi |
| 18 | |
| 19 | # If migrating to localhost, set this to localhost |
| 20 | if [[ ! $TARGET_HOST_ADDRESS ]] |
| 21 | then |
| 22 | echo "Please set the new host address in TARGET_HOST_ADDRESS" |
| 23 | exit 1 |
| 24 | fi |
| 25 | |
| 26 | # If migrating to localhost, set this to $USER |
| 27 | if [[ ! $TARGET_HOST_USER ]] |
| 28 | then |
| 29 | echo "Please set the new host user in TARGET_HOST_USER" |
| 30 | exit 1 |
| 31 | fi |
| 32 | |
| 33 | # Argument check |
| 34 | |
| 35 | if [[ ! $1 ]] |
| 36 | then |
| 37 | echo "Please supply a docker volume name, as displayed by the command 'docker volume ls'" |
| 38 | exit 1 |
| 39 | fi |
| 40 | volume_name=$1 |
| 41 | |
| 42 | # Export the volume from the current instance |
| 43 | |
| 44 | echo "Exporting volume $volume_name on $SOURCE_HOST_ADDRESS" |
| 45 | ssh "$SOURCE_HOST_USER"@"$SOURCE_HOST_ADDRESS" "\ |
| 46 | mkdir -p \$HOME/docker-volume-backup |
| 47 | docker run \ |
| 48 | --rm \ |
| 49 | -v $volume_name:/volume-backup-source \ |
| 50 | -v \$HOME/docker-volume-backup:/volume-backup-target \ |
| 51 | busybox \ |
| 52 | sh -c 'cd /volume-backup-source && tar cf /volume-backup-target/backup.tar .' \ |
| 53 | " |
| 54 | |
| 55 | |
| 56 | # Transfer the exported volume to the new address |
| 57 | |
| 58 | echo "Transferring exported volume $volume_name from $SOURCE_HOST_ADDRESS to $TARGET_HOST_ADDRESS" |
| 59 | ssh "$TARGET_HOST_USER"@"$TARGET_HOST_ADDRESS" "mkdir -p \$HOME/docker-volume-backup" |
| 60 | scp -3 "$SOURCE_HOST_USER"@"$SOURCE_HOST_ADDRESS":./docker-volume-backup/backup.tar \ |
| 61 | "$TARGET_HOST_USER"@"$TARGET_HOST_ADDRESS":./docker-volume-backup/backup.tar |
| 62 | |
| 63 | |
| 64 | # Restore the backup |
| 65 | |
| 66 | echo "Creating volume $volume_name on $TARGET_HOST_ADDRESS" |
| 67 | ssh "$TARGET_HOST_USER"@"$TARGET_HOST_ADDRESS" "\ |
| 68 | docker volume create $volume_name \ |
| 69 | && docker run \ |
| 70 | --rm \ |
| 71 | -v $volume_name:/volume-backup-target \ |
| 72 | -v \$HOME/docker-volume-backup/:/volume-backup-source \ |
| 73 | busybox \ |
| 74 | sh -c 'cd /volume-backup-target && tar xf /volume-backup-source/backup.tar .' \ |
| 75 | " |
| 76 | |
| 77 | # Clean up residual files |
| 78 | |
| 79 | echo "Cleaning up unnecessary files" |
| 80 | ssh "$SOURCE_HOST_USER"@"$SOURCE_HOST_ADDRESS" "rm -rf \$HOME/docker-volume-backup" |
| 81 | ssh "$TARGET_HOST_USER"@"$TARGET_HOST_ADDRESS" "rm -rf \$HOME/docker-volume-backup" |
| 82 | |
| 83 | echo "Successfully migrated docker volume $volume_name from $SOURCE_HOST_ADDRESS to $TARGET_HOST_ADDRESS" |