在AWS / EC2上的T2-Micro实例上-
我已经构建了四个Docker容器,如下面的.yaml文件所示。
这些是:
在为1个烧瓶应用程序提供服务的三个应用程序容器中,每个容器都有gunicorn Web服务器。这些是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
任何对此的帮助将不胜感激。
答案 0 :(得分:0)
Docker原则是每个容器提供一项服务,因此考虑多个实例使用多个容器也很不错。如果要减少资源使用,请尝试在Dockerfiles中使用高山映像。无论如何,afaik容器的自我内存使用率如果很低(如果不是很低的话),则主要的使用来源是应用程序。
您所描述的听起来像手动扩展服务,而不是使用“ docker-compose up --scale” https://docs.docker.com/compose/reference/up/
您可以由运行多次gunicorn的超级用户更改命令,并在docker-compose文件中手动公开端口...但是在docker“做事方式”中这很少见。
您可以尝试在一项服务中添加“ scale:3”,以查看是否对您有效。请注意,使用scale与container_name不兼容,因为它也会缩放名称。
希望有帮助!
答案 1 :(得分:0)
同意这会破坏docker主体,但是我过去曾使用supervisor在单个容器中运行多个服务,并取得了一些成功。在出现问题时进行故障排除很痛苦,因此我在项目结束时最终使用了多个容器。
此处https://docs.docker.com/config/containers/multi-service_container/
的文档