在AWS/EC2上的T2微型实例上-
我已经构建了四个Docker容器,如下面的.yaml文件所示。在
这些是:
三个应用程序容器中的每个容器中都有gunicorn web服务器,为一个flask应用程序提供服务。这些是Plot.ly/破折号应用程序。在
正如我们可能看到的,这为每一个应用程序提供了一个容器,在三个应用程序之后变得笨重,并且开始在T2微实例上消耗太多内存。在
理想的情况是,如果每个应用程序容器,即:经济、选举、社交等,都可以使用端口迭代(如5000、5001、5002等)在其中包含多个flask应用程序。它们都可以通过唯一的端口号寻址,这些端口号可以在.yaml文件中枚举。在
允许单个容器的单个容器和单个容器的应用程序装载更多的容器。在
下面的.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/
Docker原则是每个容器一个服务,所以多个实例有多个容器是不错的想法。如果您想减少资源使用,请尝试在Dockerfiles中使用alpine映像。不管怎样,afaik容器的自我内存使用率如果很低,如果不是没有的话,主要的使用来源是应用程序。在
您所描述的听起来像是手动扩展服务,而不是使用“docker compose up scale”https://docs.docker.com/compose/reference/up/
你可以通过一个多次运行gunicorn的主管来更改命令,并在docker compose文件中手动公开端口。。。但这在docker的“做事方式”中有点少见。在
你可以试着给一个服务添加“scale:3”,看看是否适合你。请注意,使用scale与container_name不兼容,因为它也会缩放名称。在
希望有帮助!在
相关问题 更多 >
编程相关推荐