gpt4 book ai didi

python - 在单个 Docker 容器中运行多个 Flask 应用程序的最佳方式

转载 作者:太空宇宙 更新时间:2023-11-03 21:38:48 24 4
gpt4 key购买 nike

在 AWS/EC2 上的 T2-Micro 实例上 -

我已经构建了四个 Docker 容器,如下面的 .yaml 文件所示。

这些是:

  1. Nginx
  2. 经济(app1)
  3. 选举(app2)
  4. 社交(应用3)

三个应用程序容器中的每一个都有 Gunicorn Web 服务器,为 1 个 Flask 应用程序提供服务。这些是 Plot.ly/Dash 应用程序。

正如人们所看到的,这需要为每个应用程序提供一个容器,三个应用程序之后就会变得庞大,并开始在 T2-Micro 实例上消耗太多内存。

理想的情况是,每个应用程序容器(即:经济、选举、社交等)可以使用端口迭代(例如 5000、5001、5002 等)在其中包含多个 Flask 应用程序。它们都可以通过唯一的端口号进行寻址,可以在 .yaml 文件中枚举。

使用单个容器、单堆栈的 Gunicorn、Flask 和依赖包将减少单个容器的内存需求,使我能够在单个 ec2 实例上加载更多应用程序。

下面的 .yaml 文件:

version: '2.1'

services:
economy:
container_name: economy
hostname: economy
restart: always
build: economy
networks:
tsworker-net:
expose:
- "8000"
volumes:
- ./data:/tmp/data:ro
command: gunicorn -w 1 -b :8000 economy:server

elections:
container_name: elections
hostname: elections
restart: always
build: elections
networks:
tsworker-net:
expose:
- "8500"
volumes:
- ./data:/tmp/data:ro
- ./assets:/tmp/assets:ro
environment:
- FLASK_ENV=development
command: gunicorn --log-level debug -w 1 -b :8500 elections:server

social:
container_name: social
hostname: social
restart: always
build: social
networks:
tsworker-net:
expose:
- "9000"
volumes:
- ./data:/tmp/data:ro
command: gunicorn -w 1 -b :9000 social:server # was 8000

nginx:
image: nginx:1.15
container_name: nginx
hostname: nginx
restart: unless-stopped
networks:
tsworker-net:
ports:
- 80:80
- 443:443
volumes:
- ./nginx/nginx.http.conf:/etc/nginx/conf.d/default.conf:ro
- /etc/letsencrypt/etc:/etc/letsencrypt
- /etc/letsencrypt/www:/var/www/letsencrypt
environment:
- TZ=UTC
depends_on:
- economy
- elections
- social

networks:
tsworker-net:
driver: bridge

对此的任何帮助将不胜感激。

最佳答案

同意这破坏了 docker 原则,但我过去曾使用supervisord 在单个容器中运行多个服务,并取得了一些成功。当出现问题时进行故障排除非常痛苦,因此我最终在项目结束时使用了多个容器。

此处的文档 https://docs.docker.com/config/containers/multi-service_container/

关于python - 在单个 Docker 容器中运行多个 Flask 应用程序的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53051686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com