Как развернуть приложение Node.js в Amazon Web Services с помощью Docker

1656607698 kak razvernut prilozhenie nodejs v amazon web services s pomoshhyu

Эммануэль Юсуфу

1*KqO5C0953HQzafpnBYaTSg

Plug: Первоначально опубликовано в журнале Zeolearn.

Чтобы получить еще много полезного содержимого для разработчиков, таких как эта статья, посетите блог Zeolearn. В блоге представлены статьи, посвященные разработке веб- и программного обеспечения: AngularJS, ReactJS, NodeJS, Django и Data Science (включая машинное обучение, науку о данных, Python и глубокое обучение).

Содержание

1. Введение
2. Предпосылки
3. Краткое руководство по Docker и AWS
4. Что мы будем разворачивать
5. Создание Dockerfile
6. Построение образа докера
7. Запуск докер-контейнера
8. Создание реестра (ECR) и загрузка в него образа программы
9. Создание нового определения задачи
10. Создание кластера
11. Создание службы для ее запуска
12. Заключение

1. Введение

Большинство разработчиков знакомы с написанием кода, который делает что-нибудь новое. Иногда нам следует взять на себя ответственность инженера SysAdmin или DevOps и развернуть нашу кодовую базу на производстве, где она поможет бизнесу решать проблемы для клиентов.

В этом учебнике я покажу вам, как докеризовать программу Node.js и развернуть ее в Amazon Web Service (AWS) с помощью Amazon ECR (Elastic Container Registry) и ECS (Elastic Container Service).

2. Предпосылки

Для выполнения этого руководства вам понадобится следующее:

  1. Узел и Npm: перейдите по этой ссылке, чтобы установить последние версии.
  2. Базовые знания Node.js.
  3. Docker: установка предоставляет Docker Engine, клиент Docker CLI и другие интересные вещи. Следуйте инструкциям для вашей операционной системы. Чтобы проверить, сработала ли установка, запустите это на терминале:
docker --version

Команда выше должна отображать номер версии. Если это не так, установка не завершилась должным образом.

4. Учетная запись AWS: Подпишитесь на бесплатный уровень Существует период ожидания для подтверждения телефонного номера и банковской карты. После этого вы получите доступ к консоли.

5. AWS CLI: следуйте инструкциям для вашей операционной системы. Вам нужно установить Python.

3. Краткое руководство по Docker и AWS

Docker — это программное обеспечение с открытым исходным кодом, позволяющее упаковать программу вместе с необходимыми зависимостями и средой в «контейнер», который вы можете отправлять и запускать куда угодно. Он не зависит от платформ или аппаратного обеспечения, поэтому контейнерная программа может работать в любой среде изолированно.

Контейнеры Docker решают много проблем, например, когда приложение работает на компьютере коллеги, но не работает на вашем, или он работает в локальной среде разработки, но не работает, когда вы разворачиваете его на сервере.

1*E0SsYen436st84JVeBz4dQ

Amazon Web Services (AWS) предлагает надежный, масштабируемый и недорогой сервис облачных вычислений для бизнеса. Как я упоминал ранее, это руководство будет сосредоточено на использовании служб ECR и ECS.

4. Что мы будем разворачивать

Давайте быстро создадим образец приложения, который мы будем использовать для целей этого учебника. Это будет очень простое приложение Node.js.

Введите следующее в своем терминале:

// create a new directory
mkdir sample-nodejs-app

// change to new directory
cd sample-nodejs-app

// Initialize npm
npm init -y

// install express
npm install express

// create an server.js file
touch server.js

ОТКРЫТО server.js и вставьте в него следующий код:

// server.js

const express = require('express')
const app = express()

app.get('/', (req, res) => {
    res.send('Hello world from a Node.js app!')
})

app.listen(3000, () => {
    console.log('Server is up on 3000')
})

Запустите приложение с:

node server.js

Доступ к нему Вы должны получить Hello world from a Node.js app! отображается в вашем браузере. Полный код доступен на GitHub.

Теперь давайте разработаем нашу очень важную программу?

5. Создание Dockerfile

Мы собираемся начать докеризацию программы, создав один файл под названием a Dockerfile в базе нашего каталога проекта.

Dockerfile – это план, на основе которого строятся наши изображения. А затем изображения преобразуются в контейнеры, в которых мы запускаем наши программы.

Каждый файл Docker начинается с базового образа как основания. Существует два способа подойти к созданию вашего Dockerfile:

  1. Используйте а простой базовый образ ОС (например, ОС Ubuntu, Debian, CentOS и т.д.) и установите в нем среду программы, например Node.js ИЛИ
  2. Используйте an готовое к среде базовое изображение чтобы получить образ операционной системы с уже установленной средой программы.

Перейдем ко второму подходу. Мы можем использовать официальный образ Node.js, размещенный на Dockerhub, основанный на Alpine Linux.

Напишите это в файле Docker:

FROM node:8-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . .
RUN npm install
EXPOSE 3000
CMD [ "node", "server.js" ]

Давайте пройдемся по этой строке, чтобы увидеть, что здесь происходит и почему.

