启动Docker容器来处理HTTP请求

时间:2016-06-27 22:21:28

标签: docker reverse-proxy file-management docker-volume

我正在构建一个用户管理项目中的文件的Web应用程序。每个用户可以有多个项目,每个项目可以有多个文件。我使用Docker实现了这个,其中每个项目都是Docker卷。当用户单击webapp界面中的按钮以修改其项目中的文件时,Web服务器将配置并启动一个worker(这是另一个Docker实例)来修改Docker卷中的文件。到目前为止,这一切都很顺利。

但是,现在我想通过HTTP提供这些项目文件。我想到的策略是:

  1. Web服务器(如nginx)接受来自用户的传入HTTP请求
  2. Web服务器检查传入的请求以确定正在请求的项目。例如,如果网址为sparkle-pony.myapp.com,那么我们就知道正在请求sparkle-pony项目。如果此项目不存在,则nginx会以404 Not Found响应进行响应。
  3. Web服务器还会检查用户是否已登录,以及登录用户是否有权查看项目。如果没有,则Web服务器以403 Forbidden HTTP响应进行响应。
  4. Web服务器配置并启动一个新的Docker容器,可能是另一个nginx进程。此配置的一部分包括将正确的Docker卷安装到新容器上。我们将这个新启动的容器称为“内部”容器,将现有容器称为“外部”容器。
  5. 外部容器要么将此HTTP请求移交给内部容器,要么充当内部容器响应的代理。
  6. 内部容器可以访问项目的正确Docker卷,并且知道请求用户具有正确的权限,检查URL路径并从D​​ocker卷提供正确的项目文件。在适当处理请求之后,内部容器关闭。
  7. 所以,尽管如此,我还有三个问题:

    1. 这是一个合理的策略吗?它确实涉及为每个传入的HTTP请求启动一个新的Docker容器,但我认为没关系......
    2. 将HTTP请求从一个容器移交给另一个容器的最佳方法是什么?或者外部容器是否必须代理内部容器的响应?
    3. 有人可以提供一些如何设置这样的项目的指针或示例吗?可能还有一些我还不知道的工具或技术。
    4. 谢谢!

0 个答案:

没有答案