Zum Inhalt springen

Container laden und starten

Um einen Docker-Anwendung (z.B. Release einer Server-Applikation) als Container laufen lassen zu können benötigt es ein Docker-Image dieser Umgebung. Diese können entweder selbst, mit Hilfe sogenannter Docker-Files, geschrieben werden oder man lädt sie von einer Docker-Registry.

Docker-Files werden zur Erstellung von Docker-Images verwendet und beschreiben, wie diese aufgebaut werden sollen. Es handelt sich dabei also um eine Art Bauplan für das Image. Dies macht vor allem dann Sinn, wenn man eine selbst entwickelte Anwendung für andere zur Verfügung stellen möchte. Der große Vorteil dabei ist, dass dieser Bauplan alle benötigten Dateien und entsprechende Abhängigkeiten beinhaltet und ein daraus resultierendes Image bereits alle benötigten Komponenten enthält. Kurz gesagt kann das Image dann einfach heruntergeladen und gestartet werden und es wird, egal auf welcher Plattform, laufen.

Hat man nun ein Image erstellt, so kann dieses in einer Registry zur Verfügung gestellt werden. Dies kann im kleinen, also für einen ausgewählten Kreis wie z.B. Kollegen, erfolgen oder auf im großen auf einer öffentlichen (public) Registry.
Die größte und wohl auch bekannteste ist Docker Hub (https://hub.docker.com). Sie stellt eine riesige Bibliothek an Docker-Images dar. Sehr viele (Server-)Anwendungen können hier auf einfachem Weg geladen und gestartet werden.

Bevor auf einige der Images genauer eingegangen wird, werden die einzelnen Schlüsselwörter und Parameter aufgezeigt und erklärt:

docker runlädt den container, falls nötig, und startet diesen
-itAusgabe des Containers wird in Terminal ausgegeben
-p local:internPorts vom Container (intern) auf einen am localhost (local) weiterleiten
-dContainer im detached-Mode laufen lassen
-v dir:dirlinked ein lokales Verzeichnis auf eines im Docker-Container
-e key=valueenvironment variable
--name namegibt dem Container einen individuellen Namen (falls z.B. mehrere Container vom gleichen Image laufen sollen)
containerName bzw. Pfad zum Image auf Docker-Hub

Nun werden einige gängige (vor allem auch für den Smart Home Bereich interessante) Docker-Container vorgestellt:

NGINX

Bei NGINX handelt es sich um einen der derzeit beliebtesten Webserver, Reverse- und E-Mail-Proxy. Durch hervorragende Performance (z.B. Load balancing) eignet er sich gut für API Gateways.
Link: https://hub.docker.com/_/nginx

  • Port sollte weitergeleitet werden (kann auch auf 80 erfolgen, falls kein anderer lokaler (nicht Docker) Webserver auf diesem Port läuft
  • über den Verzeichnis-Linker (-v) sollte auf das lokale Website-Source-Verzeichnis verweisen (/dir/to/content)

Laden und starten
sudo docker run --name my-nginx -v /dir/to/content:/usr/share/nginx/html -d -p 8080:80 nginx

Eclipse-Mosquitto

Bei Mosquitto handelt es sich um einen OpenSource MQTT Broker (Server).
Link: https://hub.docker.com/_/eclipse-mosquitto

  • der Port 9001 wird zwar hier auch weitergeleitet, ist aber meiner Meinung nach nicht nötig.

Laden und starten
docker run --name my-mosquitto -p 1883:1883 -p 9001:9001  eclipse-mosquitto

Node-RED

Node-RED ist ein von IBM entwickeltes webbasierendes Entwicklungswerkzeug für die Verwaltung und Konfiguration von IoT (Internet of Things) Devices wie (natürlich) auch Smart Home Komponenten
Link: https://hub.docker.com/r/nodered/node-red-docker

  • der Port 1880 ist der Standardport für Node Red
  • durch das Dashboard-Plugin kann ein UI unter http://servername:1880/ui aufgerufen werden

Laden und starten
docker run -it -p 1880:1880 --name mynodered nodered/node-red-docker

Zigbee2mqtt

Dieser Container ermöglicht die Verwendung von Zigbee2mqtt (by Koen Kanters).
Link: https://hub.docker.com/r/koenkk/zigbee2mqtt

  • Durch die Pfadangabe durch (pwd) ist darauf zu achten, in welchem Pfad man sich zur Zeit der Ausführung befindet. Dort wird dann das data-Verzeichnis angelegt, welches die Konfigurationsfiles beinhaltet.
  • mit –device wird der Ort des Zigbee2MQTT-Chips (USB) angegeben. Üblicherweise ist dies /dev/ttyACM0

Laden und starten
docker run -it -v $(pwd)/data:/app/data --device=/dev/ttyACM0 -e TZ=Europe/Amsterdam koenkk/zigbee2mqtt

Published inDocker