mikenowak/backup
Docker backup for webapps and mysql
3.1K
A Docker container for automated backups of application files and MySQL/MariaDB databases. This solution provides both backup and restore functionality with configurable scheduling.
You can pull the image directly from Docker Hub:
docker pull mikenowak/backup
The container can operate in three modes depending on which environment variables you provide:
For backing up just application files:
version: '3.8'
services:
backup:
image: mikenowak/backup
environment:
- BACKUP_TIME=0 3 * * * # Run at 3 AM daily
- APP_DIRECTORY=/app
- CLEANUP_OLDER_THAN=30 # Optional
volumes:
- ./app:/app:ro
- ./backups:/backup
For backing up just a database:
version: '3.8'
services:
backup:
image: mikenowak/backup
environment:
- BACKUP_TIME=0 3 * * *
- MYSQL_HOST=db
- MYSQL_USER=dbuser
- MYSQL_DATABASE=myapp
- MYSQL_PASSWORD_FILE=/run/secrets/db_password
- CLEANUP_OLDER_THAN=30 # Optional
volumes:
- ./backups:/backup
- ./db_password:/run/secrets/db_password:ro
For backing up both:
version: '3.8'
services:
backup:
image: mikenowak/backup
environment:
- BACKUP_TIME=0 3 * * *
- APP_DIRECTORY=/app
- MYSQL_HOST=db
- MYSQL_USER=dbuser
- MYSQL_DATABASE=myapp
- MYSQL_PASSWORD_FILE=/run/secrets/db_password
- CLEANUP_OLDER_THAN=30 # Optional
volumes:
- ./app:/app:ro
- ./backups:/backup
- ./db_password:/run/secrets/db_password:ro
Required (at least one set):
APP_DIRECTORY
: Directory to backupMYSQL_HOST
: Database hostMYSQL_USER
: Database userMYSQL_DATABASE
: Database nameMYSQL_PASSWORD_FILE
: Path to file containing database passwordOptional:
BACKUP_TIME
: Cron schedule for backups (default: "0 3 * * *")CLEANUP_OLDER_THAN
: Days to keep backupsBackups are stored in the /backup
volume with the following naming convention:
app_YYYYMMDD_HHMMSS.tar.gz
db_YYYYMMDD_HHMMSS.sql.bz2
The container includes a restore script to recover from backups. To restore:
docker exec backup ls -l /backup
docker exec backup restore YYYYMMDD_HHMMSS
For example:
docker exec backup restore 20240318_030000
To trigger a manual backup:
docker exec backup backup
docker logs
to view the backup historydocker build -t backup .
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Inspired by aveltens/wordpress-backup
docker pull mikenowak/backup