Docker контейнер для проекта на NodeJS

В Docker NodeJS приложения разворачиваются одной командой из Dockerfile. Все, что требуется — файлы проекта и установленный на сервере Docker.

Docker NodeJS приложения

Создаем Dockerfile, в котром будет задаваться последовательность команд. Dockerfile позволит автоматизировать процесс и не выполнять все команды поочередно в консоли.

mcedit Dockerfile

FROM node:6
RUN mkdir -p /var/project
COPY /home/myrepo/ /var/project
WORKDIR /var/project
RUN npm install --production
ENV PORT 3000
EXPOSE $PORT
CMD ["npm", "start"]

Содержимое файла. За основу берется образ node с dockerhub.

Под проект подготавливаем каталог. Создаем его (RUN mkdir -p в Dockerfile, затем копируем содержимое из директории /home/myrepo/. И назначаем каталог рабочим указывая его как WORKDIR.

После этого устанавливаем зависимости npm install —production (они как для любого проекта на NodeJS заданы в файле package.json в WORKDIR)

Определяем порт, пробрасываем его вовне контейнера и запускаем приложение через npm start

Это все, что требуется. Собираем контейнер задавая имя my-node

docker build -t my-node .

Точка в конце говорит о том, что использовать нужно Dockerfile в текущем каталоге

Затем запускаем обращаясь к контейнеру по имени

docker run my-node

Если приложение должно работать в Production и быть доступно пользователям — также требуется создать контейнер с каким-либо веб-сервером. Обычно это Nginx. И перенаправлять запросы с 80 и 443 портов на порт 3000 на котором запускается NodeJS.

Сборку контейнера Nginx тоже лучше выполнять через Dockerfile, но можно собирать контейнер и в консоли (пример).

Принципы управления Docker контейнерами разобраны в отдельной статье.