Node.js Server mit React App im Docker Container unter Windows aufsetzen

Hier möchte ich euch Schritt für Schritt erklären, wie man einen Node Server als Windows Docker Container zum Laufen bringt und damit anschließend eine einfache Anwendung in React umsetzt. Dazu sind einige vorbereitende Schritte notwendig – ich fange hier einfach mal bei Null an, so dass jeder hier folgen kann und am Ende ein lauffähiges System zur Erstellung von den ersten React Apps hat.

Docker Toolbox für Windows installieren

  • Basis ist die Docker Umgebung in Windows
  • Dazu die Docker Toolbox herunterladen und installieren (idealerweise mit allen optionalen Packeten)
  • Wenn die Installation abgeschlossen, kann man die erste Docker Maschine starten
    • dazu das „Docker Quickstart Terminal“ starten
    • Hier wird nun die Default Docker Maschine aufgesetzt – dies dauert einige Sekunden
    • Wenn alles funktioniert hat, ist eure Maschine nun mit eigener IP-Adresse (meist 192.168.99.100) verfügbar und ihr könnt euch hier schon in einer Shell interactive bewegen
  • So sieht es dann aus:
  • Jetzt sollten alle Docker Ressourcen auf den neusten Stand gebracht werden
    • anderenfalls kann es im weiteren Verlauf z.B. zu der Fehlermeldung kommen „client is newer than server“
    • hierzu in der Windows Konsole (cmd.exe) oder der Windows PowerShell folgenden Befehl eingeben: docker-machine upgrate
    • Jetzt sollte die Docker Maschine neu gestartet werden (ebenfalls über die Konsole): docker-machine restart

Ubuntu als Basis Docker Image verwenden

Jetzt wollen wir unseren ersten Docker Container erstellen – als Basis soll dazu ein schlankes Ubuntu Image genutzt werden.

  • Mit dem Befehl docker search ubuntu werden alle Images angezeigt, die „ubuntu“ im Namen beinhalten. Hier ist das erste das offizielle mit sehr vielen positiven User-Bewertungen (Stars).
  • Dieses ziehen wir mit dem Befehl docker pull ubuntu
  • Sobald alle Ressourcen kopiert wurden, ist das Image bereit um daraus einen Container zu starten. Diesen starten wir mit dem Befehl docker run -it ubuntu und loggen uns damit gleichzeitig mit einem interativen tty Terminal ein (dafür stehen die Kürzel -it)).
  • Auch hier ist es wieder wichtig alle Ressourcen auf den neusten Stand zu bringen. Dies geht unter Ubuntu mit dem Befehl apt-get update
  • Um zu analysieren, welche Container aktuell gestartet sind, muss eine weitere Konsole gestartet werden. Dazu wieder die z.B. die Windows PowerShell öffnen und sich dann in der Default Docker Maschine einloggen. Das geht über den  Befehl docker-machine ssh default
    • Mit docker ps bekommt man eine Liste mit den aktuell gestarteten Containern angezeigt
    • Um sich in einen aktuell laufenden Container einzuloggen, ist folgender Befehl notwendig docker exec -it <container name> Der Container-Name ist in der ganz rechten Spalte der Liste zu finden.

Node.js im Docker Container installieren

Jetzt kommt ein relativ einfacher Schritt: alle Sourcen für einen Node.js Server installieren.

  • Um definieren zu können, welche Version von Node.js installiert werden soll, müssen entsprechende Dateien des ausgewählten Repositories kopiert werden. Dazu muss zunächst cURL installiert werden: apt-get install curl
  • Jetzt wird das entsprechende Repository kopiert – in diesem Fall Node.js mit der Version 6:
    curl -sL https://deb.nodesource.com/setup_6.x | bash
  • Mit dem Befehl apt-get install nodejs wird Node.js installiert
  • Um zu überprüfen, ob die installation mit der korrekten Version funktioniert hat, lässt sich einfach die aktuelle Version von Node ausgeben: node -v
  • Zusätzlich müsste nun auch der Node Package Manager (npm) verfügbar sein. Dazu auch ein kleiner Test, bei dem die aktuelle npm Version angezeigt wird: npm -v

Node.js Container als neues Docker Image speichern

Jetzt ist die Vorbereitung (fast) abgeschlossen und wir wollen unseren Container als neues Image zwischenspeichern.

  • Dazu wieder in einer neuen Konsole die Default Docker Maschine starten docker-machine ssh default
  • Mit docker ps die aktuellen Container auflisten lassen
  • Dann mit Docker Commit den Container als Image mit der Version 1.0 und dem Namen ubuntu-node speichern: docker commit <container name> ubuntu-node:1.0 – der Container Name ist in der ganz rechten Spalte der Auflistung definiert
  • Wenn das funktioniert hat, seht ihr euer neues Image in der Auflistung durch docker images

