如果你使用 Docker 不只是玩玩的话,你很可能已经在使用卷(数据卷)了。卷很棒,但也很容易搞砸并丢失数据,所以我们要学习备份方法。不要措手不及,让我们来看看如何备份 Docker 数据卷吧!
你可能恨死我说这话了,但最好的办法是别备份Docker卷,相反,只备份你需要的数据,用你手头的工具就行。
如果你使用的是 Postgres,你可以简单地使用 pg_dump
命令来备份你的数据库。如果你使用的是 MongoDB,你可以使用 mongodump
命令。这些命令通常会给你更多的控制权,决定备份哪些内容,并且甚至可以提供一些正常备份无法提供的数据一致性保障。如果可能,请使用适合的工具来完成工作!
也存在一些现有的容器解决方案,它们封装了如 pg_dump
等工具,使操作更加简便。例如,Kartoza 的 docker-pg-backup 项目。
创建备份可以简单到只需运行一个命令即可。
docker run --name="backups" --link db:db -v `pwd`/backups:/backups -d kartoza/pg-backup:$POSTGRES_MAJOR_VERSION-$POSTGIS_MAJOR_VERSION.${POSTGIS_MINOR_RELEASE}
全屏模式 退出全屏
本地备份接下来是一个很多人可能不会认为是备份的东西,但如果你做一些本地的开发工作且不需要非常健壮的解决方案,它就足够好了。
如果你的卷叫 my-data
,你可以把所有内容复制到一个叫 my-data-backup
的新数据卷里。
docker volume create --name 我的数据备份
# 创建一个名为我的数据备份的docker卷
docker container run --rm -it \
-v 我的数据:/from \
-v 我的数据备份:/to \
ubuntu bash -c "cd /from ; cp -av . /to"
# 运行一个容器,复制数据从源目录到备份目录
全屏退出 全屏进入
这会创建一个与原卷数据完全一致的新卷。然后你就可以用这个新卷来做备份啦!你可能还需要根据你要备份的内容来调整/from
和/to
路径哦。祝你备份顺利!
请记住,这不能保护你免于遇到像服务器烧毁这样的灾难 🤖🔥。
主机服务商如果你使用像Sliplane或Render这样的现代PaaS提供商,你可以直接使用他们的备份功能。这样就方便多了,如果你不想操心备份的问题,但是这也可能成为一个单一的故障源,并且可能会有额外的费用。
例如,Sliplane 提供生产服务器的免费容量备份,对容量大小没有限制。
先说一句:我是联合创始人之一,所以我当然这么觉得啦 😆
将文件通过 Offen 上传到 S3..zh: Offen 是一个自托管的备份服务,可以备份到多种不同的云提供商,比如 S3。只需要一个简单的命令就可以备份 Docker 卷
运行 Docker 容器,并执行备份操作:
docker run --rm \
-v data:/backup/data \
--env AWS_ACCESS_KEY_ID="<xxx>" \
--env AWS_SECRET_ACCESS_KEY="<xxx>" \
--env AWS_S3_BUCKET_NAME="<xxx>" \
--entrypoint backup \
offen/docker-volume-backup:v2
其中,`<xxx>` 需要替换为实际的 AWS 访问密钥 ID、秘密访问密钥和 S3 存储桶名称。
进入全屏,退出全屏
Offen很不错,我们甚至在Sliplane用它来备份卷。他们不仅有很好的文档和示例,还支持多种云提供商。我建议直接备份到S3存储。一定要使用客户端加密来保护您的数据哦!
配置文档如下,请点击链接查看:here。
结果好了!这里有5种备份Docker卷的方法。选择最适合你需求的方法。如果你还有其他好方法,请在下面留言分享!
感谢您的关注,祝您备份数据顺利!
干杯,Jonas,你好
Jonas,sliplane.io 的合伙人