FROM node:8-alpine

Здесь мы создаем наш образ Docker, используя официальный образ Node.js из Dockerhub (хранилище базовых изображений).

  • Начните наш Dockerfile с a FROM заявление. Здесь вы указываете ваше базовое изображение.
  • The RUN оператор позволит нам выполнить команду для чего-либо, что вы хотите сделать. Мы создали подкаталог /usr/src/app который будет содержать код нашей программы в изображении докера.
  • WORKDIR инструкция устанавливает созданный нами подкаталог как рабочий каталог для любого RUN, CMD, ENTRYPOINT, COPY и ADD инструкции, которые следуют ему в Dockerfile. /usr/src/app это наш рабочий каталог.
  • COPY позволяет копировать файлы из источника в место назначения. Мы скопировали содержимое нашего кода программы узла ( server.js и package.json) из нашего текущего каталога в рабочий каталог в нашем образе Docker.
  • The EXPOSE инструкция сообщает Docker, что контейнер прослушивает указанные сетевые порты во время выполнения. Мы указали порт 3000.
  • Последнее, но не менее важноеCMD оператор определяет команду для запуска нашей программы. Это сообщает Docker, как запустить ваше приложение. Здесь мы используем node server.js Как правило, файлы запускаются в Node.js.

С этим заполненным файлом мы готовы создать новый образ Docker.

6. Построение образа докера

Убедитесь, что у вас запущен и запущен Docker. Теперь, когда мы определили наш файл Docker, давайте построим изображение с заголовком с помощью -t:

docker build -t sample-nodejs-app .

Это выведет хэши и буквенно-цифровые строки, идентифицирующие контейнеры и изображения с надписью «Успешно построено» в последней строке:

Sending build context to Docker daemon  1.966MB
Step 1/7 : FROM node:6-alpine
 ---> 998971a692ca
Step 2/7 : RUN mkdir -p /usr/src/app
 ---> Using cache
 ---> f1aa1c112188
Step 3/7 : WORKDIR /usr/src/app
 ---> Using cache
 ---> b4421b83357b
Step 4/7 : COPY . .
 ---> 836112e1d526
Step 5/7 : RUN npm install
 ---> Running in 1c6b36b5381c
npm WARN sample-nodejs-app@1.0.0 No description
npm WARN sample-nodejs-app@1.0.0 No repository field.
Removing intermediate container 1c6b36b5381c
 ---> 93999e6c807f
Step 6/7 : EXPOSE 3000
 ---> Running in 7419020927f1
Removing intermediate container 7419020927f1
 ---> ed4ac8a31f83
Step 7/7 : CMD [ "node", "server.js" ]
 ---> Running in c77d34f4c873
Removing intermediate container c77d34f4c873
 ---> eaf97859f909
Successfully built eaf97859f909

// dont expect the same values from your terminal.

7. Запуск контейнера Docker

Мы создали образ докера. Чтобы просмотреть ранее созданные изображения, запустите:

docker images

Вы должны видеть изображение, которое мы только что создали, как последнее по времени:

1*sQv-4uSIWP645Pp6MQu7Nw

Скопируйте идентификатор изображения. Чтобы запустить контейнер, пишем на терминале:

docker run -p 80:3000 {image-id}

// fill with your image-id

По умолчанию контейнеры Docker могут подключаться к внешнему миру, но внешний мир не может подключаться к контейнерам. -p публикует все открытые порты к интерфейсам хоста. Здесь мы публикуем программу на порт 80:3000. Поскольку мы используем Docker локально, перейдите к просмотру.

1*ODVwlP_G5oIEWlYAxn1bXg

В любой момент вы можете проверить запущенные контейнеры Docker, введя:

docker container ls

Наконец, вы можете остановить запуск контейнера:

docker stop {image-id}

Оставьте демон Docker запущенным.

8. Создайте реестр (ECR) и загрузите в него образ программы

Amazon Elastic Container Registry (ECR) – это полностью управляемый реестр контейнеров Docker, облегчающий разработчикам хранение, управление и развертывание образов контейнеров Docker. Amazon ECR встроен в Amazon Elastic Container Service (ECS), что упрощает процесс разработки до производства.

Ключевое слово «Эластичный» означает, что вы можете масштабировать емкость или уменьшать ее по желанию.

Ступени:

  1. Выделите консоль AWS и войдите.
  2. Выберите службу контейнера EC2 и Начать
1*QTkFrTPFM9PfMGLUgpBR_g

3. Откроется страница первого запуска, прокрутите вниз и нажмите «Отмена» > Войти в панель инструментов ECS.

4. Чтобы убедиться, что ваш CLI может подключиться к вашей учетной записи AWS, запустите на терминале:

aws configure

Если ваш AWS CLI был установлен правильно, aws настроить попросит следующее:

$ aws configure
AWS Access Key ID [None]: accesskey
AWS Secret Access Key [None]: secretkey
Default region name [None]: us-west-2
Default output format [None]:

Получите учетные данные безопасности из аккаунта AWS под своим именем пользователя > Ключи доступа. Рun aws configснова и заполните правильно.

4. Создайте новое хранилище и введите название (желательно с таким же названием контейнера, что и в вашей локальной среде разработчиков для согласованности).

Например, использовать sample-nodejs-app.

1*edZ_NxhuQUADW8KGUupAfA

Следуйте 5 инструкциям из консоли AWS для создания, добавления тегов и отправки изображений Docker:

Примечание: Приведенные ниже аргументы мои и будут отличаться от ваших, поэтому просто выполните действия, описанные на вашей консоли.

  1. Получите команду входа в Docker, которую можно использовать для аутентификации клиента Docker в своем реестре:
    Примечание: Если вы получаете ошибку «Неизвестные настройки: — no-include-email», установите последнюю версию AWS CLI. Узнайте больше здесь.
aws ecr get-login --no-include-email --region us-east-2

2. Запустите docker login команда что было возвращено на предыдущем шаге (просто скопируйте и вставьте). Примечание: Если вы используете Windows PowerShell, выполните следующую команду:

Invoke-Expression -Command (aws ecr get-login --no-include-email --region us-east-2)

Он должен вывести: Вход успешно.

3. Создайте образ Docker, используя следующую команду. Для получения информации о создании файла Docker с нуля просмотрите инструкции здесь. Этот шаг можно пропустить, поскольку наше изображение уже создано:

docker build -t sample-nodejs-app .

4. После завершения сборки отметьте изображение ключевым словом (например, последний), чтобы вы могли переместить изображение в это хранилище:

docker tag sample-nodejs-app:latest 559908478199.dkr.ecr.us-east-2.amazonaws.com/sample-nodejs-app:latest

5. Выполните такую ​​команду, чтобы отправить это изображение в ваше только что созданное хранилище AWS:

docker push 559908478199.dkr.ecr.us-east-2.amazonaws.com/sample-nodejs-app:latest

9. Создайте новое определение задачи

Задания функционируют как docker run команда Docker CLI, но для нескольких контейнеров. Они определяют:

  • Изображение контейнеров (для использования)
  • Объемы (если есть)
  • Переменные среды сетей
  • Отображение портов

от Определение задач на информационной панели ECS нажмите кнопку Создать новое определение задачи (ECS):

1*BVt43mgwmiTAQF9CS0MClg

Установите название задачи и выполните следующие действия.

  • Добавить контейнер: sample-nodejs-app (тот, который мы нажали).
  • Изображение: URL-адрес вашего контейнера. Мой есть 559908478199.dkr.ecr.us-east-2.amazonaws.com/sample-nodejs-app
  • Мягкая граница: 512
  • Карта 80 (хост) до 3000 (контейнер) для sample-nodejs-app
  • Переменные Env:

NODE_ENV: production

10. Создайте кластер

Кластер – это место, где работают контейнеры AWS. Они используют конфигурации, подобные экземплярам EC2. Определите следующее:

  • Название кластера: demo-nodejs-app-cluster
  • Тип экземпляра EC2: t2.micro

(Примечание: Вы выбираете экземпляры на основе размера программы. Здесь мы выбрали самый маленький. Ваш выбор влияет на то, сколько денег вам выставлено в конце месяца. Посетите здесь для получения дополнительной информации. Спасибо Николасу Колацису за то, что предыдущий выбор m4.large был дорогостоящим для этого учебника.

  • Количество случаев: 1
  • Хранилище EBS: 22
  • Пара ключей: нет
  • VPC: Новый

После завершения процесса можно нажать кнопку «Просмотр кластера».

11. Создайте службу для ее запуска

Идти в Определение задачи > нажмите demo-nodejs-app > нажмите последнюю версию.

1*LYPvdqq6UrE1IcaHsfIlcg

В определении задачи щелкните раскрывающееся меню «Действия» и выберите «Создать службу».

Используйте следующее:

  • Тип запуска: EC2
  • Название услуги: demo-nodejs-app-service
  • Количество заданий: 1

Выделите параметры и нажмите Создать сервис и Просмотреть сервис.

1*CLAS96g9wI9cjcZsG8VXIA

Вы увидите его статус как ОЖИДАЕТ. Дайте немного времени, и это укажет БИГ.

Выделите Cluster (через ссылку из только что созданной службы) > экземпляры EC2 > Нажмите на экземпляр контейнера, чтобы открыть общедоступный DNS.

1*G-gaEgSVdKpQNTBYw8517A
1*3nBfFGvKDCP7035goXXpMg

Посетите общедоступный DNS, чтобы просмотреть наше приложение! Мой есть ec2–18–219–113–111.us-east-2.compute.amazonaws.com

1*6P86otsleHPu9xy8w7cYzA

12. Вывод.

Поздравляю с завершением этой публикации! Возьмите код для части Docker из Github.

Не стесняйтесь поддержать меня (devapparel.co) и выглядеть хорошо во время этого. Также прокомментируйте или поделитесь этим постом. Спасибо, что прочли!

Plug: опять же, чтобы получить еще много качественного контента, как этот, посетите блог Zeolearn.

Добавить комментарий

Ваш адрес email не будет опубликован.