Docker — Multiple Container — Створення Elastic Beanstalk

текст перекладу
Ця серія статей присвячена створенню декількох контейнерів та їх розгортанню на Elastic Beanstalk. Посилання на попередні статті:

Створення проєкту: Docker — Multiple Container — Create project
Створення DockerCompose: Docker — Multiple Container — DockerCompose
Розгортання образу на Docker Hub: Docker — Multiple Container — CI

Dockerrun.aws.json

Якщо ви хочете розгорнути кілька контейнерів на Elastic Beanstalk, необхідно додатково налаштувати файл: Dockerrun.aws.json. Налаштування Dockerrun.aws.json схоже на docker-compose.yaml.

pic

Зображення: https://www.udemy.com/course/docker-and-kubernetes-the-complete-guide/

docker-compose.yaml налаштовує використання Dockerfile для створення образу, тоді як Dockerrun.aws.json налаштовує завантаження образу з Docker hub. docker-compose використовується для створення образу, а Dockerrun.aws.json — для розгортання образу.

pic

Зображення: https://www.udemy.com/course/docker-and-kubernetes-the-complete-guide/

Elastic Beanstalk не знає, як виконувати контейнери, насправді він надає дозвіл ECS (Elastic Container Service) для запуску контейнерів. ECS працює так, що ви створюєте файл під назвою task definition, вказуючи ECS, як виконувати контейнер. Ці task definition схожі на визначення контейнерів у Dockerrun.aws.json, тому Dockerrun.aws.json визначає, як буде виконуватися task definition в ECS.

Детальніше про task definition можна дізнатися тут: документація.

  • containerDefinitions: масив, що визначає контейнери.
  • name: назва, яка відображатиметься на панелі керування.
  • image: /. Це вказує на те, що образ буде завантажений з Docker hub.
  • hostname: аналогічно налаштуванню name в docker-compose.yml.
    У файлі default.conf в директорії nginx вказано proxy_pass http://client, що відповідає ім'я сервісу в docker-compose.yml.
  • essential: якщо true, то коли цей контейнер зупиниться, всі інші контейнери також зупиняться. У списку контейнерів принаймні один контейнер повинен мати значення true.
  • portMappings: відповідає параметрам ports в docker-compose.yml.
  • links: використовується для зв'язку між контейнерами. Зауважте, що тут використовується сервер, а не api, тому default.conf використовує server.

pic

Зображення: https://www.udemy.com/course/docker-and-kubernetes-the-complete-guide/

Створення Elastic Beanstalk

Elastic Beanstalk > Створити додаток

Назва додатку: multi-docker
Вибір платформи: Docker
Вибір гілки платформи: Multi-container Docker running on 64bit Amazon Linux

pic

Натискаємо "Create application"

Зачекайте, поки створиться середовище.

pic

Після створення Docker середовища

pic

Redis та Postgres

Оскільки це пов'язано з AWS, я написав окрему статтю: medium.

Налаштування змінних середовища

Раніше ми додали EB Instance, RDS, EC до одного Security Group, тепер необхідно налаштувати параметри для підключення між ними.

Elastic Beanstalk > Environments > MultiDocker-env > Configuration

Редагуємо Software

pic

Настроюємо змінні середовища

pic

Відповідно до docker-compose.yml налаштовуємо назви змінних

pic

host name у ElastiCache > Redis > multi-docker-redis > Description > Primary Endpoint

Не забудьте не копіювати порт.

pic

PGHOST у RDS > Databases > multi-docker-postgres > Endpoint

pic

Зміст змінних: натискаємо Apply.

pic

Налаштування значень Environment properties, всі контейнери у Dockerrun.aws.json отримають ці налаштування.

Розгортання на AWS EB

pic

Зображення: https://www.udemy.com/course/docker-and-kubernetes-the-complete-guide/

Зараз Travis вже завантажує образ на DockerHub, і Elastic Beanstalk вже готовий. Тепер починаємо розгортати проєкт на Elastic Beanstalk.

Як було сказано раніше, потрібно лише передати файл Dockerrun.aws.json в Elastic Beanstalk, інші файли потрібні лише для створення Docker образу.
текст перекладу
Щоб розгорнути на Elastic Beanstalk, вам потрібні права доступу, тому необхідно створити IAM ключ.

IAM > Користувачі > Додати користувача

Крок 1:

Ім'я користувача: multi-docker-deployer
Тип доступу: виберіть Programmatic access

pic

Крок 2:

Виберіть AWSElasticBeanstalkFullAccess

pic

Крок 3:

Додайте теги і натисніть Next

Крок 4:

Створіть користувача

Крок 5:

Запишіть Access key ID і Secret access key

pic

Тепер перейдіть до свого акаунта на travis.org і натисніть на налаштування проєкту.

pic

Додайте AWSACCESSKEY та AWSSECRETKEY

pic

Редагування travis.yml

Додайте налаштування для розгортання

region можна отримати безпосередньо з URL.

pic

app — це назва додатку, env — це Environments.

pic

bucket_name: знайдіть бакет, створений ElasticBeanstalk.

pic

Тепер завантажте файли в GitHub, щоб розгорнути на ElasticBeanstalk.

Дочекайтеся виконання процесу Travis та перевірте ElasticBeanstalk.

pic

У розділі Recent events можна побачити помилки під час розгортання.

pic

У файлі Dockerrun.aws.json потрібно визначити пам'ять для контейнера в мегабайтах. Ось приклад для одного контейнера:

{  
 "name":"client",  
 "image": "summer0531/multi-react",  
 "hostname":"client",  
 "essential": false,  
 "memory": 128  
}

Після редагування Dockerrun.aws.json, знову завантажте програму, і ElasticBeanstalk завершить розгортання. Щоб побачити події розгортання, можна переглянути логи:

Elastic Beanstalk > Environments > MultiDocker-env > Logs

Виберіть останні 100 рядків логу, створіть файл і відкрийте.

pic

В першому рядку логів можна побачити ecs-init.log, як уже згадувалося, ElasticBeanstalk використовує ECS для керування контейнерами.

pic

Тепер відкрийте сайт, і ви побачите, що він оновлений.

pic

Видалення ElasticBeanstalk

pic

Джерела

Docker and Kubernetes: The Complete Guide

Перекладено з: Docker — Multiple Container — Create Elastic Beanstalk

Leave a Reply

Your email address will not be published. Required fields are marked *