DevOps Tutorial Teil-4: Backups!

| DevOps Scripts

Nachdem wir nun ewig damit verbracht haben unsere Docker Container aufzusetzen wollen wir diese doch noch sichern!

Um eine Sicherung zu erstellen reicht es den gesamten Container zu nehmen in zu Zippen und dann auf einem externen Speicher abzulegen. Am besten automatisch über Nacht. Dafür habe ich ein Script geschrieben, dass sich auf mein NAS verbindet und den gesamten Ordner /var/container ablegt. Die notwendigen Daten sind in den gemappten Ordnern gespeichert, sodass der Container jederzeit von überall neu hochgezogen werden kann und die restlichen Daten werden beim Build neu erzeugt!

1. Script erstellen und abspeichern z.B.: /var/scripts/backup_container.sh

 

#!/bin/bash
# Zieladresse für die Übertragung
REMOTE_USER="PI"
REMOTE_HOST="127.0.0.1"
REMOTE_PATH="/share/Backup/Container"

# Verzeichnis mit den Docker-Containern
DOCKER_DIR="/var/container"
# Aktuelles Datum im Format YYYY-mm-dd
DATE=$(date +%Y-%m-%d)
# Name für das Archiv mit Datum vor dem Archivnamen
ARCHIVE_NAME="$DATE-docker_container_backup.tar.gz"
# Logdatei
LOG_FILE="/var/container/backup.log"
# Docker-Container in Archiv packen und Logausgabe hinzufügen
{
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Creating archive $ARCHIVE_NAME"
tar -zcf "$ARCHIVE_NAME" -C "$DOCKER_DIR" .
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Transfering archive to $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"
rsync -azq "$ARCHIVE_NAME" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Cleanup: Deleting local archive"
rm "$ARCHIVE_NAME"
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Checking for old backups on remote host"
# Alte Backups löschen, wenn mehr als sieben vorhanden sind
BACKUPS=$(ssh "$REMOTE_USER@$REMOTE_HOST" "ls -t $REMOTE_PATH/*-docker_container_backup.tar.gz | tail -n +8")
if [ -n "$BACKUPS" ]; then
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Deleting old backups on remote host"
ssh "$REMOTE_USER@$REMOTE_HOST" "rm $BACKUPS"
fi
} >> "$LOG_FILE" 2>&1

# Löschen der vorherigen Logdatei
rm "$LOG_FILE.prev" >/dev/null 2>&1
# Umbenennen der aktuellen Logdatei zur vorherigen
mv "$LOG_FILE" "$LOG_FILE.prev" >/dev/null 2>&1

 

2. Cronjob anlegen

sudo crontab -e

 

# Sichere Docker Container in den Backup Ordner
0 0 * * * /var/scripts/backup_container.sh

 

 

Gib mir Feedback!

Hab ich Blödsinn geschrieben oder etwas vergessen? Dann zögere nicht weiter und lass es mich sofort wissen indem du hier einen Kommentar hinterlässt!

×
Captcha Code

Kann das Bild nicht gelesen werden? Klicken Sie hier, um zu aktualisieren