Entwickelt: 2022 ... 2023
Das mag jetzt ein wenig verwirren - Container werden doch schon auf etlichen Erklärbär-Seiten beschrieben. Hier geht es aber mehr um einige kleine Helferlein im Zusammenhang mit den Backups auf meinen Servern, die habe ich in die PreBackup- und PostBackup-Scripts gepackt.
Vor ...
Ich bin vorsichtig: Auf den Servern, die docker-compose-Installationen beherbergen, fahre
ich die vor einem Backup runter, damit ich einen konsistenten Zustand der Images und Volumes ins Backup kriege.
Geht ganz simpel mit cd /path/to/compose_app && docker-compose down. Da ich die nicht
im produktiven (also immer-verfügbar-sein-müssen) Betrieb nutze und die Backups per cron
zu einer Zeit laufen, wo selbst ich normalerweise schlafe, stört mich das eher nicht.
...und nach dem Backup
Genau so einfach ist dann nach dem Backup das Aktivieren:
cd /path/to/compose_app && docker-compose up -d.
systemd:
Auf einem Raspi4 mit RaspberryPi-OS
konnte ich die docker-compose-Konstrukte auch
als systemd-Services zum Laufen bringen, das Service-Script sieht so aus:
[Unit] Description=jt_app Requires=docker.service After=docker.service [Service] Restart=always User=pi Group=docker WorkingDirectory=/path/to/jt_app # Shutdown container (if running) when unit is started ExecStartPre=/usr/local/bin/docker-compose -f docker-compose.yml down # Start container when unit is started ExecStart=/usr/local/bin/docker-compose -f docker-compose.yml up # Stop container when unit is stopped ExecStop=/usr/local/bin/docker-compose -f docker-compose.yml down [Install] WantedBy=multi-user.targetDamit sehen die Pre- und PostBackup-Scripts dann so aus:
PostgreSQL:
Auf einem Debian11-Server habe ich es nicht hingekriegt, die Volumes für meine
PostgreSQL-Datenbanken wie gewünscht in das Verzeichnis des DB-Containers zu mappen -
die liegen in irgendwelchen obskuren Verzeichnissen unterhalb meines Home. Deshalb mache ich da vor dem Runterfahren
von docker-compose im Container einen pg_dump:
# backup dir and current backup file export BKP_DIR=/path/to/docker-compose/pg_db/pg_backup export BKP_FILE=$BKP_DIR/pg_$(/usr/bin/date +"%Y-%m-%d").dump # dump into and compress backup file echo "dump portal database" docker exec -t portal_app-pg-db-1 /bin/su postgres -c \ "/usr/bin/pg_dump -U postgres -h localhost portal" >$BKP_FILE tar czf ${BKP_FILE}.tgz $BKP_FILE && rm $BKP_FILE # cleanup oldest backups echo "removing oldest postgres backups" cd $BKP_DIR export bkp_no=1 ls -t | while read bkp_file; do test $bkp_no -gt 7 && rm $bkp_file bkp_no=`expr $bkp_no + 1` done exit 0