Предварительные условия
- Node
- npm
- Docker
1. Создание приложения node.js
Сначала создадим простое приложение node.js(express), чтобы начать работу с express.
Создайте проект, выполнив npm init -y, и скопируйте и вставьте следующие строки в файл package.json.
{
“name”: “heroku_docker”,
“version”: “1.0.0”,
“description”: “Deploy Dockerized NodeJS Image app on Heroku”,
“main”: “index.js”,
“scripts”: {
“start”: “node index.js”,
“dev”: “nodemon index.js”
},
“author”: “”,
“license”: “ISC”,
“dependencies”: {
"dotenv": "^16.0.0",
"express": "^4.18.1",
"nodemon": "^2.0.16"
}
}
Создайте файл с именем index.js, который будет нашим экспресс-приложением, и добавьте следующие строки.
const express = require("express");
require("dotenv").config();
const PORT = process.env.PORT || 3000;
const app = express();
app.use("/", (req, res, next) => {
res.send("Node JS backend is running");
});
app.listen(PORT, () => {
console.log(`Server is listing on PORT : ${PORT}`);
});
Создайте файл .env и добавьте PORT
PORT=3000
Теперь попробуем запустить наше приложение в терминале,
$ npm install
$ npm start
Откройте браузер и введите localhost:3000
2. Настройка Dockerfile
Следующим шагом будет создание Dockerfile.
Если вы еще не установили docker в своей системе, зайдите сюда, чтобы скачать его.
Dockerfile: вы можете считать Dockerfile квитанцией — он содержит инструкции по созданию образа Docker.
Образ Docker: результат выполнения Dockerfile — это запускаемая единица.
Добавьте следующее в Dockerfile
FROM node:alpine
# CREATE APP DIRECTORY
RUN mkdir -p /app
WORKDIR /app
# INSTALL DEPENDENCIES
COPY package*.json ./
RUN npm install
COPY . .
# Exports
EXPOSE 3000
CMD ["npm","start"]
FROM node:alpine
— Из узла базового образа, с вариантом alpine.
WORKDIR
— Мы указываем, что в директории под названиемapp
будет храниться наш проект. Если указанный каталог не существует в образе, он будет создан заново.
COPY package*.json ./
— Мы копируем наши package.json и package-lock.json в наш рабочий каталог.
RUN npm install
— Эта команда устанавливает зависимости, упомянутые в нашем package.json.
CMD ["npm", "start"]
— Выполняетnpm start
, которая является командой для запуска нашего приложения.
3. Войдите в Heroku и создайте приложение
Выполните следующие команды для входа в Heroku и создания приложения на Heroku. Скопируйте название приложения Heroku.
$ heroku login
$ heroku container:login
$ heroku create
4. Соберите образ с помощью Dockerfile
Находясь в каталоге проекта, выполните следующую команду.
$ docker build -t registry.heroku.com/<HEROKU_APP_NAME>/web .
e.g docker build -t registry.heroku.com/heroku-docker01/web .
$ docker push registry.heroku.com/<HEROKU_APP_NAME>/web
e.g docker push registry.heroku.com/heroku-docker01/web
$ heroku container:release web -a <HEROKU_APP_NAME>
e.g heroku container:release web -a heroku-docker01
После выхода Image на heroku app нажмите на open app в heroku.
Github repo — https://github.com/Abdullah0332/heroku-docker
Счастливого обучения!!!