некоторые из них, а также поддерживает несколько архитектур (amd64, arm32v6, arm32v7, arm64v8 и s390x).
Начиная с Node-RED 1.0, репозиторий на Docker Hub был переименован в nodered/node-red.
быстрый старт
Чтобы запустить его в Docker в самом простом виде, просто выполните команду:
docker run -it -p 1880:1880 -v node_red_data:/data -name mynodered nodered/node-red
Давайте разберем эту команду:
docker run - запуск этого контейнера, при необходимости первоначальная сборка локально
-it - подключить терминальную сессию, чтобы мы могли видеть, что происходит
-p 1880:1880 - подключить локальный порт 1880 к открытому внутреннему порту 1880
-v node_red_data:/data - монтирует именованный том docker под названием `node_red_data` в каталог /data контейнера, чтобы все изменения, внесенные в потоки, сохранялись.
-name mynodered - присвоить этой машине дружественное локальное имя
nodered/node-red - образ для основы - в настоящее время Node-RED v1.2.0
Выполнение этой команды приведет к появлению окна терминала с запущенным экземпляром Node-RED.
Добро пожаловать в Node-RED
===================
10 Oct 12:57:10 - [info] Версия Node-RED: v1.2.0
10 Oct 12:57:10 - [info] Версия Node.js: v10.22.1
10 Oct 12:57:10 - [info] Linux 4.19.76-linuxkit x64 LE
10 Oct 12:57:11 - [info] Загрузка узлов палитры
10 Oct 12:57:16 - [info] Файл настроек : /data/settings.js
10 Oct 12:57:16 - [info] Контекстное хранилище : 'default' [module=memory]
10 Oct 12:57:16 - [info] Каталог пользователя : /data
10 Oct 12:57:16 - [warn] Проекты отключены : editorTheme.projects.enabled=false
10 Oct 12:57:16 - [info] Файл потоков : /data/flows.json
10 Oct 12:57:16 - [info] Создание нового файла потока
10 Oct 12:57:17 - [warn]
————————————————– ——————-
Ваш файл учетных данных потока шифруется с помощью генерируемого системой ключа.
Если сгенерированный системой ключ по какой-либо причине будет утерян, ваши учетные данные
файл не удастся восстановить, вам придется удалить его и ввести заново
ваши полномочия.
Вы должны задать свой собственный ключ, используя опцию 'credentialSecret' в
файл настроек. После этого Node-RED повторно зашифрует ваши учетные данные
файл, используя выбранный ключ при следующем развертывании изменений.
————————————————– ——————-
10 Oct 12:57:17 - [info] Запуск потоков
10 Oct 12:57:17 - [info] Запущены потоки
10 Oct 12:57:17 - [info] Сервер сейчас работает по адресу http://127.0.0.1:1880/.
[…]
Затем вы можете перейти по адресу http://{host-ip}:1880, чтобы получить привычный рабочий стол Node-RED.
Преимущество этого заключается в том, что, дав ему имя (mynodered), мы можем легче им управлять, а закрепив его, мы узнаем порт хоста, с которым знакомы. Конечно, это означает, что мы можем запускать только один экземпляр за раз... но только один шаг за раз.
Если нас устраивает то, что мы видим, мы можем переключить терминал с помощью Ctrl-p Ctrl-q-, и контейнер продолжит работать в фоновом режиме.
Чтобы снова подключиться к терминалу (просмотреть журнал), выполните команду:
docker attach mynodered
Если вам нужно перезапустить контейнер (например, после перезапуска или перезапуска демона Docker):
docker start mynodered
и при необходимости остановитесь снова:
docker stop mynodered
Изменения изображения
Образы Node-RED основаны на официальных образах Node JS Alpine Linux, чтобы сделать их как можно меньше. Использование Alpine Linux уменьшает размер собранного образа, но удаляет стандартные зависимости, необходимые для компиляции нативных модулей. Если вы хотите добавить нативные зависимости, расширить образ Node-RED недостающими пакетами в работающем контейнере или собрать новый образ, смотрите docker -custom, который находится в README.md в расширенном проекте Node-RED Docker.
Подробные изображения, теги и информацию о манифесте можно найти в readme проекта на Github.
Например: Предположим, что вы работаете на Raspberry PI 3B с архитектурой arm32v7as. Тогда просто выполните следующую команду, чтобы извлечь образ (с меткой 1.2.0-10-arm32v7) и запустить контейнер.
docker run -it -p 1880:1880 -v node_red_data:/data -name mynodered nodered/node-red:latest
Эту же команду можно использовать для запуска на системе amd64, поскольку Docker обнаруживает, что работает на хосте amd64, и извлекает образ с соответствующим ярлыком (1.2.0-10-amd64).
Преимущество этого заключается в том, что вам не нужно знать/указывать архитектуру, на которой вы работаете, а также в том, что команда docker run и файлы docker compose становятся более гибкими и взаимозаменяемыми в разных системах.
Примечание: В настоящее время существует ошибка в определении архитектуры Docker для arm32v6, таких как Raspberry Pi zero или one. Для этих устройств в настоящее время необходимо указывать полный тег образа, например:
docker run -it -p 1880:1880 -v node_red_data:/data -name mynodered nodered/node-red:1.2.0-10-arm32v6
Управление пользовательскими данными
После запуска Node-RED с помощью Docker нам нужно убедиться, что все добавленные узлы или потоки не будут потеряны в случае уничтожения контейнера. Пользовательские данные можно сохранить, смонтировав каталог данных на том за пределами контейнера. Для этого можно использовать связывающее монтирование или именованные тома данных.
Node-RED использует каталог в контейнере /data для хранения данных конфигурации пользователя.
Использование каталога хоста для сохранения (bind mount)
Чтобы сохранить каталог пользователя Node-RED внутри контейнера в каталог хоста вне контейнера, можно воспользоваться следующей командой. Чтобы разрешить доступ к этому каталогу хоста, пользователь node-red внутри контейнера (по умолчанию uid=1000) должен иметь тот же uid, что и владелец каталога хоста.
docker run -it -p 1880:1880 -v /home/pi/.node-red:/data -name mynodered nodered/node-red
В этом примере каталог хоста /home/pi/.node-red привязан к каталогу контейнера /data.
Примечание: Пользователям, переходящим с версии 0.20 на версию 1.0, необходимо убедиться, что все существующие каталоги /data имеют правильное право собственности. Начиная с версии 1.0 это право должно быть 1000:1000. Это можно сделать с помощью команды sudo chown -R 1000:1000 path/to/your/node-red/data
Подробную информацию о разрешениях см. в вики.
Использование именованных томов данных
Docker также поддерживает использование именованных томов данных для хранения постоянных или общих данных за пределами контейнера.
Создайте новый именованный том данных для хранения пользовательских данных и запустите новый контейнер, используя этот том.
$ docker volume create -name node_red_data
$ docker volume ls
ИМЯ ТОМА ДРАЙВЕРА
local node_red_data
$ docker run -it -p 1880:1880 -v node_red_data:/data -name mynodered nodered/node-red
Если вам нужно создать резервную копию данных с подключенного тома, вы можете получить к нему доступ во время работы контейнера.
$ docker cpmynodered:/data/your/backup/directory
Используя Node-RED для создания и развертывания некоторых примеров процессов, мы теперь можем уничтожить контейнер и запустить новый экземпляр без потери пользовательских данных.
$ docker stop mynodered
$ docker rm mynodered
$ docker run -it -p 1880:1880 -v node_red_data:/data -name mynodered nodered/node-red
обновить
Поскольку /data теперь хранится вне контейнера, обновление базового образа контейнера теперь выглядит следующим образом
$ docker pull nodered/node-red
$ docker stop mynodered
$ docker rm mynodered
$ docker run -it -p 1880:1880 -v node_red_data:/data -name mynodered nodered/node-red
Docker Stack/Docker Written
Ниже приведен пример файла Docker Compose, который может быть запущен с помощью docker stack или docker-compose. Дополнительную информацию о стеке Docker и Docker compose можно найти на официальной странице Docker.
################################################ ############################### Node-RED Стек или композиция################ ################################################ ################### docker stack deploy node-.red -compose-file docker-compose-node-red.yml# docker-compose -f docker-compose-node- red.yml -p myNoderedProject up########################################## ####################################version: "3.7 "Услуги:
Узелок-красный:
изображение: nodered/node-red:latest
окружающая среда:
- TZ=Европа/Амстердам
порты:
– “1880:1880”
сети:
-node-red-net
объемы:
- node-red-data:/datavolumes:
node-red-data:networks:
Узловая красная сеть:
Составьте файл выше:
Создайте службу node red
Извлеките последний красный образ узла
Установите часовой пояс Европа/Амстердам
Соотнесите порт контейнера 1880 с портом хоста 1880
Создайте сеть node-red-net и подключите к ней контейнер
/data сохраняет каталог внутри контейнера на томе в node-red-dataDocker
Dockerfile скопирован в локальные ресурсы
Иногда полезно наполнить образ Node-RED Docker файлами из локальной директории (например, если вы хотите хранить весь проект в git-репозитории). Для этого вам понадобится локальная директория, например, такая:
Dockerfile
README.md
package.json # добавьте все дополнительные узлы, необходимые вашему потоку, в свой собственный package.json.
flows.json # обычное место, где Node-RED хранит ваши потоки
flows_cred.json # учетные данные, которые могут понадобиться вашим потокам
settings.js # ваш файл настроек
Примечание: Этот метод не подходит, если вы хотите подключить том /data извне. Если вам нужно использовать внешний том для сохранения, скопируйте настройки и файлы потока на этот том.
Следующий Dockerfile основан на базовом Docker-образе Node-RED, но дополнительно перемещает в образ ваши собственные файлы:
FROM nodered/node-red
# Скопируйте package.json в WORKDIR, чтобы npm собрал все
# добавленных вами модулей узлов для Node-RED
Скопируйте файл package.json .
RUN npm install -unsafe-perm -no-update-notifier -no-fund -only=production
# Скопируйте _ваши_ файлы проекта Node-RED на место
# ПРИМЕЧАНИЕ: Это сработает только в том случае, если впоследствии вы НЕ будете монтировать /data как внешний том.
# Если вам нужно использовать внешний том для постоянства, то
# скопируйте свои настройки и потоковые файлы на этот том.
Скопируйте файл settings.js /data/settings.js
COPY flows_cred.json /data/flows_cred.json
COPY flows.json /data/flows.json
# Вы должны добавить дополнительные узлы через файл package.json, но вы также можете добавить их здесь:
#WORKDIR /usr/src/node-red
#RUN npm install node-red-node-smooth
ПРИМЕЧАНИЕ: Файл package.json должен содержать опцию запуска в разделе сценария. Например, контейнер по умолчанию выглядит следующим образом:
"scripts": {
"start": "node $NODE_OPTIONS node_modules/node-red/red.js $FLOWS",
…
Порядок следования Dockerfile и скорость сборки
Хотя это и не обязательно, хорошей идеей будет скопировать package... npm install..., чтобы выполнить эти шаги раньше, потому что в то время как flows.json часто меняется при работе в Node-RED, package.json меняется только при изменении модулей в проекте. будет меняться. А поскольку шаги, которые нужно выполнить при изменении npm install package.json, иногда могут отнимать много времени, хорошей идеей будет выполнить трудоемкие, часто неизменяемые шаги раньше в Dockerfile, чтобы эти образы сборки можно было использовать повторно, делая последующие сборки быстрее.
Учетные данные, секреты и переменные среды
Конечно, вы никогда не захотите жестко кодировать учетные данные где-либо, поэтому если вам нужно использовать учетные данные в проекте Node-RED, приведенный выше Dockerfile позволит вам сделать это в файле settings.js...
module.exports = {
credentialSecret: process.env.NODE_RED_CREDENTIAL_SECRET // добавьте именно это
}
...и затем, когда вы запускаете Docker, вы добавляете переменную окружения в команду запуска...
docker run -e "NODE_RED_CREDENTIAL_SECRET=ваш_секрет_здесь"
Построить и запустить
Обычно вы собираете этот Dockerfile:
docker build -t your-image-name:your-tag .
Для локального запуска в целях разработки, когда изменения записываются сразу, достаточно перейти в каталог проекта из локального каталога, с которым вы работаете, а затем запустить:
docker run -rm -e "NODE_RED_CREDENTIAL_SECRET=your_secret_goes_here" -p 1880:1880 -v `pwd`:/data -name a-container-name your-image-name
запуск
Переменные окружения могут быть переданы в контейнер для настройки времени выполнения Node-RED.
Файл конфигурации потока задается с помощью параметра окружения ( FLOWS ), который по умолчанию имеет значение 'flows.json'. Его можно изменить во время выполнения программы с помощью следующих флагов командной строки.
docker run -it -p 1880:1880 -v node_red_data:/data -e FLOWS=my_flows.json nodered/node-red
Примечание: Если вы задали -e FLOWS="", вы можете задать поток через свойство flowFile в файле settings.js.
Другие полезные переменные окружения включают
-e NODE_RED_ENABLE_SAFE_MODE=false# Установите значение true, чтобы запустить Node-RED в безопасном (нерабочем) режиме.
-e NODE_RED_ENABLE_PROJECTS=false # Установите значение true, чтобы запустить Node-RED и включить функции проекта.
Параметры времени выполнения Node.js можно передать контейнеру с помощью параметров окружения (NODE_OPTIONS). Например, чтобы исправить размер кучи, используемой сборщиком мусора Node.js, вы можете использовать следующую команду.
docker run -it -p 1880:1880 -v node_red_data:/data -e NODE_OPTIONS="-max_old_space_size=128″ nodered/node-red
Ключевые слова: промышленный шлюз