【问题标题】:Sharing Memory across Docker containers: '--ipc=host' vs. '--ipc=shareable'跨 Docker 容器共享内存:'--ipc=host' vs. '--ipc=shareable'
【发布时间】:2019-07-03 21:57:28
【问题描述】:

我正在设置两个 docker 容器 - 一个作为服务器在内存中保存数据,另一个作为客户端来访问该数据。为此,我相信我需要使用--ipc 标志在容器之间共享内存。 Docker documentation 很好地解释了 --ipc 标志。根据文档,对我来说有意义的事情正在运行:

docker run -d --ipc=shareable data-server
docker run -d --ipc=container:data-server data-client

但我读过的所有 Stackoverflow 问题(1234)都将两个容器直接链接到主机:

docker run -d --ipc=host data-server
docker run -d --ipc=host data-client

哪个更适合这个用例?如果ipc=host更好,你什么时候用ipc=shareable

【问题讨论】:

    标签: docker ipc shared-memory


    【解决方案1】:

    来自doc

    --ipc="MODE" : 设置容器的IPC模式

    “shareable”:自己的私有 IPC 命名空间,可以与其他容器共享。

    “host”:使用主机系统的 IPC 命名空间。

    shareablehost的区别在于主机是否可以访问共享内存。

    • IPC (POSIX/SysV IPC) 命名空间提供命名共享内存段、信号量和消息队列的分离。因此,两种模式之间的性能应该没有差异。
    • 共享内存通常用于科学计算和金融服务行业的数据库和定制(通常是 C/OpenMPI、C++/使用 boost 库)高性能应用程序。

    考虑到服务的安全性,使用host 会将IPC 命名空间暴露给控制主机的攻击者。使用shareable,IPC 命名空间只能在容器内部访问,其中可能包含任何攻击。 host 模式的存在是为了允许容器与其宿主之间进行合作。

    通常很难知道询问者的环境和要求的所有细节,因此host 往往是最常用的推荐,因为它最容易理解和配置。

    【讨论】:

    • 所以两者都是有效的,但第一个选项对容器更安全?
    • 是的,就是这样。如果不仅在容器之间共享,您还可以使用主机
    • 明白了。还有一个问题:shareable 是可选的吗? This blogthis post 似乎没有。
    • 我想这意味着如果您不需要容器之间共享内存之类的东西,那么您可以将其关闭,而可以使用套接字或其他。但是,如果您关心通信速度,并且想使用共享内存,则必须这样做。这是您的选择,具体取决于您的应用场景
    猜你喜欢
    • 2019-11-16
    • 1970-01-01
    • 2014-10-08
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2014-04-08
    • 1970-01-01
    相关资源
    最近更新 更多