
Содержание статьи
Эммануэль Юсуфу

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. Предпосылки
Для выполнения этого руководства вам понадобится следующее:
- Узел и Npm: перейдите по этой ссылке, чтобы установить последние версии.
- Базовые знания Node.js.
- Docker: установка предоставляет Docker Engine, клиент Docker CLI и другие интересные вещи. Следуйте инструкциям для вашей операционной системы. Чтобы проверить, сработала ли установка, запустите это на терминале:
docker --version
Команда выше должна отображать номер версии. Если это не так, установка не завершилась должным образом.
4. Учетная запись AWS: Подпишитесь на бесплатный уровень Существует период ожидания для подтверждения телефонного номера и банковской карты. После этого вы получите доступ к консоли.
5. AWS CLI: следуйте инструкциям для вашей операционной системы. Вам нужно установить Python.
3. Краткое руководство по Docker и AWS
Docker — это программное обеспечение с открытым исходным кодом, позволяющее упаковать программу вместе с необходимыми зависимостями и средой в «контейнер», который вы можете отправлять и запускать куда угодно. Он не зависит от платформ или аппаратного обеспечения, поэтому контейнерная программа может работать в любой среде изолированно.
Контейнеры Docker решают много проблем, например, когда приложение работает на компьютере коллеги, но не работает на вашем, или он работает в локальной среде разработки, но не работает, когда вы разворачиваете его на сервере.

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:
- Используйте а простой базовый образ ОС (например, ОС Ubuntu, Debian, CentOS и т.д.) и установите в нем среду программы, например Node.js ИЛИ
- Используйте 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
Вы должны видеть изображение, которое мы только что создали, как последнее по времени:

Скопируйте идентификатор изображения. Чтобы запустить контейнер, пишем на терминале:
docker run -p 80:3000 {image-id}
// fill with your image-id
По умолчанию контейнеры Docker могут подключаться к внешнему миру, но внешний мир не может подключаться к контейнерам. -p
публикует все открытые порты к интерфейсам хоста. Здесь мы публикуем программу на порт 80:3000. Поскольку мы используем Docker локально, перейдите к просмотру.

В любой момент вы можете проверить запущенные контейнеры 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), что упрощает процесс разработки до производства.
Ключевое слово «Эластичный» означает, что вы можете масштабировать емкость или уменьшать ее по желанию.
Ступени:
- Выделите консоль AWS и войдите.
- Выберите службу контейнера EC2 и Начать

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
.

Следуйте 5 инструкциям из консоли AWS для создания, добавления тегов и отправки изображений Docker:
Примечание: Приведенные ниже аргументы мои и будут отличаться от ваших, поэтому просто выполните действия, описанные на вашей консоли.
- Получите команду входа в 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):

Установите название задачи и выполните следующие действия.
- Добавить контейнер: 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 > нажмите последнюю версию.

В определении задачи щелкните раскрывающееся меню «Действия» и выберите «Создать службу».
Используйте следующее:
- Тип запуска: EC2
- Название услуги: demo-nodejs-app-service
- Количество заданий: 1
Выделите параметры и нажмите Создать сервис и Просмотреть сервис.

Вы увидите его статус как ОЖИДАЕТ. Дайте немного времени, и это укажет БИГ.
Выделите Cluster (через ссылку из только что созданной службы) > экземпляры EC2 > Нажмите на экземпляр контейнера, чтобы открыть общедоступный DNS.


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

12. Вывод.
Поздравляю с завершением этой публикации! Возьмите код для части Docker из Github.
Не стесняйтесь поддержать меня (devapparel.co) и выглядеть хорошо во время этого. Также прокомментируйте или поделитесь этим постом. Спасибо, что прочли!
Plug: опять же, чтобы получить еще много качественного контента, как этот, посетите блог Zeolearn.