【发布时间】:2018-10-29 18:28:02
【问题描述】:
在 AWS/EC2 上的 T2-Micro 实例上 -
我已经构建了四个 Docker 容器,如下面的 .yaml 文件所示。
这些是:
- Nginx
- 经济 (app1)
- 选举 (app2)
- 社交 (app3)
三个应用容器中的每一个都有 gunicorn 网络服务器,为 1 个烧瓶应用提供服务。这些是 Plot.ly/Dash 应用程序。
正如人们所看到的,这需要一个容器用于每个应用程序,该容器在三个之后变得庞大并开始在 T2-Micro 实例上消耗过多的内存。
理想的情况是,如果每个应用容器(即经济、选举、社交等)都可以在其中包含多个烧瓶应用,使用端口迭代,例如 5000、5001、5002 等。它们都可以通过唯一的端口号寻址可以在 .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
对此的任何帮助将不胜感激。
【问题讨论】:
-
我刚刚进行了一个实验,似乎有 6 个应用程序和一个 nginx 容器,我还剩下很多存储空间。 /dev/xvda1 8.3G 4.4G 3.9G 53% /
-
我可以在每台服务器上放置 10-12 个应用程序(即 11 个容器)而不会出现任何问题。 Dash 图表应用程序非常轻巧,容器框架本身也是如此。
标签: python docker flask gunicorn