跳转到主要内容

基于Docker标签创建备份

项目描述

pipeline status coverage report Version status

Docker卷转储

一个工具,帮助从运行在Docker容器中的容器存档数据。

  • 支持Postgresql、Mysql/Mariadb数据库备份:它通过Docker API在容器中创建备份,然后将数据检索到合适的位置保存。
  • rsync卷数据:它检查容器并同步所有声明的本地卷绑定挂载点。

注意:目前无法同时备份数据库和同步这些卷。

用法

使用Docker

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

例如,如果您想从Docker Swarm环境中的不同postgresql容器创建转储,这看起来可能像这样

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'"]}'

此脚本需要访问Docker守护进程以查询Docker标签。它必须在每个主机上使用--mode global启动。

使用Python

pip install docker-volume-dump
archive --help

配置

主要思想是告诉容器如何使用Docker标签管理其备份,您可以设置以下标签。

如果您喜欢,可以使用自定义前缀,使用ARCHIVER_LABEL_PREFIX环境变量。例如,如果您将ARCHIVER_LABEL_PREFIX=archiver设置为,则它将期望标签类似于archiver.isactive而不是默认的docker-volume-dump.isactive

  • docker-volume-dump.driver:可选(默认为pgsql)要转储的数据类型(可以是pgsqlmysqlrsync之一)。容器只支持一个值。

    注意mysql驱动程序同样适用于mariadb。

  • docker-volume-dump.isactive:不取值。由默认选择器用于确定容器上是否启用了存档备份。

  • docker-volume-dump.project:项目名称(如果没有设置,则为容器名称)

  • docker-volume-dump.environment:环境(预发布、生产等)

  • docker-volume-dump.prefix:转储文件的名称前缀

数据库标签(pgsql/mysql

  • docker-volume-dump.dbname:必需,用于备份的数据库名称。
  • docker-volume-dump.username:用于备份数据库的数据库角色。当使用mysql时必需,若未设置pgsql则回退到postgres
  • docker-volume-dump.password:用于备份数据库的数据库密码。当使用mysql时必需,与pgsql驱动程序不兼容。

这将生成一个类似以下结构的文件:

<项目>/[<环境>/]<前缀><dbname><日期>

rsync 标签

注意:我选择首先使用rsync,因为tar/gziprdiff-backup在其他程序同时写入内容时无法压缩数据。我的流程类似于data -> rsync -> rdiff-backup -> tar/gzip -> s3

  • docker-volume-dump.rsync-params:添加到rsync命令中的参数。预定义(硬编码)的参数为rsync -avhP --delete
  • docker-volume-dump.ro-volumes:如果设置为以下值之一["yes", "true", "t", "1"](不区分大小写),则将给定容器的只读卷也作为rsync。

将为每个声明的卷/绑定生成一个目录

<项目>/[<环境>/][<前缀>]<计算文件夹名称>

计算文件夹名称基于容器内部的路径,其中斜杠(/)被替换为连字符(-)。例如

  • 项目:test
  • 环境:dev
  • 前缀:rsynced_
  • 卷声明为-v /some/path/on/host/machine:/path/to/data
  • 卷声明为-v named-volume:/other/data

注意:如果归档器在挂载了主机文件系统的容器中运行,请记住使用--host-fs /hostfs选项。

将生成

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

路线图

  • pgsql/mysql:支持每个数据库管理系统多个基础
  • pgsql/mysql:如果没有提供dbname,则检索数据库列表以检测要备份的数据库
  • 怀疑用来查询Docker标签的方式是否与k8s兼容
  • 在swarm中研究仅启动一次容器(而不是在每个主机上)

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

docker-volume-dump-0.5.1.tar.gz (9.8 kB 查看散列

上传时间

构建分发

docker_volume_dump-0.5.1-py3-none-any.whl (8.9 kB 查看散列

上传时间 Python 3

由以下支持