Рубрики
Uncategorized

Развертывание контейнеров докеров на AWS ECS 🏗

Развертывайте приложение Docker к AWS, используя ECS AWS, предлагает два сервиса оркестрации контейнера: E … Tagged с Docker, Node, AWS, DEVOPS.

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»