我在一台服务器上有三个网络应用程序:两个nodejs应用程序和一个php。现在我不使用容器,所以流程如下:
一个Nginx正在运行。它按主机名选择后端和静态文件目录。例如。如果我转到mysite.com
,它会向localhost:3000
代理请求,并使用/sites/mysite/static
中的静态文件。如果我转到sistersite.com
nginx代理请求PHP并使用来自/sites/sistersite.com
的静态文件等等。
现在我想隔离应用程序并尝试使用Docker。我应该将Nginx包含在每个容器中并通过某些东西解析主机到容器,还是应该只包含应用程序并使用安装在主机上的常见Nginx?如果第二,如何返回静态文件?添加root /path/to/static/in/container
?站点还支持http和https,因此它们使用不同的证书。
答案 0 :(得分:1)
您描述的任何一种方法都可以。制作一个Nginx + Node容器和一个Nginx + PHP容器,其中每个容器是完全自给自足的站点,是最干净的隔离形式。很容易看到如何添加其他站点,或者将PHP站点更改为Rails站点(或其他戏剧性重写),而不会影响容器外的任何内容。但是,您需要使用第三个(Nginx?)服务从主机路由到容器,因此您已向网络添加了额外的跃点。
或者,您可以将每个站点放入其自己的容器中,并为您的(单个实例)Nginx提供第三个容器。您可以在Nginx容器上使用--volumes-from
来安装来自两个站点容器的静态数据。