我正在设置两个docker容器-一个作为用于将数据保存在内存中的服务器,另一个作为用于访问该数据的客户端。为此,我相信我需要使用--ipc
标志在容器之间共享内存。 Docker documentation很好地解释了--ipc
标志。根据文档运行的信息对我来说有意义:
docker run -d --ipc=shareable data-server
docker run -d --ipc=container:data-server data-client
但是我已经阅读过的所有Stackoverflow问题(1,2,3,4)都将两个容器直接链接到主机:
docker run -d --ipc=host data-server
docker run -d --ipc=host data-client
哪个更适合此用例?如果ipc=host
更好,那么什么时候使用ipc=shareable
?
答案 0 :(得分:1)
来自doc:
-ipc =“ MODE”:设置容器的IPC模式
“可共享”:自己的私有IPC名称空间,可以与其他容器共享。
“主机”:使用主机系统的IPC名称空间。
shareable
和host
之间的区别只是docker主机可以访问共享内存。
IPC(POSIX / SysV IPC)名称空间提供命名共享内存段,信号量和消息队列的分隔。
因此,容器之间或主机之间的使用没有区别,这两种模式也没有性能差异。
数据库和科学计算和金融服务行业的定制应用程序(通常为C / OpenMPI,C ++ /使用Boost库)高性能应用程序通常使用共享内存。
因此,这与这些服务的安全性有关,如果使用host
,则主机也将能够访问这些服务,并且,如您所知,Docker主机可能对外部是公共的可能会遭到黑客攻击。使用sharedable
,只能在容器内部访问数据库,如果主机被捕获,则可以减少数据泄漏。但是,如果您真的需要与主机合作,那么仍然可以使用host
,我想这就是host
的原因。而且当人们回答问题时,有时有时很难完全了解询问者的环境和要求,所以host
是我猜想更通用的使用方式。