私はさまざまなプロセスを持つアプリケーションに取り組んでおり、さらなる分離を実現するためにそれらのプロセスを包含するように求められています。
問題は、プロセスがデータを交換するために単一の「ハイパーバイザー」プロセスとメモリを共有することです (従来の共有バッファを使用します)。このソリューションはパフォーマンス要件のために実装されましたが、ユーザー空間で実行されるため、ユーザー空間とカーネル空間の間でコンテンツが切り替わりません。
私の理解が間違っていなければ、単一の IPC 名前空間内で複数の Docker コンテナを実行することはできませんが、単一の Docker コンテナが異なる IPC 名前空間に属することが可能かどうかはわかりません。これで問題が解決する可能性があります。
他のソリューションも歓迎しますが、パフォーマンスが必須であることを念頭に置いてください。よろしくお願いします。
ベストアンサー1
の--ipc=host
そして--ipc=container:id
Dockerにオプションが追加されましたcreate
そしてrun
IPC リソースを共有するためのコマンド。
--ipc="" : Set the IPC mode for the container, 'container:<name|id>': reuses another container's IPC namespace 'host': use the host's IPC namespace inside the container
ホストとのIPC
docker run --ipc=host <image>
別のコンテナとのIPC
docker run --ipc=container:<id> <image>
別のコンテナとのIPCでは、shareable
初期コンテナにオプションを設定する必要がある場合があります(dockerdのIPCのデフォルトが の場合private
)
docker run --ipc=shareable <image>