fflo/restic
Restic inside docker with CRON for automated back-ups
421
Restic is a fantastic backup tool. To wrap this in a usefull and flexible docker container there is this repo.
Includes:
Get latest image
You can run restic command very like this:
docker pull fflo/restic:latest
docker run --rm -e RESTIC_REPOSITORY="s3:https://s3.amazonaws.com/some-repo" \
-e AWS_ACCESS_KEY_ID="keyid" \
-e AWS_SECRET_ACCESS_KEY="topsecret" \
-e RESTIC_PASSWORD="some_good_hash" fflo/restic \
-v /:/data
restic snapshots
Create a docker-compose.yml
Adapt this file with your FQDN. Install docker-compose in the version 1.6
or higher.
restart: always
ensures that the restic server container is automatically restarted by Docker in cases like a Docker service or host restart or container exit.
version: '2'
services:
restic:
restart: always
image: fflo/restic:latest
hostname: backup
domainname: domain.com
container_name: restic
volumes:
- /:/data
environment:
- RESTIC_BACKUP_OPTIONS="--exclude=/data/dir/*"
- RESTIC_REPOSITORY="s3:https://s3.amazonaws.com/some-repo"
- AWS_ACCESS_KEY_ID="keyid"
- AWS_SECRET_ACCESS_KEY="topsecret"
- RESTIC_PASSWORD="some_good_hash"
Listed in these examples are also the defaults
to change the backup times:
For example you want to run the backup every day at 03:15.
version: '2'
services:
restic:
restart: always
image: fflo/restic:latest
hostname: backup
domainname: domain.com
container_name: restic
volumes:
- /:/data
environment:
- CRON_BACKUP_EXPRESSION="15 3 * * *"
- RESTIC_BACKUP_OPTIONS="--exclude=/data/dir/*"
- RESTIC_REPOSITORY="s3:https://s3.amazonaws.com/some-repo"
- AWS_ACCESS_KEY_ID="keyid"
- AWS_SECRET_ACCESS_KEY="topsecret"
- RESTIC_PASSWORD="some_good_hash"
to change the clean times and periods:
For example you want to run the backup every day at 00:00
version: '2'
services:
restic:
restart: always
image: fflo/restic:latest
hostname: backup
domainname: domain.com
container_name: restic
volumes:
- /:/data
environment:
- CRON_CLEANUP_EXPRESSION="0 0 * * *"
- RESTIC_CLEANUP_KEEP_WEEKLY=5
- RESTIC_CLEANUP_KEEP_MONTHLY=12
- RESTIC_CLEANUP_KEEP_YEARLY=75
- RESTIC_CLEANUP_OPTIONS="--prune"
- RESTIC_BACKUP_OPTIONS="--exclude=/data/dir/*"
- RESTIC_REPOSITORY="s3:https://s3.amazonaws.com/some-repo"
- AWS_ACCESS_KEY_ID="keyid"
- AWS_SECRET_ACCESS_KEY="topsecret"
- RESTIC_PASSWORD="some_good_hash"
Start the container
docker-compose up -d restic
You're done!
A full explanation of the commands and options you can refer to the manual of restic
Initialize the repository
docker run --rm -e RESTIC_REPOSITORY="s3:https://s3.amazonaws.com/some-repo" \
-e AWS_ACCESS_KEY_ID="keyid" \
-e AWS_SECRET_ACCESS_KEY="topsecret" \
-e RESTIC_PASSWORD="some_good_hash" fflo/restic \
-v /:/data
restic init
List the snapshots
docker run --rm -e RESTIC_REPOSITORY="s3:https://s3.amazonaws.com/some-repo" \
-e AWS_ACCESS_KEY_ID="keyid" \
-e AWS_SECRET_ACCESS_KEY="topsecret" \
-e RESTIC_PASSWORD="some_good_hash" fflo/restic \
-v /:/data
restic snapshots
Restore a snapshot
docker run --rm -e RESTIC_REPOSITORY="s3:https://s3.amazonaws.com/some-repo" \
-e AWS_ACCESS_KEY_ID="keyid" \
-e AWS_SECRET_ACCESS_KEY="topsecret" \
-e RESTIC_PASSWORD="some_good_hash" fflo/restic \
-v /:/data
restic restore _id_ --target /data/restore_location
Start a backup now when the container is running with the name restic
docker exec restic supervisorctl start restic_backup
Run any command in the container
docker exec -ti restic _command_
RESTIC_BACKUP_OPTIONS
RESTIC_CLEANUP_KEEP_DAILY
RESTIC_CLEANUP_KEEP_WEEKLY
RESTIC_CLEANUP_KEEP_MONTHLY
RESTIC_CLEANUP_KEEP_YEARLY
RESTIC_CLEANUP_OPTIONS
CRON_BACKUP_EXPRESSION
CRON_CLEANUP_EXPRESSION
docker pull fflo/restic