我应该什么时候使用docker的主机网络

我应该什么时候使用docker的主机网络,docker,docker-swarm,Docker,Docker Swarm,我知道,如果我对容器使用主机网络驱动程序,则该容器的网络堆栈不会与Docker主机隔离。 我还认为,从概念上理解,仍然这样做的一个很好的理由可能是“安全不是问题或担忧”,网络吞吐量性能很重要,但我正在努力思考一个现实世界的例子,说明我何时可以或应该这样做。我能想到的一个简单的例子是面向公众的负载均衡器或静态文件web服务器 我意识到,在使用AWS或谷歌云等主机服务之外,如果托管在那里,可能会减轻安全问题,但如果这不是一个选项呢 您何时或应该在生产环境中使用它? 无论托管环境如何,您如何减轻安全问

我知道,如果我对容器使用主机网络驱动程序,则该容器的网络堆栈不会与Docker主机隔离。 我还认为,从概念上理解,仍然这样做的一个很好的理由可能是“安全不是问题或担忧”,网络吞吐量性能很重要,但我正在努力思考一个现实世界的例子,说明我何时可以或应该这样做。我能想到的一个简单的例子是面向公众的负载均衡器或静态文件web服务器

我意识到,在使用AWS或谷歌云等主机服务之外,如果托管在那里,可能会减轻安全问题,但如果这不是一个选项呢

您何时或应该在生产环境中使用它? 无论托管环境如何,您如何减轻安全问题? 您应该如何与其他docker网络中的其他服务交互

但我正在努力想一个现实世界的例子,说明我什么时候可以或者应该这样做

下面是一个真实的例子:我们使用主机网络来加速gitlab ci/cd管道的构建阶段

有问题的容器仅在构建阶段启动并运行,没有暴露任何端口,需要更快的网络下载构建和推送docker映像所需的所有部分,并且我们在构建阶段遇到了吞吐量问题和行为不一致的问题(在某些断断续续的情况下),我们通过主机网络解决了这些问题。尽管使用主机网络,我们“公开”了这样一个容器的ip,但我们仍然不公开任何端口,并且在构建阶段完成后,容器被丢弃

我知道这并不能回答你们所有的问题,但这是一个真实世界的例子

我正在努力想一个现实世界的例子,告诉我什么时候可以或者应该这样做。。。您何时或应该在生产环境中使用它

  • 应用程序不是在TCP或UDP上运行,而是在另一个协议上运行

  • 您的应用程序需要发布大范围的传入端口(默认情况下,每个已发布的端口都会生成docker代理进程,这对于大范围来说可能太多)

  • 您的应用程序可以处理多播或广播网络流量

  • 您的应用程序需要修改主机本身的网络层,例如VPN

无论托管环境如何,您如何减轻安全问题

您需要信任此应用程序。您已经删除了一层docker名称空间,此时,容器是一种打包格式,很可能与工具的其余部分相适应,但不需要与其他容器相同的安全方法

您应该如何与其他docker网络中的其他服务交互

您将通过其他容器的已发布端口进行交互,就像在容器外部运行的应用程序需要连接到容器内部的应用程序一样