diff --git a/container/volumebk.md b/container/volumebk.md index 88be873..99dcd78 100644 --- a/container/volumebk.md +++ b/container/volumebk.md @@ -102,6 +102,72 @@ Permissions Size User Date Modified Name .rw-r--r-- 259 root 25 Feb 15:42  snikket-data_bk_2024-02-25.tar.gz ``` +## Script di esempio + +```bash +#!/bin/bash + +TOPIC="nomedeltopic" +SERVER="ntfy.server.net" +BACKUP_DIR="/etc/snikket/backup" +CONTAINER_LIST=$(docker container ls -q) +# Lista di immagini con il tag 'stable' +IMAGE_LIST=$(docker images --filter "reference=snikket/*:stable" -q) +VOLUME_LIST=$(docker volume ls --format '{{.Name}}') + +# Funzioni per inviare notifiche +send_success_notification() { + curl -H "X-Tags: tada" -H "Attach: https://yanbin.blog/wp-content/uploads/2020/03/docker-2.png" -d "Backup volume $VOLUME_NAME OK! :)" $SERVER/$TOPIC +} + +# Funzione per inviare notifica di errore +send_error_notification() { + curl -H "X-Tags: skull" -d "Backup volume $VOLUME_NAME ERROR!" $SERVER/$TOPIC +} + +notify_backup_removed() { + curl -H "X-Tags: warning" -d "Some backups have been deleted" $SERVER/$TOPIC +} + +# Rimozione dei backup piu' vecchi di 7 giorni +remove_old_backups() { + if [ find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +7 -exec rm {} \; ]; then + notify_backup_removed + else + echo "Nessun backup eliminato!" + fi +} + +### BACKUP #### + +cd $BACKUP_DIR + +# Commit per ogni container nella lista +for CONTAINER_ID in $CONTAINER_LIST; do + docker container commit $CONTAINER_ID || send_error_notification +done + +# tr (translate or delete characters): +# tr: un comando che serve per tradurre o eliminare caratteri in un flusso di dati. +# tr '/' '-' traduce ogni carattere '/' in '-' + +# Backup delle immagini +for IMAGE_ID in $IMAGE_LIST; do + # Ottieni il nome dell'immagine con il tag + IMAGE_NAME_WITH_TAG=$(docker inspect --format='{{.RepoTags}}' $IMAGE_ID | tr -d '[] ') + + docker image save -o $(echo $IMAGE_NAME_WITH_TAG | cut -d '/' -f 2 | tr ':' '-')_$(date +%F)_IMAGE.tar.gz $IMAGE_NAME_WITH_TAG || send_error_notification +done + +# Backup dei volumi +for VOLUME_NAME in $VOLUME_LIST; do + docker run --rm --mount source=$VOLUME_NAME,target=/$VOLUME_NAME -v $(pwd):/backup busybox tar -czvf /backup/$VOLUME_NAME\_bk_$(date +%F)_VOLUME.tar.gz /$VOLUME_NAME && send_success_notification || send_error_notification +done + +# Rimozione dei backup piu' vecchi di 7 giorni +remove_old_backups +``` + ## Collegamenti - [https://docs.docker.com/desktop/backup-and-restore/](https://docs.docker.com/desktop/backup-and-restore/)