Я пытаюсь найти лучший подход к развертыванию приложения на основе докеров в ECS.
Я попытался набросать общую топографию ниже.
И ниже мой файл для создания докеров:
version: '3'
services:
python-app:
build:
context: .
dockerfile: ./docker/Dockerfile
restart: always
container_name: "python-app"
shm_size: 2G
tty: true
volumes:
- ./src:/app/src
- ./.env:/app/.env
- ./store:/app/store
ports:
- "3000:3000"
networks:
- bb-network
proxy-rest:
build:
context: .
dockerfile: docker/Dockerfile.PROXY.REST
restart: always
container_name: "proxy-rest"
ports:
- "5000:5000"
networks:
- app-network
mongo:
container_name: "mongo"
image: mongo:latest
restart: always
ports:
- "27017:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: $MONGO_USER
MONGO_INITDB_ROOT_PASSWORD: $MONGO_SECRET
networks:
- app-network
volumes:
- ./docker/mongodata:/data/db
client:
build:
context: .
dockerfile: docker/Dockerfile.CLIENT
container_name: "bb-client"
ports:
- "8080:8080"
environment:
- ENV=staging
networks:
- app-network
networks:
bb-network:
driver: bridge
У меня есть другие приложения, успешно развернутые в ECS, используя EC2, с ALB. Однако они были еще более грубыми. Т.е. пара контейнеров с одним публично доступным портом и одной серверной службой. Все это делается через графический интерфейс AWS. Это одна задача на один сервис, на один балансировщик нагрузки на целевую группу.
В этом случае я начал так же и создал:
Однако я быстро обнаружил, что вы не можете открыть / направить несколько портов в разные контейнеры в рамках одной и той же задачи.
С тех пор я обнаружил:
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html
В нем говорится, что это возможно, но не через графический интерфейс администратора AWS, поэтому в дальнейшем я переключился на esc-cli / aws-cli. Если это не ясно из диаграммы, разные контейнеры должны взаимодействовать друг с другом и дополнительно открывать различные порты для Интернета.
У меня такой вопрос: каков общий (и простой!) Подход / разбивка того, как я должен это организовать?
Некоторые другие подробности: