Deze grafische ontwikkel omgeving laat je toe om op eenvoudige wijze applicaties te schrijven waarbij een web interface als user interface kan dienen.
Voor het bedienen van apparaten is dit ideaal, waardoor je layouts van knoppen etc kan maken, naar eigen smaak.
Zie uitleg: Running node-red under Docker
Het installeren van een image gebeurt dmv een cmd venster in windows en het geven van het volgende commando:
docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red
Er zal een installatie starten van de image en nadien zal er een container gemaakt worden.
Deze installatie is interacief (-it) en maakt een Docker desktop/Volume node_red_data aan in WSL(niet op de windows host), waarop de data van de folder /data in de container wordt bewaard, los van de container.
De naam van de container is mynodered.
De repository (docker hub) naam van de image file is nodered/node-red.
De externe poort 1880 wordt gekoppeld aan de container poort 1880.
Je zal in Windows moeten toelaten dat er een toegang via netwerk wordt open gezet.
Klik ook private network aan, zodat je de poort 1880 kan bereiken van buiten uit en Allow access.
Ook in Docker Desktop wordt je container zichtbaar en kan je van daaruit verschillende acties ondernemen (stop/start/vuilbak en 3 bolletjes menu)
In het Volumes menu zal het named-volume ziens staan node_red_data en de inhoud ervan kan je benaderen door via dit menu erop te klikken en het tabblad data te kiezen.
De node-red applicatie heeft een webinterface.
Doordat de opstart interactief is gebeurt, zal je zien in het cmd venster dat de command prompt niet terug komt, zolang de applicatie draait.
Met ctrl-p ctrl-q kan je in de cmd prompt de terminal detachen van de applicatie en blijft deze in de achtergrond verder draaien.
Hierdoor kan je je cmd venster terug gebruiken voor andere acties.
Het terug verbinden van je terminal aan een docker container doe je dmv het attach commando naar de docker container naam.
docker attach mynodered
Het stoppen of starten van een container doe je met
docker start mynodered
docker stop mynodered
Zolang de container draait, kan je via een webinterface de programmeeromgeving benaderen.
Open een browser naar "localhost:1880", de poort die we gebruikt hebben in het commando om de container van buitenaf beschikbaar te stellen.
Ook in Docker desktop kan je rechtstreekts via het action menu Open with browser, de node-red pagina openen.
Om data buiten een container te kunnen bewaren, heb je verschillende mogelijkheden, waarvan hier twee mogelijkheden besproken worden:
Bind mount: laat je toe om een shared folder te gebruiken op het host systeem, in ons geval Windows
Named Volume: laat je toe om een shared folder te gebruiken op het Docker host systeem, hier WSL
zie verschil op: file-sharing with Docker
Data die in deze folder bewaard wordt is ook toegankelijk vanuit de host, in ons geval Windows.
Hierdoor kan je, buiten het bewaren van setting gegevens van een container, een "doorgeefluik" creëren tussen Windows host en Linux containers.
Het aanmaken gebeurt door, bij de aanmaak van de container te verwijzen naar een folder op je host systeem.
Binnen node-red wordt de folder /data gebruikt met de UID=1000 voor het bewaren van specifieke data.
Deze folder gaan we nu binden aan een folder in je Documents
Maak een folder aan op je host systeem:
"C:\Users\on4rst\Documents\Node-red-data"
Maak een nieuwe container aan, nadat je de vorige hebt verwijdert (stop en vuilbakje in Docker desktop) met de volgende command line, met doublequotes als er spaties in het path voorkomen:
docker run -it -p 1880:1880 -v "C:\Users\on4rst\Documents\Node-red-data":/data --name mynodered nodered/node-red
Bind mount geeft je een doorgeefluik naar je Host systeem, waar dat Named Volume binnen Docker gebruik maakt van het Docker systeem om een container onafhankelijke data opslag te voorzien. De Named Volume is de bevoorrechte procedure voor data die veelvuldig uitgewisseld moet worden en heeft een duidelijke snelheidswinst tov de Bind mount op de Windows Host.
Vermits Docker draait op WSL2, zal dit volume op WSL2 bewaard worden.
Het aanmaken/beheer kan volledig vanuit Docker Desktop
Open Docker Desktop/Volumes.
Clik op create.
Geef het volume een naam:
Vb NodeRedData
Hierdoor kan je bij het updaten van je node-red image/container, dezelfde data binden aan de nieuwe versie en zo alle gegevens recupereren.
Je kan Named volumes ook gebruiken om verschillende containers te binden aan dezelfde data, daar deze data niet op het host (in ons geval Windows) maar op het WSL systeem worden bewaard, de plaats waar ook Docker draait.
De inhoud kan je bekijken via Desktop Docker/Volumes door erop te klikken.
Een nieuwe container met verwijzing naar het named volume wordt eveneens gemaakt met de -v flag:
docker run -it -p 1880:1880 -v NodeRedData:/data --name mynodered nodered/node-red
Wanneer je een extra Bind Volume in Windows wil toekennen kan dit.
In de /data mount, die dus ook terug te vinden zal zijn in de Docker Desktop als NodeRedData volume, zal je nu ook een /gpredict folder vinden, die verwijst naar de folder in het Windows host systeem.
Echter vanuit DD zal je deze folderinhoud niet kunnen bekijken, maar wel als je een terminal van de container opent en naar /data/gpredict gaat.
docker run -it -p 1880:1880 -v NodeRedData:/data -v "C:\Users\on4rst\Gpredict":/data/gpredict --name mynodered nodered/node-red
Het updaten van een Image, gaat steeds gepaard met het vervangen van een bestaande container (instance) en door gebruik te maken van percistence data, kan dit op een eenvoudige wijze.
Door een pull kan je de laatste versie ophalen van de image uit de repository (Docker hub)
Hierna wordt de lopende container gestopt, verwijdert en terug opgestart met de koppeling naar de percistence data, waardoor de nieuwe image wordt gebruikt.
Hieronder de lijst van de commando's.
$ docker pull nodered/node-red
$ docker stop mynodered
$ docker rm mynodered
$ docker run -it -p 1880:1880 -v NodeRedData:/data --name mynodered nodered/node-red
Door in het commando de -it te vervangen door -d draait de container in de background.
Hij blijft benaderbaar vanuit de Docker desktop.
Wanneer je in een docker container toegang wil naar een shell, kan je het exec command gebruiken:
docker exec -it mynodered /bin/bash
Dit geeft je een shell binnen het draaiende programma (omgeving) zodat je settings etc kan aanpassen in de container software zelf.
Je kan natuurlijk ook de terminal gebruiken in Docker Desktop via de 3 bolletjes bij de container.
zie mogelijkheden op: Restart policy
Docker deamon of engine wordt automatisch gestart als Windows start (zie settings tijdens installatie).
Echter de containers starten normaal niet van zichzelf.
Hiervoor is er binnen docker een restart policy voorzien, waarbij je voor iedere container kan bepalen wat er dient te gebeuren bij het stoppen van een container.
De reden van stoppen kan bepalend zijn voor de restart optie.
Het instellen van de restart optie gebeurt met de --restart flag:
Start een container met de optie en laat deze draaien in de achtergrond:
docker run -d --restart always mynodered
Pas de restart policy aan van een draaiende container:
docker update --restart always mynodered
Pas de restart policy aan van alle draaiende containers
docker update --restart always $(docker ps -q)