将django应用程序映射到docker包含器,使用URL

时间:2016-02-24 16:46:13

标签: python django nginx docker consul

我有一个Django Web应用程序,我希望迁移到Docker容器。在目前的形式中,这是一个包含四个应用的Django项目:coreclassifysurvey和前端应用webapp。该项目的树视图如下。

我应该按照容器流程执行单个完整业务功能的准则,将每个Docker容器分开一个应用程序吗?

如果我们假设是,那么我应该如何使用semantic URLs将Nginx设置为指向每个应用/容器?示例网址显示在下面的树中。

.
├── api
│   ├── static
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── core          <- not addressable
│   ├── tests.py
│   ├── utils.py
├── classify      <- https://www.example.com/class?return_type=json
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── survey        <- https://www.example.com/survey
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── webapp        <- https://www.example.com
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── docker-compose.yml
├── docker-entrypoint.sh
├── Dockerfile
├── Dockerfile.prod
├── .dockerignore
├── .gitignore
├── manage.py
├── README.md
└── requirements.txt

有一些很好的例子可以在网上容纳Django应用程序。 One example显示了一种维护开发和生产配置的简单方法。 Another详细解释了像我这样的标准单片Django项目的设置过程。

使用标准Django项目,Web服务器(例如,Nginx)通过应用服务器(例如,uWSGI)向项目发送请求。项目urls.py根据语义网址将请求引导至正确的应用。但是,如果我将项目分解为不同的Docker容器,我仍然可以使用相同的URL解决它们的问题?这是Consul Template could do的东西吗? This answer似乎很接近,但没有处理整个项目的链接。

我目前使用Ansible处理部署,并且正在探索AWS Container服务。

1 个答案:

答案 0 :(得分:2)

根据不同应用程序的复杂程度,您将是最好的判断。请注意,如果您选择将其分解,则需要为每个后端应用程序分别设置一个django实例。 我建议把它分成2个容器,后端和前端,nginx在第三个容器上。