Как правильно выгружать Docker проект со множеством контейнеров в AWS(ECS)? У меня есть проект с 4 images, которые запускаются как 5 сервисов, через docker-composeversion: '3.1'
services:
nginx-api:
image: nginx
depends_on:
- api
ports:
- "3001:443"
environment:
NODE_TLS_REJECT_UNAUTHORIZED: 0
volumes:
- ./api/api.nginx.site:/etc/nginx/conf.d/default.conf
- ./api/certs/.:/etc/nginx/certs
api:
build: api/.
command: yarn start
depends_on:
- db
environment:
NODE_TLS_REJECT_UNAUTHORIZED: 0
NODE_ENV: development
COOKIE_SECRET: ChangeMe1234
env_file:
- api/.env
ports:
- '8080:3000'
volumes:
- ./api/.:/opt/app
- /opt/app/node_modules
nginx-frontend:
image: nginx
depends_on:
- frontend
ports:
- "3000:443"
environment:
NODE_TLS_REJECT_UNAUTHORIZED: 0
volumes:
- ./frontend/frontend.nginx.site:/etc/nginx/conf.d/default.conf
- ./frontend/certs/.:/etc/nginx/certs
frontend:
build: frontend/.
command: yarn start
environment:
NODE_TLS_REJECT_UNAUTHORIZED: 0
NODE_ENV: development
COOKIE_SECRET: ChangeMe1234
API_URL: "https://nginx-api"
ports:
- "0.0.0.0:3030:3000"
volumes:
- ./frontend/.:/opt/frontend
- /opt/frontend/node_modules
db:
build: db/.
environment:
NODE_TLS_REJECT_UNAUTHORIZED: 0
POSTGRES_PASSWORD: localdev
PGDATA: /var/lib/postgresql/data/pgdata
volumes:
- ./db/postgres-data:/var/lib/postgresql/data/pgdata
ports:
- '8001:5432'
Что я сейчас делаю:
Создал ECS кластер( Registered container instances 5),
По отдельности собрал image api, frontend, db, nginx и загрузил в репозиторий aws
Зарегистрировал их все как Task.
Запустил на кластере db и frontend, api не запустился.
Как теперь запустить nginx?
Можно это как то сделать проще, а не руками?
Что осталось сделать для запуска всех контейнеров на сервере?
Вот вопрос на github к бойлерплейту(только бд другая немного)https://github.com/chadfurman/rpg-boilerplate/issues/19
PS Все это локально запускается через скрипт docker/run.sh#!/bin/bash
set -e
COMPOSE_PROJECT_NAME=rpgboilerplate
# Linux fix
CONFIG_FILE=docker-compose.yml
CACHE_INIT=false
SERVICES=(api frontend)
SERVICES_DIR=(api frontend)
BUILD_CMD="docker-compose -f $CONFIG_FILE build"
UP_CMD="docker-compose -f $CONFIG_FILE up"
function rmContainers() {
echo "Removing containers"
docker-compose -f $CONFIG_FILE rm -fv $SERVICE_NAME || true
}
function initCache() {
# Init empty cache file
touch $SERVICE_DIR/yarn.lock
if [ ! -f $SERVICE_DIR/.yarn-cache.tgz ]; then
echo "Init empty $SERVICE_DIR/.yarn-cache.tgz"
tar cvzf $SERVICE_DIR/.yarn-cache.tgz --files-from /dev/null
CACHE_INIT=true
fi
}
function retrieveYarnCache() {
echo "Checking if I need to retrieve Yarn cache and lock file for $SERVICE_NAME"
RETRIEVE=false
# Case #1: we initialized an empty cache (usually, first run after cloning)
if [ "$CACHE_INIT" = true ]; then
RETRIEVE=true
fi
# Case #2: yarn packages changed during build
docker run --rm --entrypoint cat ${COMPOSE_PROJECT_NAME}_$SERVICE_NAME:latest /cache/yarn.lock > /tmp/${SERVICE_NAME}_yarn.lock
if ! diff -q $SERVICE_DIR/yarn.lock /tmp/${SERVICE_NAME}_yarn.lock > /dev/null 2>&1; then
RETRIEVE=true
fi
if [ "$RETRIEVE" = true ]; then
echo "Retrieving"
docker run --rm --entrypoint cat ${COMPOSE_PROJECT_NAME}_$SERVICE_NAME:latest /.yarn-cache.tgz > $SERVICE_DIR/.yarn-cache.tgz
cp /tmp/${SERVICE_NAME}_yarn.lock $SERVICE_DIR/yarn.lock
else
echo "Not retrieving"
fi
echo "Done"
}
for i in "${!SERVICES[@]}"
do
SERVICE_NAME=${SERVICES[$i]} SERVICE_DIR=${SERVICES_DIR[$i]} rmContainers
SERVICE_NAME=${SERVICES[$i]} SERVICE_DIR=${SERVICES_DIR[$i]} initCache
done
COMPOSE_PROJECT_NAME=$COMPOSE_PROJECT_NAME $BUILD_CMD
for i in "${!SERVICES[@]}"
do
SERVICE_NAME=${SERVICES[$i]} SERVICE_DIR=${SERVICES_DIR[$i]} retrieveYarnCache
done
COMPOSE_PROJECT_NAME=$COMPOSE_PROJECT_NAME $UP_CMD

21 Авг 2019 в 06:43
215 +1
0
Ответы
1

Для выгрузки Docker проекта с множеством контейнеров в AWS ECS, вам следует использовать следующие шаги:

Создайте ECS кластер и зарегистрируйте контейнеры как Task. Убедитесь, что все контейнеры (api, frontend, db, nginx) добавлены как отдельные сервисы в вашем ECS Task.

Загрузите все 4 образа (api, frontend, db, nginx) в репозиторий AWS ECR (Elastic Container Registry). Запустите каждый образ в репозитории в соответствии с их сервисами.

Проверьте вашу конфигурацию задачи (Task Definition) в ECS Console, чтобы убедиться, что все зависимости и параметры (порты, volumes, переменные окружения) правильно настроены для каждого сервиса.

Запустите вашу задачу в ECS кластере, запуская каждый сервис по очереди. Убедитесь, что все контейнеры успешно запускаются и работают.

Если у вас возникают проблемы с запуском конкретного сервиса (например, nginx), проверьте логи контейнера и конфигурацию задачи, чтобы найти причину проблемы.

Используйте AWS CLI или AWS Management Console для управления вашими задачами в ECS и мониторинга их состояния. Следуя этим шагам, вы сможете успешно выгрузить ваш Docker проект со множеством контейнеров на AWS ECS.

20 Апр в 13:14
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 436 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир