AWS предлагает два службы контейнерных оркестроидов: ECS и Кубернет Отказ
Хорошо интегрирован с экосистемой AWS, ECS является проприетарной версией.
Что мы будем строить
В этом руководстве мы объясним, как:
- Пакет и создайте приложение узла и упаковывайте простое приложение узла с Docker
- Создайте репозиторий ECR для хранения нашего образа докера
- Загрузите изображение Docker в репозиторий
- Создать и запустить эластичный контейнер кластер (ECR)
- Запустите нашу приложение в качестве задачи в кластере упругих контейнеров
- Разоблачить и откройте это приложение в Интернете
- Докер Это технология, которая помогает легко упаковать и отправлять приложения в производстве.
- ECS Стенды для упругого контейнера. Это полностью управляемая контейнерная система оркестографии
- ЭКР Стенды для эластичного репозитория контейнера. ECR позволяет хранить изображения Docker на AWS.
Концепции:
- Кластер — это логическая группировка аппаратных ресурсов.
- Задача представляет собой набор метаданных (память, процессор, сопоставление портов, переменные окружающей среды и т. Д.), Описываемый, как следует развернуть контейнер.
- Услуги несут ответственность за управление расширенными конфигурациями, такими как балансировка нагрузки
Приложение Nodejs для развертывания
Мы хотим развернуть приложение Basic Express Node, которое отображает текущее время каждый раз, когда эта страница индекса обновлена.
Package.json.
{ "name": "docker_web_app", "version": "1.0.0", "description": "Node.js on Docker", "author": "Raphaël MANSUY raphael.mansuy+contact@gmail.com>", "main": "server.js", "scripts": { "start": "node server.js" }, "dependencies": { "express": "^4.17.1" } }
server.js.
"use strict" const express = require("express") // Constants const PORT = 8080 const HOST = "0.0.0.0" // App const app = express() app.get("/", (req, res) => { res.send(`Hello World - ${new Date().toISOString()}`) }) app.listen(PORT, HOST) console.log(`Running on http://${HOST}:${PORT}`)
https://nodejs.org/en/docs/guides/nodejs-docker-webapp/
Пакет приложения Node.js с файлом Docker
В том же каталоге этого приложения мы можем создать Dockerfile
Это объясняет, как построить контейнер с этим приложением:
Dockerfile.
FROM node:14 # Create app directory WORKDIR /usr/src/app # Install app dependencies # A wildcard is used to ensure both package.json AND package-lock.json are copied # where available (npm@5+) COPY package*.json ./ RUN npm install # If you are building your code for production # RUN npm ci --only=production # Bundle app source COPY . . EXPOSE 8080 CMD [ "node", "server.js" ]
Этот файл определяет следующие шаги:
- Начните с узла: 14 изображений
- Создать каталог
/usr/src/ap
внутри контейнера - Скопируйте локальный файл с шаблоном
пакет * .json
в контейнере - Беги
Установка NPM
- Скопируйте все локальные файлы в контейнер
- разоблачить порт
8080
внутри контейнера - Беги
Узел
с файломServer.js
Когда контейнер начинается
Создание изображения
Запустите следующую команду, чтобы создать изображение с тегом Узел-веб-приложение
docker build -t node-web-app .
Запуск изображения
Запустите следующую команду, чтобы запустить приложение в отдельном режиме:
docker run -p 80:8080 -d node-web-app
Контейнер в настоящее время работает, и порт 8080 в контейнере выставлен на 80 портов на вашем локальном компьютере.
Теперь мы можем проверить приложение с Curl Command
curl http://localhost:80
Полученные результаты:
Hello World - 2021-02-11T05:06:12.739Z
Теперь мы готовы развернуть этот контейнер к облаку.
Подключитесь к Amazonecr
Предварительные условия
AWS CLI
должен быть установлен- Ваш AWS Profile должны быть настроены и имеют права администратора ECS включено
Запустите следующую команду:
aws ecr get-login-password --region us-west-2 | docker login
Если у вас есть доступ, вы должны отображать это на терминале:
Authenticating with existing credentials... Login Succeeded
Создайте свой Amazonecr в консоли AWS
Подключитесь к консоли AWS и на экране администрирования ECS, чтобы создать новый репозиторий.
Нажмите на Создать репозиторий и выберите Тесторепозитор
Как имя для вашего репозитория:
Репозиторий ECR теперь создан:
Загрузить изображение на AWS ECR
Нажмите сейчас на кнопка push commands
На экране репозитория:
Скопируйте и выполните каждую команду на вашем компьютере:
соединить :
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 3680199100XXX.dkr.ecr.us-west-2.amazonaws.com
построить :
docker build -t testrepository .
построить :
docker tag testrepository:latest 3680199100XXX.dkr.ecr.us-west-2.amazonaws.com/testrepository:latest
Нажмите на ECR :
docker push 3680199100XXX.dkr.ecr.us-west-2.amazonaws.com/testrepository:latest
Изображение теперь опубликовано и доступно на ECR, готовом для развертывания:
Если вы посмотрите на Amazonecr, репозитории, мы можем увидеть вновь созданное изображение.
Скопируйте Image URI: Нам нужно сохранить это, чтобы создать определение задачи для следующих шагов.
368019910004.dkr.ecr.us-west-2.amazonaws.com/testrepository:latest
Создать кластер ECS
Перейдите на домашнюю страницу ECS и нажмите на Создать кластер
кнопка:
Выберите EC2 Linux + Networking
и затем нажмите Далее:
Затем введите следующую информацию:
- Название кластера:
ECS01.
- Тип экземпляра EC2:
T3-Micro.
- Количество экземпляров:
1
Тогда выбирай:
- VPC по умолчанию VPC
- Авто присвоение IP:
Включено
- Группа безопасности:
дефолт
- Выберите одну из подсети
А затем дальше нажмите Входить
Создайте новое определение задачи
Задача представляет собой набор метаданных (память, процессор, сопоставление портов, переменные окружающей среды и т. Д.), Описываемый, как следует развернуть контейнер.
Нажмите на новые Определение задачи
Выберите EC2.
Тогда следующий
Выберите Odewebapptask
для имени определения задания.
Введите 128
для размера памяти.
Нажмите Добавить контейнер:
- Добавьте название контейнера:
Odewebapp.
- Установите URI Image, которые мы сохранили, чтобы добавить конец
Добавить изображение
шаг - Установите отображения портов 80: 8080
Нажмите Создать
Отказ
Тогда иди к Запускать задание
Задача сейчас работает:
Если мы нажмем на экземпляр контейнера:
Мы можем изменить группу безопасности, связанную с экземпляром, чтобы открыть порт 80.
Добавьте 80 в входящее правило для группы безопасности:
Если мы попробуем сейчас открыть URL: http://ec2-52-38-113-251.us-west-2.compute.amazonaws.com
:
И вуаля
Наше кластерное и узловое приложение теперь развернуто.
🎉 🎉. 🎉
Кредиты
Картина была сделана в феврале 2021 года на вершине пика Виктория в Гонконге.
Оригинал: «https://dev.to/raphaelmansuy/deploy-a-docker-app-to-aws-using-ecs-3i1g»