V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
WildCat
V2EX  ›  Docker

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

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

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

    综上, 将数据库使用 docker 持久化, 并将数据库的数据文件映射出来, 整体来说, 对性能影响非常小.基本可以忽略不计.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2992 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 11:36 · PVG 19:36 · LAX 03:36 · JFK 06:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.