Backup dei volumi Docker e caricamento su S3

I volumi Docker sono una parte essenziale dell’architettura containerizzata, spesso utilizzati per rendere persistenti i dati attraverso i cicli di vita del container. Per proteggersi dalla perdita di dati, è fondamentale eseguire regolarmente il backup di questi volumi. Questo articolo fornisce uno script di shell per automatizzare il processo di backup giornalieri dei volumi Docker, caricandoli su AWS S3 e ripulindo i vecchi backup.

Prerequisiti

  1. Docker installato e funzionante.
  2. AWS Command Line Interface (CLI) installato e configurato con le autorizzazioni appropriate.
  3. IL “jq”. strumento installato per elaborare il contenuto JSON (spesso utilizzato per analizzare gli output dei comandi Docker)

Panoramica dello script

Lo script farà quanto segue:

  1. Effettua il loop su ciascun volume Docker.
  2. Crea un backup del volume utilizzando docker cp.
  3. Comprimi il backup.
  4. Carica il backup compresso su un bucket S3.
  5. Rimuovi i backup locali più vecchi di 30 giorni.
  6. Rimuovi i backup S3 più vecchi di 30 giorni.

Il copione

#!/bin/bash
# Set variables
BACKUP_DIR="/path/to/backup/dir" # Local backup directory
S3_BUCKET="s3://your-bucket-name" # Your S3 bucket name
DAYS_TO_KEEP=30
# 1. Loop over each Docker volume
for VOLUME in $(docker volume ls -q); do
    TIMESTAMP=$(date +%Y%m%d%H%M%S)
    BACKUP_NAME="${VOLUME}_${TIMESTAMP}.tar.gz"
    # 2. Create a backup of the volume
    CONTAINER_ID=$(docker run -d -v ${VOLUME}:/volume busybox true)
    docker cp ${CONTAINER_ID}:/volume ${BACKUP_DIR}/${VOLUME}
    docker rm -v ${CONTAINER_ID}
    # 3. Compress the backup
    tar -czf ${BACKUP_DIR}/${BACKUP_NAME} -C ${BACKUP_DIR} ${VOLUME}
    rm -rf ${BACKUP_DIR}/${VOLUME}
    # 4. Upload the compressed backup to an S3 bucket
    aws s3 cp ${BACKUP_DIR}/${BACKUP_NAME} ${S3_BUCKET}/${BACKUP_NAME}
done
# 5. Remove local backups older than 30 days
find ${BACKUP_DIR} -name "*.tar.gz" -mtime +${DAYS_TO_KEEP} -exec rm {} ;
# 6. Remove S3 backups older than 30 days
OLDER_THAN_DATE=$(date -d "-${DAYS_TO_KEEP} days" +%Y%m%d)
aws s3 ls ${S3_BUCKET}/ | awk '{print $4}' | while read BACKUP; do
    BACKUP_DATE=$(echo ${BACKUP} | awk -F_ '{print $2}' | awk -F. '{print $1}')
    if (( ${BACKUP_DATE} -lt ${OLDER_THAN_DATE} )); then
        aws s3 rm ${S3_BUCKET}/${BACKUP}
    fi
done

Esecuzione

Salvare lo script in un file, ad esempio “docker_vol_backup.sh”..

  1. Rendi eseguibile lo script:
    chmod +x docker_vol_backup.sh 
  2. Pianifica l’esecuzione quotidiana dello script utilizzando cron:
     0 2 * * * /path/to/docker_vol_backup.sh >> /path/to/logfile.log 2>&1 

Questa configurazione cron eseguirà lo script ogni giorno alle 2 del mattino e registrerà l’output in un file di registro specificato.

Conclusione

L’automazione del processo di backup dei volumi Docker garantisce la sicurezza dei dati e riduce al minimo l’intervento umano. Sfruttando AWS S3, i dati possono essere archiviati in un ambiente scalabile, sicuro e accessibile. La pulizia periodica dei vecchi backup sia localmente che in S3 aiuta a gestire i costi di storage e a prevenire inutili disordine. Assicurati sempre di testare le procedure di backup e ripristino in un ambiente sicuro prima di fare affidamento su di esse per i dati di produzione.

Autore

Classe Novanta3, Fondatore di TrgtKLS. Appassionato in Sec IT & Tech. Expert per l'amministrazione web server e supporto in Back-&, ottimizzazione e manutenzione di esso. • Metà Free e Metà Freelancer • [email protected]

Articoli correlati

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *