Node-RED:Введение/Запуск под Docker: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
 
Нет описания правки
 
(не показано 6 промежуточных версий 2 участников)
Строка 2: Строка 2:
{{Перевод от Сubewriter}}
{{Перевод от Сubewriter}}
{{Myagkij-редактор}}
{{Myagkij-редактор}}
{{Черновик}}


=Запуск под Docker<ref>[https://nodered.org/docs/platforms/docker nodered.org - Running under Docker]</ref>=
=Запуск под Docker<ref>[https://nodered.org/docs/platforms/docker nodered.org - Running under Docker]</ref>=
Строка 9: Строка 7:
Есть несколько способов запуска [[Node-RED]] под [[Docker]], и мы в этом руководстве опишем некоторые из них.
Есть несколько способов запуска [[Node-RED]] под [[Docker]], и мы в этом руководстве опишем некоторые из них.


'''Примечание:''' Это руководство написано с прицелом на то, что у вас уже есть базовые знания о [[Docker]] и [https://docs.docker.com/engine/reference/commandline/cli/ командной строке Docker].
{{Примечание1|1=Это руководство написано с прицелом на то, что у вас уже есть базовые знания о [[Docker]] и [https://docs.docker.com/engine/reference/commandline/cli/ командной строке Docker].}}


== Контейнерные версии Node-RED ==
== Контейнерные версии Node-RED ==
Строка 31: Строка 29:
Чтобы запустить контейнер '''«latest»''', воспользуйтесь следующей командой:
Чтобы запустить контейнер '''«latest»''', воспользуйтесь следующей командой:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
docker run -it -p 1880:1880 --name mynodered nodered/node-red-docker
docker run -it -p 1880:1880 --name mynodered nodered/node-red-docker
</syntaxhighlight>
</syntaxhighlight>


'''Примечание:''' Если у вас [[Raspberry Pi]], то вы должны использовать образ с тегом '''«rpi»''':  
{{Примечание1|1= Если у вас [[Raspberry Pi]], то вы должны использовать образ с тегом '''«rpi»''':  


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
nodered/node-red-docker:rpi
nodered/node-red-docker:rpi
</syntaxhighlight>
</syntaxhighlight>
}}


Команда выше загрузит из [[DockerHub]] контейнер '''«nodered/node-red-docker»''' и запустит его экземпляр под названием '''«mynodered»''' с открытым портом 1880. Запуск [[Node-RED]] будет показан в окне терминала. Когда [[Node-RED]] будет запущен, вы можете ввести в адресную строку браузера '''«http://{ip-адрес-хоста}:1880»''', чтобы открыть редактор [[Node-RED]].
Команда выше загрузит из [[DockerHub]] контейнер '''«nodered/node-red-docker»''' и запустит его экземпляр под названием '''«mynodered»''' с открытым портом 1880. Запуск [[Node-RED]] будет показан в окне терминала. Когда [[Node-RED]] будет запущен, вы можете ввести в адресную строку браузера '''«http://{ip-адрес-хоста}:1880»''', чтобы открыть редактор [[Node-RED]].
Строка 47: Строка 46:
Чтобы снова подключиться к запущенному контейнеру:
Чтобы снова подключиться к запущенному контейнеру:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
docker attach mynodered
docker attach mynodered
</syntaxhighlight>
</syntaxhighlight>
Строка 53: Строка 52:
Чтобы остановить контейнер:
Чтобы остановить контейнер:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
docker stop mynodered
docker stop mynodered
</syntaxhighlight>
</syntaxhighlight>
Строка 59: Строка 58:
Чтобы запустить контейнер:
Чтобы запустить контейнер:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
docker start mynodered
docker start mynodered
</syntaxhighlight>
</syntaxhighlight>


{{Примечание1|1=Ваши потоки будут сохранены в файл '''«flows.json»''', находящийся в контейнере. Но вы можете задать вместо него другой файл при помощи переменной окружения '''«FLOWS»''':


{{Спойлер|
<syntaxhighlight lang="bash">
'''Примечание:''' Ваши потоки будут сохранены в файл '''«flows.json»''', находящийся в контейнере. Но вы можете задать вместо него другой файл при помощи переменной окружения '''«FLOWS»''':
 
<syntaxhighlight lang="bash" enclose="div">
docker run -it -p 1880:1880 -e FLOWS=my_flows.json nodered/node-red-docker
docker run -it -p 1880:1880 -e FLOWS=my_flows.json nodered/node-red-docker
</syntaxhighlight>
</syntaxhighlight>
Строка 73: Строка 70:
Переменная окружения '''«NODE_OPTIONS»''' позволяет передать контейнеру аргументы командной строки [[Node.js]]. Например, чтобы задать размер кучи, используемой «сборщиком мусора» [[Node.js]], можно воспользоваться следующей командой:
Переменная окружения '''«NODE_OPTIONS»''' позволяет передать контейнеру аргументы командной строки [[Node.js]]. Например, чтобы задать размер кучи, используемой «сборщиком мусора» [[Node.js]], можно воспользоваться следующей командой:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
docker run -it -p 1880:1880 -e FLOWS=my_flows.json nodered/node-red-docker
docker run -it -p 1880:1880 -e FLOWS=my_flows.json nodered/node-red-docker
</syntaxhighlight>
</syntaxhighlight>
Строка 82: Строка 79:
В качестве папки для настроек пользователя контейнер использует директорию '''«/data»'''. Чтобы добавить в нее дополнительные ноды, вы можете открыть в контейнере командную оболочку [[bash]] и запустить в ней соответствующие команды '''«npm install»'''.
В качестве папки для настроек пользователя контейнер использует директорию '''«/data»'''. Чтобы добавить в нее дополнительные ноды, вы можете открыть в контейнере командную оболочку [[bash]] и запустить в ней соответствующие команды '''«npm install»'''.


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
# Открываем командную оболочку в контейнере:
# Открываем командную оболочку в контейнере:
docker exec -it mynodered /bin/bash
docker exec -it mynodered /bin/bash
Строка 101: Строка 98:
Путь к директории '''«/data»''' можно монтировать на внешний том:
Путь к директории '''«/data»''' можно монтировать на внешний том:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
docker run -it -p 1880:1880 -v ~/node-red-data:/data --name mynodered nodered/node-red-docker
docker run -it -p 1880:1880 -v ~/node-red-data:/data --name mynodered nodered/node-red-docker
</syntaxhighlight>
</syntaxhighlight>
Строка 109: Строка 106:
Чтобы добавить в контейнер дополнительные ноды, запустите на компьютере-хосте следующие команды:
Чтобы добавить в контейнер дополнительные ноды, запустите на компьютере-хосте следующие команды:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
cd ~/node-red-data
cd ~/node-red-data
npm install node-red-node-smooth
npm install node-red-node-smooth
Строка 117: Строка 114:




{{Спойлер|'''Примечание:''' Модули с нативными зависимостями будут скомпилированы на архитектуре компьютера-хоста. Эти модули не будут работать внутри контейнера [[Node-RED]], разве что его архитектура не будет соответствовать архитектуре базового образа контейнера. Поэтому рекомендуем либо устанавливать нативные модули при помощи локальной командной оболочки, либо обновлять '''«package.json»''' и делать пересборку.}}
{{Примечание1|Модули с нативными зависимостями будут скомпилированы на архитектуре компьютера-хоста. Эти модули не будут работать внутри контейнера [[Node-RED]], разве что его архитектура не будет соответствовать архитектуре базового образа контейнера. Поэтому рекомендуем либо устанавливать нативные модули при помощи локальной командной оболочки, либо обновлять '''«package.json»''' и делать пересборку.}}


== Сборка контейнера из исходного кода ==
== Сборка контейнера из исходного кода ==
Строка 125: Строка 122:
Чтобы собрать собственную версию, воспользуйтесь вот этими командами:
Чтобы собрать собственную версию, воспользуйтесь вот этими командами:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
git clone https://github.com/node-red/node-red-docker.git
git clone https://github.com/node-red/node-red-docker.git
cd node-red-docker
cd node-red-docker
Строка 139: Строка 136:
===Создаем файл под названием «Dockerfile» со следующим содержимым:===
===Создаем файл под названием «Dockerfile» со следующим содержимым:===


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
FROM nodered/node-red-docker
FROM nodered/node-red-docker
RUN npm install node-red-node-wordpos
RUN npm install node-red-node-wordpos
Строка 146: Строка 143:
===Запускаем команду ниже, чтобы собрать образ:===
===Запускаем команду ниже, чтобы собрать образ:===


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
docker build -t mynodered:<tag> .
docker build -t mynodered:<tag> .
</syntaxhighlight>
</syntaxhighlight>
Строка 156: Строка 153:
Обновление базового образа контейнера делается очень просто:
Обновление базового образа контейнера делается очень просто:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
docker pull nodered/node-red-docker
docker pull nodered/node-red-docker
docker stop mynodered
docker stop mynodered
Строка 168: Строка 165:
К примеру, если вам нужно, чтобы ваш контейнер с [[Node-RED]] и контейнер с [[MQTT-брокер]]ом под названием '''«mybroker»''' безопасно обменивались информацией, вам нужно запустить этот контейнер с [[Node-RED]] вместе с флагом '''«--link»''':
К примеру, если вам нужно, чтобы ваш контейнер с [[Node-RED]] и контейнер с [[MQTT-брокер]]ом под названием '''«mybroker»''' безопасно обменивались информацией, вам нужно запустить этот контейнер с [[Node-RED]] вместе с флагом '''«--link»''':


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
docker run -it -p 1880:1880 --name mynodered --link mybroker:broker nodered/node-red-docker
docker run -it -p 1880:1880 --name mynodered --link mybroker:broker nodered/node-red-docker
</syntaxhighlight>
</syntaxhighlight>
Строка 174: Строка 171:
Эта команда сделает '''«broker»''' известным именем хоста внутри контейнера [[Node-RED]], благодаря чему это имя хоста можно будет использовать для доступа к сервису внутри потока – без необходимости демонстрировать его за пределами [[Docker-хост]]а.
Эта команда сделает '''«broker»''' известным именем хоста внутри контейнера [[Node-RED]], благодаря чему это имя хоста можно будет использовать для доступа к сервису внутри потока – без необходимости демонстрировать его за пределами [[Docker-хост]]а.


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
[{"id":"190c0df7.e6f3f2","type":"mqtt-broker","broker":"broker","port":"1883","clientid":""},{"id":"37963300.c869cc","type":"mqtt in","name":"","topic":"test","broker":"190c0df7.e6f3f2","x":226,"y":244,"z":"f34f9922.0cb068","wires":[["802d92f9.7fd27"]]},{"id":"edad4162.1252c","type":"mqtt out","name":"","topic":"test","qos":"","retain":"","broker":"190c0df7.e6f3f2","x":453,"y":135,"z":"f34f9922.0cb068","wires":[]},{"id":"13d1cf31.ec2e31","type":"inject","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":226,"y":157,"z":"f34f9922.0cb068","wires":[["edad4162.1252c"]]},{"id":"802d92f9.7fd27","type":"debug","name":"","active":true,"console":"false","complete":"false","x":441,"y":261,"z":"f34f9922.0cb068","wires":[]}]
[{"id":"190c0df7.e6f3f2","type":"mqtt-broker","broker":"broker","port":"1883","clientid":""},{"id":"37963300.c869cc","type":"mqtt in","name":"","topic":"test","broker":"190c0df7.e6f3f2","x":226,"y":244,"z":"f34f9922.0cb068","wires":[["802d92f9.7fd27"]]},{"id":"edad4162.1252c","type":"mqtt out","name":"","topic":"test","qos":"","retain":"","broker":"190c0df7.e6f3f2","x":453,"y":135,"z":"f34f9922.0cb068","wires":[]},{"id":"13d1cf31.ec2e31","type":"inject","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":226,"y":157,"z":"f34f9922.0cb068","wires":[["edad4162.1252c"]]},{"id":"802d92f9.7fd27","type":"debug","name":"","active":true,"console":"false","complete":"false","x":441,"y":261,"z":"f34f9922.0cb068","wires":[]}]
</syntaxhighlight>
</syntaxhighlight>
Строка 183: Строка 180:


<references />
<references />
{{Навигационная таблица/Node-RED библиотеки}}
{{Навигационная таблица/Телепорт}}

Текущая версия от 22:50, 22 сентября 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Запуск под Docker[1]

Есть несколько способов запуска Node-RED под Docker, и мы в этом руководстве опишем некоторые из них.

Примечание

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

Контейнерные версии Node-RED

Мы разместили в DockerHub три контейнерные версии Node-RED со следующими тегами:

Использование Alpine Linux позволяет уменьшить размер собранного образа (100 Мб vs 700 Мб), но удаляет стандартные зависимости, требуемые для компиляции нативных модулей. Если вы хотите добавить модули с нативными зависимостями, либо используйте стандартный образ, либо дополните «обезжиренный» образ недостающими пакетами.

Теперь также доступны дополнительные образы, использующие более новый базовый образ Node.js v8. Они имеют следующие теги:

  • v8
  • slim-v8
  • rpi-v8

Кроме того, версии Node-RED тегированы цифровыми названиями, что удобно, если вам нужен Node-RED строго определенной версии: latest:X.Y.Z, slim:X.Y.Z, rpi:X.Y.Z.

Быстрый старт

Чтобы запустить контейнер «latest», воспользуйтесь следующей командой:

docker run -it -p 1880:1880 --name mynodered nodered/node-red-docker
Примечание

Если у вас Raspberry Pi, то вы должны использовать образ с тегом «rpi»:

nodered/node-red-docker:rpi

Команда выше загрузит из DockerHub контейнер «nodered/node-red-docker» и запустит его экземпляр под названием «mynodered» с открытым портом 1880. Запуск Node-RED будет показан в окне терминала. Когда Node-RED будет запущен, вы можете ввести в адресную строку браузера «http://{ip-адрес-хоста}:1880», чтобы открыть редактор Node-RED.

Чтобы контейнер начал работать в фоновом режиме, зажмите  Ctrl , а потом нажмите  P + Q .

Чтобы снова подключиться к запущенному контейнеру:

docker attach mynodered

Чтобы остановить контейнер:

docker stop mynodered

Чтобы запустить контейнер:

docker start mynodered
Примечание

Ваши потоки будут сохранены в файл «flows.json», находящийся в контейнере. Но вы можете задать вместо него другой файл при помощи переменной окружения «FLOWS»:

docker run -it -p 1880:1880 -e FLOWS=my_flows.json nodered/node-red-docker

Переменная окружения «NODE_OPTIONS» позволяет передать контейнеру аргументы командной строки Node.js. Например, чтобы задать размер кучи, используемой «сборщиком мусора» Node.js, можно воспользоваться следующей командой:

docker run -it -p 1880:1880 -e FLOWS=my_flows.json nodered/node-red-docker

Добавление новых нод

В качестве папки для настроек пользователя контейнер использует директорию «/data». Чтобы добавить в нее дополнительные ноды, вы можете открыть в контейнере командную оболочку bash и запустить в ней соответствующие команды «npm install».

# Открываем командную оболочку в контейнере:
docker exec -it mynodered /bin/bash

# Будучи внутри контейнера, используем «npm install»,
# чтобы установить нужные ноды в директорию «/data»:
cd /data
npm install node-red-node-smooth
exit

# Перезапускаем контейнер, чтобы загрузить новые ноды:
docker stop mynodered
docker start mynodered

Хранение данных за пределами контейнера

Путь к директории «/data» можно монтировать на внешний том:

docker run -it -p 1880:1880 -v ~/node-red-data:/data --name mynodered nodered/node-red-docker

Эта команда делает директорию «~/node-red-data» на компьютере-хосте директорией для хранения настроек пользователя внутри контейнера.

Чтобы добавить в контейнер дополнительные ноды, запустите на компьютере-хосте следующие команды:

cd ~/node-red-data
npm install node-red-node-smooth
docker stop mynodered
docker start mynodered


Примечание

Модули с нативными зависимостями будут скомпилированы на архитектуре компьютера-хоста. Эти модули не будут работать внутри контейнера Node-RED, разве что его архитектура не будет соответствовать архитектуре базового образа контейнера. Поэтому рекомендуем либо устанавливать нативные модули при помощи локальной командной оболочки, либо обновлять «package.json» и делать пересборку.

Сборка контейнера из исходного кода

Docker-файлы для всех контейнерных версий Node-RED сопровождаются тут, и у каждой есть своя собственная ветка.

Чтобы собрать собственную версию, воспользуйтесь вот этими командами:

git clone https://github.com/node-red/node-red-docker.git
cd node-red-docker

# Собираем контейнер с нужным тегом:
docker build -f <version>/Dockerfile -t mynodered:<tag>

Сборка собственного образа

Создание нового Docker-образа – с использованием публичных образов Node-RED в качестве базового образа – позволяет установить дополнительные ноды во время процесса сборки.

Создаем файл под названием «Dockerfile» со следующим содержимым:

FROM nodered/node-red-docker
RUN npm install node-red-node-wordpos

Запускаем команду ниже, чтобы собрать образ:

docker build -t mynodered:<tag> .

Это создаст образ Node-RED с нодами «wordpos».

Обновление

Обновление базового образа контейнера делается очень просто:

docker pull nodered/node-red-docker
docker stop mynodered
docker start mynodered

Как связать контейнеры друг с другом

Контейнеры можно связать друг с другом «внутренне» – в среде выполнения Docker – при помощи флага «--link».

К примеру, если вам нужно, чтобы ваш контейнер с Node-RED и контейнер с MQTT-брокером под названием «mybroker» безопасно обменивались информацией, вам нужно запустить этот контейнер с Node-RED вместе с флагом «--link»:

docker run -it -p 1880:1880 --name mynodered --link mybroker:broker nodered/node-red-docker

Эта команда сделает «broker» известным именем хоста внутри контейнера Node-RED, благодаря чему это имя хоста можно будет использовать для доступа к сервису внутри потока – без необходимости демонстрировать его за пределами Docker-хоста.

[{"id":"190c0df7.e6f3f2","type":"mqtt-broker","broker":"broker","port":"1883","clientid":""},{"id":"37963300.c869cc","type":"mqtt in","name":"","topic":"test","broker":"190c0df7.e6f3f2","x":226,"y":244,"z":"f34f9922.0cb068","wires":[["802d92f9.7fd27"]]},{"id":"edad4162.1252c","type":"mqtt out","name":"","topic":"test","qos":"","retain":"","broker":"190c0df7.e6f3f2","x":453,"y":135,"z":"f34f9922.0cb068","wires":[]},{"id":"13d1cf31.ec2e31","type":"inject","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":226,"y":157,"z":"f34f9922.0cb068","wires":[["edad4162.1252c"]]},{"id":"802d92f9.7fd27","type":"debug","name":"","active":true,"console":"false","complete":"false","x":441,"y":261,"z":"f34f9922.0cb068","wires":[]}]

См.также

Внешние ссылки