Если ваш опыт разработки компьютерных программ был чем-то похож на мой, вы, несомненно, выпалили: «…но это сработало на моей машине!» в бешеной панике, когда ваше приложение катится к гибели. Решением этого общего кошмара является контейнеризация! Это позволяет разработчику объединить приложение с его соответствующими зависимостями в единый модуль или «контейнер» и развернуть его в разных средах и платформах. В этой статье я расскажу вам, как контейнеризировать простое приложение NodeJS с помощью популярного инструмента контейнеризации Docker.

Во-первых, давайте создадим простой REST API NodeJS:

Создайте простой файл javascript с именем app.js, который может прослушивать определенный порт и выводить «Hello World!» (Вы можете использовать любой текстовый редактор, но я рекомендую Visual Studio Code)

const express = require("express");
const app = express();
app.get("/", (req, res) => res.send("Hello World!"));
app.listen(8000, () => {
  console.log("REST API running on port 8000!");
});

Запустите npm init в терминале, и вы увидите созданный файл package.json. Когда у вас появится работающий API, скачайте Docker для своей платформы по ссылке здесь. Следуйте инструкциям по установке и запустите приложение.

Создайте новый файл с именем «Dockerfile» и добавьте его в корень каталога вашего проекта. Добавьте в файл следующее:

FROM node:9-slim
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
CMD ["npm", "start"]

Введите команду «docker build -t your-image-name». и он создаст полный образ докера. Из этого образа начинаем раскручивать контейнеры следующей командой:

docker run -it -p 9000:8000 your-image-name

Чтобы автоматически прослушивать изменения в вашем коде и создавать приложение, мы будем использовать «nodemon», выполнив команду терминала «npm install — save nodemon», которая явно добавляет «nodemon» в качестве зависимости в наш package.json. Теперь снова создайте образ докера с помощью команды:

docker build -t your-image-name .

Теперь наш образ докера будет иметь встроенный «nodemon». Запустим еще один контейнер с помощью команды:

docker run -it -p 9001:8000 -v $(pwd):/app your-image-name

Подтвердите вышеуказанное изменение, изменив свой код и сохранив его. Если все пойдет хорошо, приложение автоматически перестроится. На данный момент у вас есть два контейнера Docker, сопоставленные с портами 9000 и 9001, содержащие две версии вашего API, и вам больше не нужно беспокоиться о зависимостях или переменных среды!

Поздравляем! Вы успешно контейнеризировали простой REST API NodeJS с помощью Docker.