burim:docker:backup-resotre
backup script
#!/bin/bash
backup_dir="backup"
mkdir -p "$backup_dir"
containers=$(docker ps --format "{{.Names}}")
for container in $containers; do
echo "Creating backup for container: $container"
docker export "$container" > "$backup_dir/$container.tar"
volumes=$(docker inspect --format='{{range .Mounts}}{{printf "%s\n" .Source}}{{end}}' "$container")
for volume in $volumes; do
volume_name=$(basename "$volume")
echo "Backing up volume: $volume_name"
if [[ -d "$volume" ]]; then
docker run --rm -v "$volume":/data -v "$backup_dir":/backup busybox tar -czf "/backup/${container}_${volume_name}.tar.gz" -C /data .
echo "Backup created for volume: $volume_name"
else
echo "Skipping volume backup: $volume_name (not a directory)"
fi
done
echo "Backup created for container: $container"
done
echo "Backup process completed!"
restore script
#!/bin/bash
backup_dir="backup"
# Specify the backup file names for each container
declare -A container_backups=(
["portainer"]="portainer.tar"
["gitea"]="gitea.tar"
["my-nginx"]="my-nginx.tar"
["awx_task"]="awx_task.tar"
# Add more containers and their corresponding backup file names as needed
)
# Specify the volume backup file names for each container
declare -A volume_backups=(
["portainer"]="data.tar.gz"
["gitea"]="gitea.tar.gz"
["awx_task"]="redis_socket.tar.gz environment.sh.tar.gz projects.tar.gz _data.tar.gz"
["awx_web"]="credentials.py.tar.gz _data.tar.gz"
["awx_memcached"]="memcached_socket.tar.gz"
["awx_redis"]="_data.tar.gz"
["awx_postgres"]="_data.tar.gz data.tar.gz"
# Add more containers and their corresponding volume backup file names as needed
)
# Stop and remove existing containers (if any)
docker stop $(docker ps -aq) >/dev/null 2>&1
docker rm $(docker ps -aq) >/dev/null 2>&1
# Restore containers
for container in "${!container_backups[@]}"; do
backup_file="${container_backups[$container]}"
backup_path="${backup_dir}/${backup_file}"
if [ -f "$backup_path" ]; then
echo "Restoring container: $container"
docker import "$backup_path" "$container"
echo "Container $container restored successfully"
else
echo "Backup file not found for container: $container"
fi
done
# Restore volumes
for container in "${!volume_backups[@]}"; do
backups="${volume_backups[$container]}"
for backup in $backups; do
backup_path="${backup_dir}/${container}_${backup}"
volume_name="${backup%.tar.gz}"
if [ -f "$backup_path" ]; then
echo "Restoring volume: $volume_name for container: $container"
docker run --rm -v "$volume_name":/data -v "$backup_path":/backup busybox tar -xzf "/backup/${container}_${backup}" -C /data
echo "Volume $volume_name for container $container restored successfully"
else
echo "Backup file not found for volume: $volume_name of container: $container"
fi
done
done
echo "Container restoration process completed!"
burim/docker/backup-resotre.txt · Last modified: 2023/07/14 20:50 by burim
