你应该在Docker中安装nginx吗?

29

我想知道在docker镜像中是否应该添加nginx的利与弊。有很多关于如何在docker上安装nginx的教程,但我的问题是,你应该这样做吗?

你应该在docker主机上安装nginx,并将其指向正在运行的容器(可能正在运行rainbows等)吗?还是

你应该在容器内安装另一个nginx层?

我不认为在docker容器内添加另一个nginx会有任何好处,但我想知道为什么有这么多关于它的教程,好像那是常识一样,而我却没有理解到这个常识,这让我感到沮丧。

编辑:

对我来说,每个容器的配置越少越好。如果nginx容器与其后面的应用程序容器之间存在紧密耦合,则肯定不是我要找的解决方案,这也违反了首要目标。因此,我更倾向于在Docker主机上安装nginx。

如果我们要拥有一个nginx容器,那么该容器应该独立于应用程序。应用程序特定的配置,例如端口号和IP地址、工作进程数、client_max_body_size等,不应该在容器中进行配置,除非它们可以在执行docker run时进行自定义。


有争议的是你想把nginx放在哪个容器中(参见@PeterLyons下面列出的选项),但你肯定想把它放到某个容器中,而不是直接放在主机上。这样,你就可以获得一个完整的nginx配置包(所有那些端口号和路径等)。 - Thilo
建议您表明您所重视的因素(灵活性?少移动部件?),这样人们就有机会就权衡问题提出建议。现在,您正在要求纯粹的意见,这是不相关的。 - Bryan
@Bryan:好的,我已经添加了更多关于我正在寻找的信息。 - garbagecollector
1个回答

12
这可能会因为意见不一而被关闭,但就我个人而言,我的观点是 Docker 应该参与到网络层(TCP/UDP),但不应该涉及更高层(HTTP)。因此,我认为不应该直接在你的 Docker 主机上安装 nginx 反向代理,而是应该在你的容器中安装 nginx 如果你想要 nginx 提供的功能。
你可以决定在每个应用程序前面都有一个 nginx 容器(这似乎最符合容器化和分离以及不共享东西的整体思路),或者一个 nginx 容器来反向代理同一主机上托管在容器中的多个应用程序(总体上更简单,但紧密耦合,可能与 Docker 的哲学不太协调)。你也可以采用 phusion 风格,将应用程序和它的 nginx 放在同一个容器中,这提供了一个很好的连贯单元,但违反了每个容器只有 1 个进程树的普遍情况。

如果您有一个nginx容器,您需要设置nginx容器和应用程序容器之间的链接,以便它们可以相互通信。因此,您需要首先启动具有预定义名称的应用程序容器,然后启动已预配置为这些名称的nginx容器。是的,您是正确的,它更加紧密耦合,这种配置的好处是Docker主机不再需要安装任何Web服务器。 - garbagecollector

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接