В этой статье показано, как развернуть приложение Node в контейнере Docker.
Примечание. В этом руководстве предполагается, что Docker установлен и готов к использованию.
Шаг 1. Создайте приложение Node
Создайте каталог с именем src. Мы будем использовать этот каталог. Создайте файл с именем, src/package.jsonсодержащим следующее:
{
  "name": "hello_world",
  "private": true,
  "version": "0.0.1",
  "description": "Hello world Example",
  "author": "",
  "dependencies": {
        "express": "3.2.4"
   }
}
Теперь создайте содержимое, src/index.jsсодержащее следующее:
var express = require('express');
var app = express();
app.get('/', function (req, res) {
    res.send('Hello from Docker\n');
});
app.listen(8080);
console.log('Running on http://localhost:8080');
Пожалуйста, знайте, что вы можете изменить порт 8080на любое другое, но в этом примере мы будем использовать этот порт для нашего приложения. Создав эти два файла, вы можете перейти к следующему шагу.
Шаг 2: Создайте Dockerfile
«Dockerfile» позволяет создавать и развертывать образы Docker на основе набора инструкций, которые вы в нем предоставили. Создайте файл с именем Dockerfileи заполните его следующим содержимым:
FROM centos:latest
MAINTAINER Name Here <username@localhost>
RUN rpm -Uvh http://mirror.pnl.gov/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
RUN yum install nodejs npm -y 
COPY ./src /opt/src
RUN cd /opt/src; npm install
EXPOSE 8080
CMD ["node", "/opt/src/index.js"]
Объяснение: 
FROM centos:latest
Это будет использовать изображение под названием centos. Если на вашем хосте нет образа, Docker извлечет его из своего хранилища.
MAINTAINER Name Here <username@localhost>
Эта инструкция позволяет установить автора для создаваемого изображения.
RUN rpm -Uvh http://mirror.pnl.gov/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
RUN yum install nodejs npm -y
…
RUN cd /opt/src; npm install
«RUN» выполнит указанные команды оболочки. В этом примере он загрузит rpm-версию epel и установит ее, а также установит nodejs и npm из своего репозитория. После следующей операции он перейдет в каталог проекта и запустит npm installустановку зависимостей для вашего приложения.
COPY ./src /opt/src
Скопируйте каталог (и файлы) с хоста в контейнер. 
EXPOSE 8080
Откройте порт 8080 для использования внешним миром. 
CMD ["node", "/opt/src/index.js"]
CMD обеспечит выполнение по умолчанию для контейнера. 
После того, как вы создали файл именно так, как показано выше, вы можете перейти к следующему шагу.
Шаг 3: Построить образ
Чтобы создать свой образ, выполните следующую команду: 
docker build -t name/application .
Это создаст изображение с именем хранилища name/application. Если ошибок нет, вы можете перейти к следующему шагу.
Шаг 4. Разверните и протестируйте приложение
Теперь, когда все настроено, вы можете запустить свой образ, выполнив следующее:
docker run -p 49160:8080 -d name/application
Чтобы протестировать ваше приложение, выполните следующую команду с хоста:
curl http://172.17.42.1:49160/ 
Если вы видите, Hello from Dockerто вы успешно развернули свой образ Docker. Если вы хотите проверить это с помощью своего браузера, зайдите http://[SERVER_IP]:49160в браузер (замените IP-адрес соответствующим образом), и вы увидите то же сообщение.