docker 的 volume 是否有很大的性能损失,能否在生产环境 mount 数据库文件?(把 postgres docker 化)

2017-06-16 11:52:49 +08:00
 WildCat
4394 次点击
所在节点    Docker
3 条回复
eDeeraiD0thei6Oh
2017-06-16 11:56:02 +08:00
搜搜 uber
xss
2017-06-16 13:01:21 +08:00
解释的可能不对, 完全是个人理解.
docker 的 volume, 本质上, 还是磁盘上的一个文件, 当指定某个目录是 volume 的时候, docker 默认会在其工作目录下, 创建一个 volumes/一串 ID/_data/
xss
2017-06-16 13:06:29 +08:00
擦...不小心发表了...
的文件夹.如果你在创建 image 的时候没有指定 volume, 那么目录会被统一放到这个镜像创建出来的容器目录下面, 并不会享受上面的特定待遇.
在创建出上面的目录之后, 系统(linux 下, windows 不知道), 会以特定的 mount 方式, 将创建的文件夹 mount 到 volumes/一串 ID/_data
下面.
所以, 文件层面, 性能损失很小, 可能需要经过 cgroups 的权限检查, 不过这个都是 hook, 性能损失可以忽略不计.

其次, 网络层面, docker 实际上是依靠 iptables 转发包, 所以包在本机会经过一次转发, 这些转发都是在内核里面直接进行的, 并不会经过网络的上策设备, 所以性能损失业很小.

综上, 将数据库使用 docker 持久化, 并将数据库的数据文件映射出来, 整体来说, 对性能影响非常小.基本可以忽略不计.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/368818

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX