如果我将Elastic Beanstalk应用程序移动到使用Docker,我是否需要自己的服务器?

时间:2015-05-01 17:07:30

标签: django nginx docker elastic-beanstalk

我有一个工作的Elastic Beanstalk,Django应用程序,但由于几个原因,我想从使用预配置的Python平台转向使用Generic Docker平台。

在EB中使用Docker的真实应用程序的文档或示例很少,所以我不清楚一旦我转移到Docker,我还需要管理服务器,这意味着我的docker镜像需要它在我的django设置之上拥有Apache / nginx服务器,或者如果EB仍然将其apache服务器与EC2实例上的docker镜像并排。换句话说,我的docker镜像上的最终CMD是一个简单的'python manage.py runserver'类型cmd?还是一些'supervisord -n'?我需要一个类似于https://github.com/dockerfiles/django-uwsgi-nginx/blob/master/Dockerfile的图像吗?

由于

2 个答案:

答案 0 :(得分:0)

没有。如果Elastic Beanstalk包含您需要的所有应用程序,数据库和其他服务,它将有效地成为您的“服务器”。它仍将运行EC2实例,但您无需直接管理它们。

答案 1 :(得分:0)

您发布的链接是一个很好的起点,并且是功能性EB / Docker / Django设置的概述。另请查看https://github.com/AndrewSmiley/django-docker-eb(使用gunicorn而不是nginx / uwsgi)。实际上,你需要在Docker容器中运行某种服务器 - 这个服务器(你链接的示例中的nginx)是让你的Docker容器与运行它的EC2实例通信的。

如果您查看典型的Dockerfile,在某些时候您可以使用- (void)loadView { [super loadView]; // self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; self.title = @"aFaire"; NSMutableArray *localViewControllersArray = [[NSMutableArray alloc] initWithCapacity:3]; FirstViewController *firstViewController = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; firstViewController.tabBarItem.title = @"First"; [localViewControllersArray addObject:firstViewController]; self.viewControllers = localViewControllersArray; self.view.autoresizingMask = (UIViewAutoresizingFlexibleHeight); } 使端口对外界可见。 ElasticBeanstalk将在此端口上与您的容器进行通信,因此您的容器需要其自己的某种内部服务器来与这些请求进行交互。 ElasticBeanstalk将在EC2实例(我相信的nginx)上安装自己的外部服务器,这会将流量汇集到您的容器中。换句话说:Net< - > EC2实例< - > EB网络服务器< - > Docker< - >容器中的服务器< - >您的申请

虽然您可以将EXPOSE作为Docker python manage.py runserver运行,但它设置的网络服务器并不适合生产。这就是您链接的图像使用supervisord运行更多生产就绪的Web服务器配置的原因。但是,在这两种情况下,您都在Docker容器中运行服务器!