Restic is a fantastic backup tool. To wrap this in a usefull and flexible docker container there is this repo.
Includes:
- restic
- cron (for scheduling)
You can run restic command very like this:
docker pull jsmitsnl/docker-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" jsmitsnl/docker-restic \
-v /:/data
restic snapshots
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: jsmitsnl/docker-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: jsmitsnl/docker-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: jsmitsnl/docker-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"
docker-compose up -d restic
You're done!
A full explanation of the commands and options you can refer to the manual of restic
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" jsmitsnl/docker-restic \
-v /:/data
restic init
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" jsmitsnl/docker-restic \
-v /:/data
restic 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" jsmitsnl/docker-restic \
-v /:/data
restic restore _id_ --target /data/restore_location
docker exec restic supervisorctl start restic_backup
docker exec -ti restic _command_
- "" => None set by default
- 7 => to keep 7 daily backups
- 5 => to keep 5 daily backups
- 12 => to keep 12 daily backups
- 75 => to keep 75 daily backups
- "--prune" => Clean the repository of old backups
- *"15 3 * * " => Fire at 03:15 every day
- *"15 0 0 * " => Fire at 00:15 on the first day of every month