Node-RED und erste Schritte mit Docker
Ein Docker-Container kann verwendet werden, um einen Node-RED-Server auf einem PLCnext-Gerät auszuführen. Obwohl die andere hier beschriebene Methode etwas schneller ist. Der Einsatz von OCI-Containern bringt einige Vorteile mit sich. Wenn Sie beispielsweise wiederholt dieselben Pakete für eine Anwendung verwenden, kann es hilfreich sein, ein Standard-Image zu erstellen und es einfach vom Docker-Hub herunterzuladen. Docker kann auch verwendet werden, um den Node-Red-Server zu starten und zu stoppen, wenn wir wollen.
Dieser Blog wird genau das erklären. Zuerst führe ich Sie durch den Installationsprozess von Docker und wir überprüfen die Installation. Wir erstellen ein benutzerdefiniertes Image mit Paketen nach unseren Wünschen, die mit einer Docker-Datei vorinstalliert sind, und erstellen einen Container aus unserem frisch erstellten Image. Schließlich stellen wir sicher, dass unser Container beim Booten des Controllers startet und unser Image an Dockerhub pusht.
Einbau des Balena – Motors
Ich habe ein bisschen gelogen, als ich sagte, dass Docker-Container verwendet werden können, um eine Node-RED-Laufzeit auf einem PLCnext-Gerät auszuführen. Wie Sie sehen werden, verwenden wir die Balena-Engine als Engine zum Ausführen von Containern, genauer gesagt verwenden wir OCI-Container (Open Container Initiative). Das Ringen durch die Nomenklatur würde uns für einen Makersblog viel zu weit bringen, aber im weiterführenden Abschnitt am Ende dieses Blogs habe ich einige Links für Interessierte hinzugefügt.
Der Installationsvorgang ist ziemlich einfach und kann hier als vollständige Referenz gefunden werden, aber aus praktischen Gründen werden die Befehle auch im nächsten Abschnitt angegeben.
Stellen Sie sicher, dass Sie als Root-Benutzer angemeldet sind, um ein neues Root-Passwort zu erstellen, geben Sie den folgenden Befehl in der Shell ein und geben Sie Ihr Admin-Passwort ein, gefolgt von zweimal dem neuen Root-Pass.
sudo passwd root
Melden Sie sich als Root-Benutzer an, indem Sie su gefolgt von Ihrem neu erstellten Passwort eingeben.
Klonen Sie das Git-Repository und wechseln Sie in den neuen Ordner
git clone https://github.com/PLCnext/Docker_GettingStarted.git
cd Docker_GettingStarted
Machen Sie das Setup-Skript ausführbar und führen Sie es aus.
chmod +x setup.sh
./setup.sh
Internetzugriff von Ihren Containern erhalten
Manchmal werden die nft-Tabellen während der Installation falsch eingerichtet. Glücklicherweise ist dies eine einfache Lösung.
Die vollständige Referenzanleitung finden Sie hier, aber eine kurze Beschreibung des Fortschritts finden Sie weiter unten.
Geben Sie in Ihrer Shell
einifconfig
Die Konfiguration Ihrer Netzwerkschnittstellen erscheint. Einer von ihnen namens Balena, notieren Sie sich die Inet-Adresse dieser Schnittstelle.
Es sollte etwa so lauten:172.17.0.1
Geben Sie den folgenden Befehl in Ihre Shell ein und vergleichen Sie die im vorherigen Schritt erhaltene Inet-Adresse mit der zweiten Zeile im Skript.
Die beiden Adressen sollten gleich sein, wenn ja, können Sie zum nächsten Abschnitt gehen.
Wenn nicht, geben Sie den nächsten Befehl in Ihrer Shell ein und ändern Sie die Adresse in der zweiten Zeile so, dass sie mit der von ifconfig empfangenen übereinstimmt.
nano /etc/nftables/balena.nft
Beenden und starten Sie den balena-engine-daemon, um die nft-Tabellen neu zu laden.
/etc/init.d/balena stop
/etc/init.d/balena start
Mein erster Container
Um Ihren ersten Container herunterzuladen, verwenden Sie den nächsten Befehl, die Flags werden später erklärt, machen Sie sich jetzt keine Sorgen. Jetzt laden wir einen Node-Red-Container ohne benutzerdefinierte Pakete herunter. Wenn Sie keine benutzerdefinierten Pakete benötigen, können Sie hier aufhören und zu Port 1880 des Controllers navigieren.
balena-engine run -d -p 1880:1880 --name nodered --restart always nodered/node-red
Docker-Hub
Das im vorherigen Abschnitt verwendete arm32v7/debian-Image wurde von Docker Hub heruntergeladen.
Docker Hub ist im Wesentlichen ein Ort, an dem Container-Images gesammelt und einfach heruntergeladen werden können.
Ich kann die Organisation arm32v7 empfehlen, diese Organisation erstellt Images, die mit der Architektur des AXC F 2152 kompatibel sind.
Die Node-Red-Organisation hat ein Image erstellt, das mit dem AXC F 2152 kompatibel ist. Wir werden dieses Image im nächsten Abschnitt verwenden, aber zuerst möchte ich erwähnen, dass Sie ein Konto bei Docker Hub erstellen sollten, wenn Sie häufig Container verwenden Verwenden Sie seine Repositories. Wenn Sie ein kostenloses Konto erstellen, erhalten Sie nahezu unbegrenzte öffentliche Repositorys und ein privates Repository. Ich habe mich eine Weile geweigert, Docker Hub zu verwenden, aber es hat mich viel Zeit gekostet.
Im letzten Abschnitt dieses Blogs werde ich die Lernkurve bei der Verwendung von Docker Hub ein wenig abflachen, indem ich zeige, wie man sich anmeldet, um ein Bild neu zu taggen und ein Bild an Docker Hub zu senden.
Dockerfile
Eine Docker-Datei ist gewissermaßen das Rezept für ein Docker-Image. In diesem Blog verwenden wir ein Dockerfile, um unser eigenes Node-Red-Image zu erstellen, in dem die Pakete installiert sind, die wir benötigen.
Die erste Zeile einer Dockerfile ist fast immer der FROM-Befehl. Mit diesem Befehl definieren wir ein Basis-Image, aus dem wir unser eigenes Image erstellen.
Nach der FROM-Anweisung beginnen wir mit dem Aufbau unseres Images. Es gibt viele mögliche Befehle, die in einer Dockerdatei verwendet werden können, aber hier verwenden wir nur RUN.
Ein Dockerfile-Referenzlink wird im Abschnitt „Weitere Literatur“ bereitgestellt.
Die RUN-Anweisung führt den Befehl aus, der innerhalb des Containers folgt, den wir erstellen.
Um also ein neues Paket zu installieren, beispielsweise das SNMP-Paket, geben wir Folgendes an:RUN npm install node-red-node-snmp
Lassen Sie uns nach der Theorie ein Dockerfile erstellen. Hoffentlich befinden Sie sich immer noch in einer SSH-Sitzung (stellen Sie sicher, dass Sie sich wieder auf dem AXC F 2152 befinden und nicht im Debian-Inhalt von vor zwei Abschnitten!).
Sie können die Dockerdatei mit Nano erstellen und den Inhalt kopieren, indem Sie ihn in die neue Datei einfügen. speichern (Strg + s) und beenden (Strg + x).nano Dockerfile
FROM nodered/node-red:latest-minimal
RUN npm install node-red-node-snmp
Jetzt ist es an der Zeit, unser neues Image aufzubauen!
balena-engine build . --tag myimage
Wenn Sie die Nachricht erhalten haben, dass die Bilder erfolgreich getaggt wurden, haben Sie Ihr erstes Bild erstellt!
Um das soeben erstellte Image anzuzeigen, verwenden Sie den Befehl:balena-engine images
Wir führen unser neues Image aus
Endlich können wir unser Image ausführen und daraus einen Container erstellen!
Setzen Sie den folgenden Befehl in der Shell um, um den Container interaktiv auszuführen.
Interaktiv bedeutet, dass wir im Terminal sehen können, was im Container vor sich geht.
Das Gegenteil ist freistehend, gekennzeichnet mit dem Flag -d
balena-engine run -it -p 1880:1880 --name nodered myimage
Um den Container zu verlassen und ihn am Laufen zu halten, verwenden Sie Strg + P Strg + Q
Wenn Sie zur IP-Adresse des Controllers navigieren, gefolgt von Port 1880, wird die rote Umgebung des Knotens angezeigt, und wir sehen, dass das SNMP-Paket installiert ist!
Starten des Images beim Booten und eine Einführung in Docker-Ausführungsflags
Es ist unpraktisch, den Container jedes Mal manuell zu booten, wenn der AXC F 2152 neu gestartet wird. Glücklicherweise können wir Docker anweisen, es für uns zu starten, und es ist einfach!
Verwenden Sie einfach den unten aufgeführten Befehl. Dies ist auch die Zeit, um die verwendeten Docker-Flags besser zu verstehen. Für den Anfang ist ein Flag etwas, das wir nach dem Befehl geben und mit entweder – oder – beginnen.
Bisher haben wir nur -it gesehen, um einen Container interaktiv auszuführen, und -d, um einen Container losgelöst (im Hintergrund) auszuführen.
Das Flag -p bildet den Port des Containers auf den Port des Hosts ab. Zuerst wird die Portnummer des Hosts angegeben, dann die Portnummer des Containers.
Mit dem Flag –name können wir dem Container einen Namen geben. Dieser Name wird angezeigt, wenn Sie balena-engine ps verwenden, um alle aktiven Container aufzulisten, oder balena-engine ps -a, um alle Container aufzulisten.
Wenn kein –name-Flag verwendet wird, weist der Balena-Daemon dem Container einen zufälligen Namen zu.
Und nicht zuletzt kann einem Container mit dem Flag –restart eine Restart-Policy zugewiesen werden.
Die möglichen Einstellungen sind dem in der weiterführenden Literatur aufgeführten Verweislink zu entnehmen.
Fürs Erste reicht ein Neustart immer aus! Unser Befehl lautet:
balena-engine run -it -p 1880:1880 --name nodered --restart always myimage
Auf Docker-Hub übertragen
Wenn Sie Ihr Image auf verschiedenen Controllern verwenden möchten. Es ist eine gute Idee, Ihr Image auf Docker Hub hochzuladen.
Unter der Voraussetzung, dass Sie bereits ein Konto haben und ein Docker-Repository erstellt haben, fahren wir fort. Zuerst müssen wir uns bei unserem Konto anmelden. Geben Sie dazu balena-engine login gefolgt von Ihrem Benutzernamen und Passwort ein. Jetzt ist es möglich, Bilder aus privaten Repositorys herunterzuladen und Ihr Bild an den Docker-Hub zu übertragen.
Um Ihr Image auf den Docker-Hub zu übertragen, ist es wichtig, den richtigen Namen zu wählen. Wenn ich ein Repository myrep erstellt habe und mein Benutzerkonto myaccount ist, sollte der Name des Bildes myaccount/myrep sein.
Wenn Sie es beim Erstellen des Bildes nicht so benannt haben, müssen Sie das Bild neu taggen, indem Sie das balena-engine-Tag oldimagetag newimagetag verwenden. In unserem Fall wäre dies:
balena-engine tag myimage myaccount/myrep
Wenn nichts mehr definiert ist, holen Sie sich spätestens das Label. Es ist möglich, einem Label ein :und einen Labelnamen hinzuzufügen. Zum Beispiel:
balena-engine tag myimage myaccount/myrep:alabel
Das Einzige, was übrig bleibt, ist, unser Image mit dem Befehl:
an den Docker-Hub zu schiebenbalena-engine push myaccount/myrep
Weiterführende Literatur und Referenzen
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
Industrietechnik
- Erste Schritte mit dem Keramik-3D-Druck
- Kennenlernen grundlegender Farbstoffe!
- Kennenlernen industrieller Farbstoffe und Pigmente!
- Erste Schritte mit TJBot
- Erste Schritte mit dem RAK 831 Lora Gateway und RPi3
- Erste Schritte mit dem RAK831 LoRa Gateway und RPi3
- Führen mit Beharrlichkeit und Beharrlichkeit
- Erste Schritte mit KI im Versicherungswesen:Ein Einführungsleitfaden
- Arduino-Tutorial 01:Erste Schritte
- Erste Schritte mit My.Cat.com