User Tools

Site Tools


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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki