Вступ:
Ця стаття є покроковим посібником, як докеризувати Node.js додаток та розгорнути Docker-образ на Elastic Beanstalk. Я використаю простий додаток Hello World, який можна надалі розширити для реалізації складнішого додатку.
Для зручності розуміння я розділив статтю на дві частини. У першій частині ми запустимо простий додаток Hello World і докеризуємо цей додаток, а в другій частині ми розгорнемо образ з DockerHub на Elastic Beanstalk.
Я припускаю, що читач уже має базові знання про Node.js, Docker та деякі базові команди Linux.
Огляд:
- Спочатку створимо простий Node.js додаток і запустимо його локально.
- Напишемо Dockerfile для докеризації локально працюючого Node.js додатка.
- Завантажимо Docker-образ на DockerHub
- Створимо інфраструктуру Elastic Beanstalk для Docker-середовища
- Розгорнемо Docker-образ на Elastic Beanstalk.
Передумови:
Якщо ви хочете реалізувати кроки разом зі мною, вам потрібні наступні речі;
1. Обліковий запис AWS
2. Обліковий запис DockerHub
3. Встановлений Node.js на вашій машині
4. Встановлений Docker
1. Створення простого Node.js додатка:
Давайте перейдемо до практичних кроків, для цього відкрийте термінал і виконайте наступні команди;
mkdir my-nodejs-app
cd my-nodejs-app
Перша команда створить директорію з назвою my-nodejs-app, а друга перенесе вас всередину цієї директорії.
Створіть файл server.js всередині my-nodejs-app
Тепер час встановити необхідні залежності, для цього виконайте наступну команду:
npm install
Це завантажить залежності, визначені в файлі package.json, і створить інший файл package-lock.json всередині директорії.
Тепер все готово, ми можемо запустити Node.js додаток локально за допомогою наступної команди:
node server.js
Якщо ви все налаштували правильно, ви отримаєте повідомлення з URL-адресою, як показано нижче:
Running on http://127.0.0.1/8080
Вставивши URL у браузер, ви побачите повідомлення, скріншот також додається.
Welcome to my DevOps Labs
Для того, щоб докеризувати працюючий Node.js додаток, нижче наведено Dockerfile, просто скопіюйте вміст і вставте його у вашу директорію.
Тепер час створити Docker-образ з Dockerfile:
docker build -t auasad/web-app .
Вище наведена команда прочитає Dockerfile і створить Docker-образ з ім'ям auasad/web-app в поточній директорії. Точка (.) в кінці команди вказує на створення образу в поточному місці.
Якщо образ створено, просто введіть наступну команду:
docker image ls
Всі образи будуть відображені, і ми зможемо знайти той, який ми щойно створили з іменем, auasad/web-app.
Тепер давайте запустимо Docker-образ і подивимося, що відбувається. Щоб запустити образ, введіть команду:
docker run -p 8080:8080 -d auasad/web-app
Тут,
-p : для зв'язування внутрішнього порту працюючого контейнера з зовнішнім портом
-d : для запуску контейнера в демон-режимі.
8080:8080 зв'язує зовнішній порт з портом всередині контейнера. Щоб запам'ятати, думайте як internal:external, де auasad/web-app — це ім'я образу, з якого буде запущений контейнер.
Знову введіть наступну URL-адресу в браузері:
http://127.0.0.1:8080
Це знову відобразить те ж саме повідомлення в браузері, але цього разу з Docker, а не локально.
Docker-образ успішно створено і запущено, тепер час завантажити образ на онлайн-репозиторій DockerHub. Для цього нам потрібен обліковий запис на hub.docker.com.
Завантаження образу на DockerHub:
Для цього нам потрібен обліковий запис на hub.docker.com, якщо у вас немає облікового запису, ви можете створити його тут.
Після створення облікового запису виконайте наступні кроки для створення репозиторію для вашого образу:
Натисніть на вищезгадану кнопку та слідуйте інструкціям на наступному зображенні.
Тепер нам потрібно завантажити наш Docker-образ в репозиторій auasad/web-app на hub.docker.com. Для цього потрібно увійти в систему, ми використаємо наступну команду для входу через термінал:
docker login
Це запитає ім'я користувача та пароль. Після введення облікових даних введіть команду для завантаження образу в репозиторій:
docker push auasad/web-app
Коли образ буде успішно завантажено, ми побачимо його в репозиторії, нижче наведено скріншот завантаженого образу.
образ завантажено з тегом latest.
Це зроблено для першої частини, в наступній частині цієї статті ми подивимося, як розгорнути цей образ на Elastic Beanstalk.
Перекладено з: How to deploy Node.js docker image to Elastic Beanstalk Part 1