写了个脚本,导出 Docker Volume 的数据并压缩打包成带当前时间的 tar.gz 格式,上传到 s3 bucket 后删除本地压缩包。

Docker Volume: ghost_data

#!/bin/bash

# 文件名格式
data_filename="ghost_data-`date +%Y-%m-%d_%H%M%S`.tar.gz"
db_filename="ghost_db-`date +%Y-%m-%d_%H%M%S`.sql"

# 使用 `sudo usermod -aG docker your-user` 命令将当前用户添加到 docker 组,
# 目的是不用 root 权限执行此脚本。

docker run --rm \
    -v ghost_data:/source \
    -v $(pwd):/backup \
    alpine sh -c "cd /source && tar zcf /backup/$data_filename ."

docker exec mariadb \
    sh -c 'exec mysqldump -uDB_USER -pDB_PASSWD --databases DB_NAME' > ./$db_filename

# s3cmd 需提前做好配置
s3cmd put ./$data_filename s3://backup/data/  && rm -f ./$data_filename
s3cmd put ./$db_filename s3://backup/db/ && rm -f ./$db_filename

Reference