Node-RED:Введение/Запуск под Docker: различия между версиями
Myagkij (обсуждение | вклад) |
Myagkij (обсуждение | вклад) |
||
Строка 183: | Строка 183: | ||
<references /> | <references /> | ||
{{Навигационная таблица/Node-RED библиотеки}} | |||
{{Навигационная таблица/Телепорт}} |
Версия от 18:02, 6 мая 2022
Черновик |
Запуск под Docker[1]
Есть несколько способов запуска Node-RED под Docker, и мы в этом руководстве опишем некоторые из них.
Примечание: Это руководство написано с прицелом на то, что у вас уже есть базовые знания о Docker и командной строке 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
Примечание: Если у вас 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":[]}]
См.также
Внешние ссылки
- Страницы с устаревшим атрибутом подсветки синтаксиса «enclose»
- Справочник Node-RED
- Справочник по Node-RED
- Node-RED
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Черновик
- Надо доработать
- Черновой вариант статьи
- Черновой вариант
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом