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

Do I need my own server if I move my Elastic Beanstalk app to use Docker?

我有一个可用的 Elastic Beanstalk、Django 应用程序,但出于多种原因,我想从使用预配置的 Python 平台转向使用通用 Docker 平台。

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

谢谢

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

您发布的 link 是一个很好的起点,并且很好地描绘了功能性 EB/Docker/Django 设置的外观。另请查看 https://github.com/AndrewSmiley/django-docker-eb(它使用 gunicorn 而不是 nginx/uwsgi)。实际上,您的 Docker 容器中需要某种服务器 运行ning——此服务器(您 link 访问的示例中的 nginx)可以让您的 Docker容器与 运行 连接它的 EC2 实例对话。

如果您查看一个典型的 Docker 文件,您会在某些时候使用 EXPOSE 使端口对外界可见。 ElasticBeanstalk 将通过此端口与您的容器通信,因此您的容器需要其自己的某种内部服务器来与这些请求进行交互。 ElasticBeanstalk 将在 EC2 实例(我相信是 nginx)上安装自己的外部服务器,它将流量汇集到您的容器。换句话说:网络 <-> EC2 实例 <-> EB 网络服务器 <-> Docker <-> 容器中的服务器 <-> 您的应用程序

虽然您可以想象 运行 python manage.py runserver 作为您的 Docker CMD,但它设置的网络服务器并不适合生产。这就是为什么您 link 编辑的图像使用 supervisord 来 运行 更适合生产的网络服务器配置。不过,在这两种情况下,您 运行 在 Docker 容器中安装服务器!