текст перекладу
Ця серія статей присвячена створенню декількох контейнерів та їх розгортанню на 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.
Зображення: 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 — для розгортання образу.
Зображення: 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.
Зображення: 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
Натискаємо "Create application"
Зачекайте, поки створиться середовище.
Після створення Docker середовища
Redis та Postgres
Оскільки це пов'язано з AWS, я написав окрему статтю: medium.
Налаштування змінних середовища
Раніше ми додали EB Instance, RDS, EC до одного Security Group, тепер необхідно налаштувати параметри для підключення між ними.
Elastic Beanstalk > Environments > MultiDocker-env > Configuration
Редагуємо Software
Настроюємо змінні середовища
Відповідно до docker-compose.yml налаштовуємо назви змінних
host name у ElastiCache > Redis > multi-docker-redis > Description > Primary Endpoint
Не забудьте не копіювати порт.
PGHOST у RDS > Databases > multi-docker-postgres > Endpoint
Зміст змінних: натискаємо Apply.
Налаштування значень Environment properties, всі контейнери у Dockerrun.aws.json отримають ці налаштування.
Розгортання на AWS EB
Зображення: 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
Крок 2:
Виберіть AWSElasticBeanstalkFullAccess
Крок 3:
Додайте теги і натисніть Next
Крок 4:
Створіть користувача
Крок 5:
Запишіть Access key ID і Secret access key
Тепер перейдіть до свого акаунта на travis.org і натисніть на налаштування проєкту.
Додайте AWSACCESSKEY та AWSSECRETKEY
Редагування travis.yml
Додайте налаштування для розгортання
region можна отримати безпосередньо з URL.
app — це назва додатку, env — це Environments.
bucket_name: знайдіть бакет, створений ElasticBeanstalk.
Тепер завантажте файли в GitHub, щоб розгорнути на ElasticBeanstalk.
Дочекайтеся виконання процесу Travis та перевірте ElasticBeanstalk.
У розділі Recent events можна побачити помилки під час розгортання.
У файлі 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 рядків логу, створіть файл і відкрийте.
В першому рядку логів можна побачити ecs-init.log, як уже згадувалося, ElasticBeanstalk використовує ECS для керування контейнерами.
Тепер відкрийте сайт, і ви побачите, що він оновлений.
Видалення ElasticBeanstalk
Джерела
Docker and Kubernetes: The Complete Guide
Перекладено з: Docker — Multiple Container — Create Elastic Beanstalk