备份 Docker 卷的 4 种简单方法
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
如果你使用 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 my-data-backup
docker container run --rm -it \
-v my-data:/from \
-v my-data-backup:/to \
ubuntu bash -c "cd /from ; cp -av . /to"
这将创建一个与原始卷数据相同的新卷。然后,您可以将此新卷用作备份!您可能需要根据备份内容更改路径/from。/to
请记住,这并不能保护您免受服务器烧毁等灾难性事件的影响🤖🔥。
主机提供商
如果您使用像Sliplane或Render这样的现代 PaaS 提供商,您可以直接使用它们的备份功能。如果您不想操心备份方案的管理,这当然很好,但这也存在潜在的单点故障风险,而且可能需要额外付费。
例如,Sliplane 为生产服务器提供免费的卷备份,且对卷的大小没有限制。
免责声明:我是联合创始人,所以我当然觉得这很好😆
使用 Offen 上传到 S3
Offen是一款自托管备份解决方案,可以备份到包括 S3 在内的各种云服务提供商。它可以通过一个简单的命令备份 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
Offen 非常棒,我们Sliplane甚至用它来备份卷。他们的文档非常完善,包含大量示例,并且支持各种不同的云服务提供商。我建议直接备份到 S3。务必启用客户端加密,以确保数据安全!
配置文档在这里。
结论
以上就是备份 Docker 卷的 5 种方法。选择最适合你和你的使用场景的方法。如果你有其他好的解决方案,请在下方评论区分享!
感谢阅读,祝您备份愉快!
祝好,Jonas,sliplane.io
联合创始人

