Skip to main content

pipeline status coverage report Version status

Docker volume dump

A tool to help archive data from container running in a docker container.

  • Database backup support for Postgresql, Mysql/Mariadb: it create a backup in the container through docker API, then retrieves data to save it in a proper place.
  • rsync volume data: it introspect container and rsync all declared local volume and bind mount points.

note: at the moment it's not possible to backup a database and rsync those volumes.

Usage

Using docker

docker run registry.gitlab.com/micro-entreprise/docker-volume-dump archive --help

For instance if you want to create dumps from different postgresql container in a docker swarm environment this would looks likes:

docker service create \
          -d \
          --mode global \
          --name pgsql-dumps \
          --restart-condition none \
          --mount type=bind,src=/path-to-dump-storage/,dst=/backups \
          --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
          --mount type=bind,src=/path-to-config-directory/,dst=/etc/archiver \
          --network sentry_internal \
          --with-registry-auth registry.gitlab.com/micro-entreprise/docker-volume-dump \
          archive -f /etc/archiver/logging.json -r -s '{"label": ["docker-volume-dump.project='$PROJECT'","docker-volume-dump.environment='$ENVIRONMENT'"]}'

This script require access to the docker daemon to query docker labels. It must be launched on each host using --mode global.

Using python

pip install docker-volume-dump
archive --help

Configuration

The main idea is to tell the container how to manage its backups using docker labels, you can set following labels.

You can use a custom prefix if you like so using ARCHIVER_LABEL_PREFIX env variable. For instance if you set ARCHIVER_LABEL_PREFIX=archiver it would expect labels likes archiver.isactive instead of the default docker-volume-dump.isactive.

  • docker-volume-dump.driver: Optional (pgsql by default) kind of data to dump (could be one of pgsql, mysql, rsync). Only one value supported by container.

    Note: mysql driver is working for mariadb as well

  • docker-volume-dump.isactive: Takes no value. Used by the default selector to determine if the Archiver backups are enabled on the container.

  • docker-volume-dump.project: A project name (the container name if not set)

  • docker-volume-dump.environment: An environment (staging, production, ...)

  • docker-volume-dump.prefix: A prefix for the dump file

Database labels (pgsql/mysql)

  • docker-volume-dump.dbname: Required, the database name to dump.
  • docker-volume-dump.username: DB role used to dump the database. Required with mysql, fallback to postgres if not set for pgsql.
  • docker-volume-dump.password: DB password used to dump the db. Required with mysql, not use with pgsql driver

This will generate a file in a tree likes

<project>/[<environment>/]<prefix><dbname><date>

rsync labels

note: I've chosen to rsync data first because tar/gzip rdiff-backup failed to compress data if other programs write content at the same time. My flow is something like data -> rsync -> rdiff-backup -> tar/gzip -> s3

  • docker-volume-dump.rsync-params: params to add to rsync command predifined (hardcoded) params are rsync -avhP --delete
  • docker-volume-dump.ro-volumes: If set to one of those values ["yes", "true", "t", "1"] (not case sensitive) rsync read-only volumes as well for the given container.

This will generate a director per declared volume/bind

<project>/[<environment>/][<prefix>]<computed folder name>

Computed folder name is based on the path inside the container where slash (/) are replaced per dash (-). ie:

  • Project: test
  • Environment: dev
  • prefix: rsynced_
  • volume declare as -v /some/path/on/host/machine:/path/to/data
  • volume declare as -v named-volume:/other/data

note: if archiver is running inside a container where host filesystem is mounted in /hostfs mind to use --host-fs /hostfs option.

Would produce:

  • /backups/test/dev/rsynced_path-to-data
  • /backups/test/dev/rsynced_other-data

Roadmap

  • pgsql/mysql: support multiple base per DBMS
  • pgsql/mysql: if dbname is not provide retreive db list to detect the DB to dump
  • wondering if the way use to query docker labels is compliant with k8s
  • In swarm investigate to launch only once container (not on each hosts)

Metadata

Release files for docker-volume-dump 0.5.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for docker-volume-dump 0.5.1
File Size Uploaded
docker-volume-dump-0.5.1.tar.gz 9.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for docker-volume-dump 0.5.1
File Interpreter ABI Platform
docker_volume_dump-0.5.1-py3-none-any.whl Python 3 none any Details

Total release size: 18.7 kB

Release files / docker-volume-dump-0.5.1.tar.gz

Download URL docker-volume-dump-0.5.1.tar.gz
Size 9.8 kB
Tags Source
SHA-256 checksum
How to use checksums
3a7b2f206861b318c15716a22b1b16d801974bd727285d4e1a9a2acbfaf216a6
BLAKE2b-256 checksum
How to use checksums
8706c37cc0dcb36d37a5fb78946d4b79bad441087d18e0f593a5fd43dc7cb749
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.8.10

Release files / docker_volume_dump-0.5.1-py3-none-any.whl

Download URL docker_volume_dump-0.5.1-py3-none-any.whl
Size 8.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e65459a2a8ca749f32188bc41aed5c25266ea418490a6b518c375c7c4967a792
BLAKE2b-256 checksum
How to use checksums
82e6d7179e0f88b84a79a24d7e5a42a738f39127153235e8591ba4b8a26c163a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.8.10

Release history Release notifications | RSS feed

This release

0.5.1 This release

2 release files

0.5.0

2 release files

0.4.3

2 release files

0.4.1

2 release files

0.3.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page