Node-RED и начало работы с Docker
Контейнер Docker можно использовать для запуска сервера node-RED на устройстве PLCnext. Хотя другой метод, описанный здесь, немного быстрее. Использование контейнеров OCI дает некоторые преимущества. Например, при многократном использовании одних и тех же пакетов для приложения может быть полезно создать стандартный образ и просто загрузить его из Docker Hub. Docker также можно использовать для запуска и остановки сервера node-red, когда мы этого хотим.
Этот блог объяснит именно это. Сначала я проведу вас через процесс установки Docker, и мы проверим установку. Мы создадим собственный образ с пакетами по нашему вкусу, предварительно установленными с Dockerfile, и создадим контейнер из нашего только что созданного образа. Наконец, мы убедимся, что наш контейнер запустится при загрузке контроллера и отправит наш образ в Dockerhub.
Установка двигателя Balena
Я немного солгал, когда сказал, что контейнеры Docker можно использовать для запуска среды выполнения node-RED на устройстве PLCnext. Как вы увидите, мы используем движок Balena в качестве движка для запуска контейнеров, точнее, мы будем использовать контейнеры OCI (Open Container Initiative). Борьба с номенклатурой завела бы нас слишком далеко для блога Makers, но в разделе «Дополнительная литература» в конце этого блога я добавил несколько ссылок для тех, кто заинтересован.
Процедура установки довольно проста, и ее можно найти здесь для полного ознакомления, но из соображений практичности команды также приведены в следующем разделе.
Убедитесь, что вы вошли в систему как пользователь root, чтобы создать новый пароль root, введите следующую команду в оболочке и введите пароль администратора, а затем два раза новый пароль root.
sudo passwd root
Войдите в систему как пользователь root, введя su, а затем ваш только что созданный пароль.
Клонируйте репозиторий git и перейдите в новую папку
git clone https://github.com/PLCnext/Docker_GettingStarted.git
cd Docker_GettingStarted
Сделайте сценарий установки исполняемым и запустите указанный сценарий.
chmod +x setup.sh
./setup.sh
Получение доступа в Интернет из ваших контейнеров
Иногда во время установки таблицы nft настраиваются неправильно. К счастью, это легко исправить.
Полное справочное руководство можно найти здесь, а краткое описание прогресса приводится ниже.
В типе вашей оболочки
ifconfig
Появится конфигурация ваших сетевых интерфейсов. Одного из них зовут Balena, обратите внимание на инет-адрес этого интерфейса.
Должно быть что-то вроде этого:172.17.0.1
Введите следующую команду в вашей оболочке и сравните адрес Inet, полученный на предыдущем шаге, со второй строкой скрипта.
Два адреса должны быть одинаковыми, если это так, вы можете перейти к следующему разделу.
Если нет, выполните следующую команду в своей оболочке и измените адрес во второй строке, чтобы он совпадал с адресом, полученным ifconfig.
nano /etc/nftables/balena.nft
Остановите и запустите демон balena-engine-daemon, чтобы перезагрузить таблицы nft.
/etc/init.d/balena stop
/etc/init.d/balena start
Мой первый контейнер
Чтобы загрузить свой первый контейнер, используйте следующую команду, флаги будут объяснены позже, не беспокойтесь о них сейчас. Теперь мы загрузим контейнер с красным узлом без пакетов костюмов. Если вам не нужны пакеты костюмов, вы можете остановиться здесь и перейти к порту 1880 контроллера.
balena-engine run -d -p 1880:1880 --name nodered --restart always nodered/node-red
Центр Docker
Образ arm32v7/debian, использованный в предыдущем разделе, был загружен с Docker Hub.
Docker Hub — это, по сути, место, где собираются образы контейнеров, откуда их можно легко загрузить.
Могу порекомендовать организацию arm32v7, эта организация создает образы совместимые с архитектурой AXC F 2152.
Организация node-red создала образы, совместимые с AXC F 2152, мы будем использовать этот образ в следующем разделе, но сначала я хотел бы упомянуть, что если вы будете часто использовать контейнеры, вам следует создать учетную запись на Docker Hub и использовать его репозитории. Вы получите почти неограниченное количество общедоступных репозиториев и один частный репозиторий при создании бесплатной учетной записи. Какое-то время я сопротивлялся использованию Docker Hub, но это стоило мне много времени.
В последнем разделе этого блога я немного сгладлю кривую обучения использованию Docker Hub, показав, как войти в систему, повторно пометить изображение и отправить изображение в Docker Hub.
Докерфайл
Файл докера — это в некотором смысле рецепт для образа докера. В этом блоге мы будем использовать Dockerfile для создания собственного образа node-red с установленными пакетами.
Первая строка Dockerfile почти всегда является командой FROM. С помощью этой команды мы определяем базовый образ, из которого мы создадим собственный образ.
После оператора FROM мы начинаем создавать наш образ. Есть много возможных команд, которые можно использовать в Dockerfile, но здесь мы будем использовать только RUN.
Справочная ссылка на Dockerfile приведена в разделе «Дополнительные материалы».
Оператор RUN выполнит следующую команду внутри контейнера, который мы создаем.
Итак, чтобы установить новый пакет, например пакет SNMP, мы указываем:RUN npm install node-red-node-snmp
После теории давайте создадим Dockerfile. Надеюсь, вы все еще находитесь в сеансе SSH (убедитесь, что вы вернулись к AXC F 2152, а не к debian, который был два раздела назад!).
Вы можете создать Dockerfile с помощью nano и скопировать содержимое в новый файл. сохранить (ctrl + s) и выйти (ctrl + x).nano Dockerfile
FROM nodered/node-red:latest-minimal
RUN npm install node-red-node-snmp
Теперь пришло время создать наш новый образ!
balena-engine build . --tag myimage
Когда вы получили сообщение о том, что изображения были успешно помечены, вы создали свое первое изображение!
Чтобы увидеть изображение, которое вы только что создали, используйте команду:balena-engine images
Запуск нашего нового изображения
Наконец, мы готовы запустить наш образ и создать из него контейнер!
Введите следующую команду в оболочке, чтобы запустить контейнер в интерактивном режиме.
Интерактивно означает, что мы можем видеть в терминале, что происходит внутри контейнера.
Обратное отсоединяется, помечается флагом -d
balena-engine run -it -p 1880:1880 --name nodered myimage
Чтобы выйти из контейнера и продолжить его работу, используйте ctrl + p ctrl + q
Когда вы переходите к IP-адресу контроллера, за которым следует порт 1880, отображается красная среда узла, и мы видим установленный пакет snmp!
Запуск образа при загрузке и пример флагов запуска Docker
Нецелесообразно загружать контейнер вручную каждый раз при перезапуске AXC F 2152. К счастью, мы можем сказать Docker, чтобы он запустил его для нас, и это легко!
Просто используйте команду, указанную ниже. Это также время, чтобы лучше понять используемые флаги Docker. Во-первых, флаг — это то, что мы даем после команды и начинается с — или —.
До сих пор мы видели только -it для интерактивного запуска контейнера и -d для запуска контейнера отдельно (в фоновом режиме).
Флаг -p сопоставляет порт контейнера с портом хоста. Сначала указывается номер порта хоста, затем номер порта контейнера.
Мы можем дать контейнеру имя с флагом –name. Это имя будет отображаться, когда вы используете balena-engine ps для вывода списка всех активных контейнеров или balena-engine ps -a для вывода списка всех контейнеров.
Когда флаг –name не используется, balena-daemon присваивает контейнеру случайное имя.
И последнее, но не менее важное:политика перезапуска может быть назначена контейнеру с флагом –restart.
Возможные настройки можно найти в справочной ссылке, указанной в дальнейших чтениях.
На данный момент — перезагрузка всегда поможет! Наша команда будет:
balena-engine run -it -p 1880:1880 --name nodered --restart always myimage
Отправка в центр Docker
Когда вы не хотите использовать свое изображение на разных контроллерах. Рекомендуется загрузить образ в Docker Hub.
Исходя из того, что у вас уже есть учетная запись и вы создали репозиторий докеров, мы продолжим. Сначала нам нужно войти в свою учетную запись. Это можно сделать, введя логин balena-engine, а затем имя пользователя и пароль. Теперь можно загружать образы из частных репозиториев и отправлять образы в Docker Hub.
Чтобы отправить образ в Docker Hub, важно правильно подобрать имя. Когда я создал репозиторий myrep и моя учетная запись пользователя — myaccount, имя изображения должно быть myaccount/myrep.
Если вы не назвали его таким образом при создании изображения, вам необходимо повторно пометить изображение, используя тег balena-engine oldimagetag newimagetag. В нашем случае это будет:
balena-engine tag myimage myaccount/myrep
Когда больше ничего не определено, он получает последнюю метку. В метке можно добавить :и имя метки. Например:
balena-engine tag myimage myaccount/myrep:alabel
Осталось только отправить наш образ в Docker hub с помощью команды:
balena-engine push myaccount/myrep
Дополнительная литература и ссылки
https://github.com/PLCnext/Docker_GettingStarted/blob/master/getting-started/Part-01/README.md
https://www.docker.com/resources/what-container
https://docs.docker.com/engine/reference/builder/
https://hub.docker.com/
https://hub.docker.com/r/nodered/node-red
Промышленные технологии
- Начало работы с керамической 3D-печатью
- Знакомство с основными красителями!
- Знакомство с промышленными красителями и пигментами!
- Начало работы с TJBot
- Начало работы с RAK 831 Lora Gateway и RPi3
- Начало работы со шлюзом RAK831 LoRa и RPi3
- Настойчивость и настойчивость в руководстве
- Начало работы с ИИ в страховании:вводное руководство
- Учебник по Arduino 01:Начало работы
- Начало работы с My.Cat.com