volume-backup/README.md

125 wiersze
5.3 KiB
Markdown
Czysty Zwykły widok Historia

2017-03-26 10:27:07 +00:00
# volume-backup
2021-02-18 09:51:35 +00:00
An utility to backup and restore [docker volumes](https://docs.docker.com/engine/reference/commandline/volume/). For more info, read my article on [Medium](https://medium.com/@jareklipski/backup-restore-docker-named-volumes-350397b8e362)
2017-03-26 10:27:07 +00:00
2019-04-13 10:08:32 +00:00
**Note**: Make sure no container is using the volume before backup or restore, otherwise your data might be damaged. See [Miscellaneous](#miscellaneous) for instructions.
2021-03-20 19:40:39 +00:00
2021-03-20 19:39:40 +00:00
**Note**: When using docker-compose, make sure to backup and restore volume labels. See [Miscellaneous](#miscellaneous) for more information.
2017-03-26 10:27:07 +00:00
## Backup
2019-04-13 14:39:34 +00:00
### Backup to standard output
2018-01-14 13:25:01 +00:00
This avoids mounting a second backup volume and allows to redirect it to a file, network, etc.
Syntax:
2021-05-26 18:03:06 +00:00
docker run -v [volume-name]:/volume --rm --log-driver none loomchild/volume-backup backup - > [archive-name]
For example:
2021-05-26 18:03:06 +00:00
docker run -v some_volume:/volume --rm --log-driver none loomchild/volume-backup backup - > some_archive.tar.bz2
will archive volume named `some_volume` to `some_archive.tar.bz2` archive file.
2017-03-26 10:27:07 +00:00
2021-08-07 15:08:48 +00:00
**Note**: `--log-driver none` option is necessary to avoid storing an entire backup in a temporary stdout JSON file. More info in [Docker logging documentation](https://docs.docker.com/config/containers/logging/configure/) and in [this issue](https://github.com/loomchild/volume-backup/issues/39).
2021-05-26 18:03:06 +00:00
2019-06-02 13:35:51 +00:00
**WARNING**: This method should not be used under PowerShell on Windows as no usable backup will be generated.
2017-03-26 10:27:07 +00:00
2019-04-13 14:39:34 +00:00
### Backup to a file
2017-03-26 10:30:18 +00:00
2017-03-26 10:27:07 +00:00
Syntax:
2019-04-13 14:38:21 +00:00
docker run -v [volume-name]:/volume -v [output-dir]:/backup --rm loomchild/volume-backup backup [archive-name]
2017-03-26 10:27:07 +00:00
For example:
2019-04-13 14:38:21 +00:00
docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup backup some_archive
2019-04-13 14:38:21 +00:00
will archive volume named `some_volume` to `/tmp/some_archive.tar.bz2` archive file.
## Restore
2021-03-20 19:07:35 +00:00
Restore will fail if the target volume is not empty (use `-f` flag to override).
2018-01-14 13:25:01 +00:00
### Restore from standard input
This avoids mounting a second backup volume.
2019-06-19 15:17:22 +00:00
**Note**: Don't forget the `-i` switch for interactive operation.
Syntax:
2022-06-02 11:41:20 +00:00
docker run -i -v [volume-name]:/volume --rm loomchild/volume-backup restore - < [archive-name]
For example:
2022-06-02 11:41:20 +00:00
docker run -i -v some_volume:/volume --rm loomchild/volume-backup restore - < some_archive.tar.bz2
2017-03-26 10:27:07 +00:00
will clean and restore volume named `some_volume` from `some_archive.tar.bz2` archive file.
2019-04-13 10:08:32 +00:00
2019-04-13 14:39:34 +00:00
### Restore from a file
2019-04-13 14:38:21 +00:00
Syntax:
docker run -v [volume-name]:/volume -v [output-dir]:/backup --rm loomchild/volume-backup restore [archive-name]
For example:
docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup restore some_archive
will clean and restore volume named `some_volume` from `/tmp/some_archive.tar.bz2` archive file.
### Copy volume between hosts
2019-06-19 12:06:13 +00:00
One good example of how you can use the output to stdout would be directly migrating the volume to a new host
Syntax:
2021-05-26 18:03:06 +00:00
docker run -v [volume-name]:/volume --rm --log-driver none loomchild/volume-backup backup - |\
ssh [receiver] docker run -i -v [volume-name]:/volume --rm loomchild/volume-backup restore -
2019-06-19 15:17:22 +00:00
**Note**: In case there are no traffic limitations between the hosts you can trade CPU time for bandwidth by turning off compression as shown in the example below.
For example:
2021-05-26 18:03:06 +00:00
docker run -v some_volume:/volume --rm --log-driver none loomchild/volume-backup backup -c none - |\
ssh user@new.machine docker run -i -v some_volume:/volume --rm loomchild/volume-backup restore -c none -
2019-04-13 14:38:21 +00:00
## Miscellaneous
2019-04-13 10:08:32 +00:00
1. Upgrade / update volume-backup
2019-04-13 10:11:46 +00:00
```
2019-04-13 10:08:32 +00:00
docker pull loomchild/volume-backup
2019-04-13 10:11:46 +00:00
```
2021-08-07 15:12:08 +00:00
1. volume-backup is also available from GitHub Container Registry (ghcr.io), to avoid DockerHub usage limits:
2021-08-07 15:08:48 +00:00
```
docker pull ghcr.io/loomchild/volume-backup
```
2021-08-07 15:09:53 +00:00
**Note**: you'll need to write `ghcr.io/loomchild/volume-backup` instead of just `loomchild/volume-backup` when running the utility.
2019-04-13 10:08:32 +00:00
1. Find all containers using a volume (to stop them before backing-up)
2019-04-13 10:11:46 +00:00
```
2019-04-13 10:08:32 +00:00
docker ps -a --filter volume=[volume-name]
2019-04-13 10:11:46 +00:00
```
2019-04-13 11:48:27 +00:00
2019-04-13 12:09:55 +00:00
1. Exclude some files from the backup and send the archive to stdout
2019-04-13 11:48:27 +00:00
```
2021-05-26 18:03:06 +00:00
docker run -v [volume-name]:/volume --rm --log-driver none loomchild/volume-backup backup -e [excluded-glob] - > [archive-name]
2019-04-13 11:48:27 +00:00
```
1. Use different compression algorithm for better performance
```
2021-08-09 15:12:06 +00:00
docker run -v [volume-name]:/volume --rm --log-driver none loomchild/volume-backup backup -c pigz - > [archive-name]
```
2020-01-11 18:54:19 +00:00
1. Show simple progress indicator using verbose `-v` flag (works both for backup and restore)
```
2021-05-26 18:03:06 +00:00
docker run -v [volume-name]:/volume --rm --log-driver none loomchild/volume-backup backup -v - > [archive-name]
2020-01-11 18:54:19 +00:00
```
2021-03-20 18:35:48 +00:00
1. Pass additional arguments to the Tar utility using `-x` option
```
2021-05-26 18:03:06 +00:00
docker run -v [volume-name]:/volume --rm --log-driver none loomchild/volume-backup backup -x --verbose - > [archive-name]
2021-03-20 18:35:48 +00:00
```
2021-03-20 19:39:40 +00:00
1. Volume labels are not backed-up or restored automatically, but they might be required for your application to work (e.g. when using docker-compose). If you need to preserve them, create a label backup file as follows: `docker inspect [volume-name] -f "{{json .Labels}}" > labels.json`. When restoring your data, target volume needs to be created manually with labels before launching the restore script: `docker volume create --label "label1" --label "label2" [volume-name]`.