Node-RED:Введение/Запуск под Docker: различия между версиями
Myagkij (обсуждение | вклад) |
Myagkij (обсуждение | вклад) Нет описания правки |
||
(не показаны 2 промежуточные версии 1 участника) | |||
Строка 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>= | ||
Строка 31: | Строка 29: | ||
Чтобы запустить контейнер '''«latest»''', воспользуйтесь следующей командой: | Чтобы запустить контейнер '''«latest»''', воспользуйтесь следующей командой: | ||
<syntaxhighlight lang="bash | <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> | ||
Строка 37: | Строка 35: | ||
{{Примечание1|1= Если у вас [[Raspberry Pi]], то вы должны использовать образ с тегом '''«rpi»''': | {{Примечание1|1= Если у вас [[Raspberry Pi]], то вы должны использовать образ с тегом '''«rpi»''': | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
nodered/node-red-docker:rpi | nodered/node-red-docker:rpi | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 48: | Строка 46: | ||
Чтобы снова подключиться к запущенному контейнеру: | Чтобы снова подключиться к запущенному контейнеру: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
docker attach mynodered | docker attach mynodered | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 54: | Строка 52: | ||
Чтобы остановить контейнер: | Чтобы остановить контейнер: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
docker stop mynodered | docker stop mynodered | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 60: | Строка 58: | ||
Чтобы запустить контейнер: | Чтобы запустить контейнер: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
docker start mynodered | docker start mynodered | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 66: | Строка 64: | ||
{{Примечание1|1=Ваши потоки будут сохранены в файл '''«flows.json»''', находящийся в контейнере. Но вы можете задать вместо него другой файл при помощи переменной окружения '''«FLOWS»''': | {{Примечание1|1=Ваши потоки будут сохранены в файл '''«flows.json»''', находящийся в контейнере. Но вы можете задать вместо него другой файл при помощи переменной окружения '''«FLOWS»''': | ||
<syntaxhighlight lang="bash | <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> | ||
Строка 72: | Строка 70: | ||
Переменная окружения '''«NODE_OPTIONS»''' позволяет передать контейнеру аргументы командной строки [[Node.js]]. Например, чтобы задать размер кучи, используемой «сборщиком мусора» [[Node.js]], можно воспользоваться следующей командой: | Переменная окружения '''«NODE_OPTIONS»''' позволяет передать контейнеру аргументы командной строки [[Node.js]]. Например, чтобы задать размер кучи, используемой «сборщиком мусора» [[Node.js]], можно воспользоваться следующей командой: | ||
<syntaxhighlight lang="bash | <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> | ||
Строка 81: | Строка 79: | ||
В качестве папки для настроек пользователя контейнер использует директорию '''«/data»'''. Чтобы добавить в нее дополнительные ноды, вы можете открыть в контейнере командную оболочку [[bash]] и запустить в ней соответствующие команды '''«npm install»'''. | В качестве папки для настроек пользователя контейнер использует директорию '''«/data»'''. Чтобы добавить в нее дополнительные ноды, вы можете открыть в контейнере командную оболочку [[bash]] и запустить в ней соответствующие команды '''«npm install»'''. | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
# Открываем командную оболочку в контейнере: | # Открываем командную оболочку в контейнере: | ||
docker exec -it mynodered /bin/bash | docker exec -it mynodered /bin/bash | ||
Строка 100: | Строка 98: | ||
Путь к директории '''«/data»''' можно монтировать на внешний том: | Путь к директории '''«/data»''' можно монтировать на внешний том: | ||
<syntaxhighlight lang="bash | <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> | ||
Строка 108: | Строка 106: | ||
Чтобы добавить в контейнер дополнительные ноды, запустите на компьютере-хосте следующие команды: | Чтобы добавить в контейнер дополнительные ноды, запустите на компьютере-хосте следующие команды: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
cd ~/node-red-data | cd ~/node-red-data | ||
npm install node-red-node-smooth | npm install node-red-node-smooth | ||
Строка 124: | Строка 122: | ||
Чтобы собрать собственную версию, воспользуйтесь вот этими командами: | Чтобы собрать собственную версию, воспользуйтесь вот этими командами: | ||
<syntaxhighlight lang="bash | <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 | ||
Строка 138: | Строка 136: | ||
===Создаем файл под названием «Dockerfile» со следующим содержимым:=== | ===Создаем файл под названием «Dockerfile» со следующим содержимым:=== | ||
<syntaxhighlight lang="bash | <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 | ||
Строка 145: | Строка 143: | ||
===Запускаем команду ниже, чтобы собрать образ:=== | ===Запускаем команду ниже, чтобы собрать образ:=== | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
docker build -t mynodered:<tag> . | docker build -t mynodered:<tag> . | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 155: | Строка 153: | ||
Обновление базового образа контейнера делается очень просто: | Обновление базового образа контейнера делается очень просто: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
docker pull nodered/node-red-docker | docker pull nodered/node-red-docker | ||
docker stop mynodered | docker stop mynodered | ||
Строка 167: | Строка 165: | ||
К примеру, если вам нужно, чтобы ваш контейнер с [[Node-RED]] и контейнер с [[MQTT-брокер]]ом под названием '''«mybroker»''' безопасно обменивались информацией, вам нужно запустить этот контейнер с [[Node-RED]] вместе с флагом '''«--link»''': | К примеру, если вам нужно, чтобы ваш контейнер с [[Node-RED]] и контейнер с [[MQTT-брокер]]ом под названием '''«mybroker»''' безопасно обменивались информацией, вам нужно запустить этот контейнер с [[Node-RED]] вместе с флагом '''«--link»''': | ||
<syntaxhighlight lang="bash | <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> | ||
Строка 173: | Строка 171: | ||
Эта команда сделает '''«broker»''' известным именем хоста внутри контейнера [[Node-RED]], благодаря чему это имя хоста можно будет использовать для доступа к сервису внутри потока – без необходимости демонстрировать его за пределами [[Docker-хост]]а. | Эта команда сделает '''«broker»''' известным именем хоста внутри контейнера [[Node-RED]], благодаря чему это имя хоста можно будет использовать для доступа к сервису внутри потока – без необходимости демонстрировать его за пределами [[Docker-хост]]а. | ||
<syntaxhighlight lang="javascript | <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> |
Текущая версия от 22:50, 22 сентября 2023
Запуск под Docker[1]
Есть несколько способов запуска Node-RED под Docker, и мы в этом руководстве опишем некоторые из них.
Контейнерные версии Node-RED
Мы разместили в DockerHub три контейнерные версии Node-RED со следующими тегами:
- latest – использует официальный базовый образ Node.js v4
- slim – использует базовый образ Alpine Linux
- rpi – использует RPi-совместимый базовый образ
Использование 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
Команда выше загрузит из 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
Добавление новых нод
В качестве папки для настроек пользователя контейнер использует директорию «/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
Сборка контейнера из исходного кода
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":[]}]
См.также
Внешние ссылки