我有一个Django Web应用程序,我希望迁移到Docker容器。在目前的形式中,这是一个包含四个应用的Django项目:core
,classify
,survey
和前端应用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服务。
答案 0 :(得分:2)
根据不同应用程序的复杂程度,您将是最好的判断。请注意,如果您选择将其分解,则需要为每个后端应用程序分别设置一个django实例。 我建议把它分成2个容器,后端和前端,nginx在第三个容器上。