在Docker容器之间共享内存:“-ipc = host”与“ --ipc = shareable”

时间:2019-07-03 21:57:28

标签: docker ipc shared-memory

我正在设置两个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

1 个答案:

答案 0 :(得分:1)

来自doc

  

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

     

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

     

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

shareablehost之间的区别只是docker主机可以访问共享内存。

  • IPC(POSIX / SysV IPC)名称空间提供命名共享内存段,信号量和消息队列的分隔。

    因此,容器之间或主机之间的使用没有区别,这两种模式也没有性能差异。

  • 数据库和科学计算和金融服务行业的定制应用程序(通常为C / OpenMPI,C ++ /使用Boost库)高性能应用程序通常使用共享内存。

    因此,这与这些服务的安全性有关,如果使用host,则主机也将能够访问这些服务,并且,如您所知,Docker主机可能对外部是公共的可能会遭到黑客攻击。使用sharedable,只能在容器内部访问数据库,如果主机被捕获,则可以减少数据泄漏。但是,如果您真的需要与主机合作,那么仍然可以使用host,我想这就是host的原因。而且当人们回答问题时,有时有时很难完全了解询问者的环境和要求,所以host是我猜想更通用的使用方式。