Verknüpfung von Windows Ordnern in dem Ubuntu Node Container erstellen

Um mit einem modernen Editor wie dem Atom unter Windows entwickeln zu können, ist es notwendig, die Windows Datei-Struktur in dem neu erstellten Image, aus dem wir unseren Entwicklungs-Container starten, verfügbar zu machen. Denn in Atom bearbeitete Dateien sollten direkt im Container aktualisiert sein.

  • Dazu müssen wir zunächst überprüfen welche Windows Dateien bzw. Odern in unserer Default Docker Machine bereits verknüpft sind.
    • Dazu einfach wie gehabt in der Windows Konsole eine neue Maschine starten: docker-machine ssh default
    • Mit dem Befehl ls -l / seht ihr alle Ordner im Root Verzeichnis. Idealerweise sind eure Laufwerke (zumindest das Laufwerk C:) dort gelistet:
    • mit ls -l /c könnt ihr nun die gemounteten Ordner sehen – es sollte alle „Nicht-Standard-Windows-Ordner“ verfügbar sein. Wenn dies nicht der Fall ist, empfehle ich folgenden Artikel, der beschreibt, wie man Windows-Ordner als Shared-Folder für Docker-Container freigibt
  • Jetzt starten wir einen neuen Container aus dem Image „ubuntu-node“ der auf den Windows-Ordner „C:\Projekte“ unter „/c/projects“ zugreifen kann:
    docker run -v /c/projekte/:c/projects -it ubuntu-node bash
  • Wenn alles funktioniert hat, könnt ihr nun in eurem neu gestarteten Container direkt auf die Windows Ordner zu greifen: ls -l /c/projects

<Hello World> App im Atom Editor vorbereiten

Jetzt können wir endlich loslegen und unsere erste App mit Node.js mit dem Editor Atom schreiben – wie sooft auch hier eine kleine „Hello World“ Ausgabe in eurem Browser. Dazu habe ich das Tutorial von expressjs.com als Basis genommen.

  • Als erstes erstellen wir unter z.B. C:\Projekte einen neuen Ordner für unsere App und nennen ihn „nodeApp“.
  • In Atom wechseln wir zu diesem Ordner bzw. öffnen unser frisches Projekt „nodeApp“
  • Wir erstellen die Datei app.js mit dem Inhalt aus dem obigen Tutorial – das ganze sieht dann so aus:
  • Wie man sieht macht die App nicht viel:
    • Auf Server-Seite wird auf dem Port 3000 gelauscht und in der Konsole eine Ausgabe gemacht
    • Auf Client-Seite wird „Hello World“ ausgegeben.

Node Container für <Hello World> App starten

Jetzt gilt es nur noch unseren Container mit Node hoch zu fahren, der auf den Port 3000 lauscht und der auf die eben erstellten Daten zugreifen kann. So geht’s: docker run -p 3000:3000 -v /c/projekte/:/c/projects -it ubuntu-node bash

  • Wir wechseln nun in unseren Projekt-Ordner: cd /c/projects/nodeApp
  • Den Node Package Manager initiieren: npm init
    • hier einfach alles mit den Standardwerte bestätigen außer: index.js -> app.js
  • jetzt noch das wichtige Node Packet Express installieren: npm install express --save
    • das --save sorgt dafür, dass das Packet in der dependencies list gespreichert wird
  • Und nun endlich die App starten: node app.js
  • Wenn alles richtig funktioniert, erscheint nun in der Konsole Excample app listening on port 3000!

Per Windows Client auf Node App im Docker Container zugreifen

Wir haben es nun geschafft. Wir müssen nur noch einen Browser öffnen und auf den Container zugreifen.

  • Dazu müssen wir die IP-Adresse der Docker-Maschine kennen.  Dafür nur nun in einer neuen Windows PowerShell den Befehl docker-machine ip absetzen.
  • Und mit dieser IP Adresse den Browser öffnen und diese mit dem Port 3000 ansprechen: http://192.168.99.100:3000
  • Wenn ihr jetzt „Hello World“ lesen könnt habt ihr es geschafft 🙂

Finales Ergebnis als Docker Image speichern

Damit ihr nach dem nächsten Windows Booten genau an dieser Stelle weiter machen könnt, solltet ihr das Ergebnis eurer Arbeit als neues Docker Image mit aktualisierter Versionsnummer abspeichern.

  • Dazu wie vorher schon in einer neuen Konsole die Default Docker Maschine öffnen docker-machine ssh default
  • Docker container auflisten docker ps – hier braucht man den container name –> Spalte ganz rechts
  • Image speichern docker commit <container name> ubuntu-node:1.1

FERTIG 🙂

Kommentar verfassen

%d Bloggern gefällt das: