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