Blog

Bereitstellung einer Node.js-Anwendung in Docker auf CoreOS mit Deis

Mark van Holsteijn

Mark van Holsteijn

Aktualisiert Oktober 22, 2025
5 Minuten

Die Welt der On-Premise Private PaaSes verändert sich schnell. Vor ein paar Jahren bauten wir auf private On-Premise PaaSes auf, die auf der bestehenden Infrastruktur basierten, und nutzten Puppet als Automatisierungstool für die schnelle Bereitstellung neuer Anwendungsserver. Wir stellten ein Selbstbedienungsportal zur Verfügung, über das Entwicklungsteams jede Art von Server in jeder Art von Umgebung innerhalb weniger Minuten zum Laufen bringen konnten. Wir haben für jede Anwendung einen virtuellen Server erstellt, um sie überschaubar zu halten, was natürlich ziemlich ressourcenintensiv ist. Seit dem 9. Juni ist Docker als produktionsreif erklärt worden, so dass die Teams nun die Möglichkeit haben, statt einer vollständigen virtuellen Maschine leichtgewichtige Container bereitzustellen. Dadurch wird die Geschwindigkeit der Bereitstellung noch weiter erhöht, während die Kosten für die Erstellung einer Plattform gesenkt und der Ressourcenverbrauch minimiert werden. Um zu veranschaulichen, wie einfach das Leben wird, werden wir eine originale CloudFoundry node.js-Anwendung in Docker auf einem CoreOS-Cluster bereitstellen. Dieses praktische Experiment basiert auf MacOS, Vagrant und VirtualBox.

Schritt 1. Installation von etcdctl und fleetctl

Bevor Sie beginnen, müssen Sie etcdctl und fleetctl auf Ihrem Host installieren. etcd ist ein raffinierter verteilter Key-Value-Speicher, während fleet die Bereitstellung von (Docker-)Diensten in einem CoreOS-Cluster verwaltet. $ brew install go etcdctl $ git clone https://github.com/coreos/fleet.git $ cd fleet && ./build && mv bin/fleetctl /usr/local/bin

Schritt 2. Installieren Sie den Deis Command Line Client

Um das PaaS zu steuern, müssen Sie den Deis-Kommandozeilen-Client installieren: $ brew install python $ sudo pip install deis

Schritt 3. Bauen Sie die Plattform

Deis bietet alle Möglichkeiten zur Erstellung, Bereitstellung und Verwaltung von Anwendungen. $ git clone https://github.com/deis/deis.git $ cd deis $ vagrant up $ ssh-add ~/.vagrant.d/insecure_private_key $ export DOCKER_HOST=tcp://172.17.8.100:4243 $ export FLEETCTL_TUNNEL=172.17.8.100 $ make pull

Schritt 4. Starten Sie die Plattform

Jetzt ist alles bereit, um die Plattform zu starten: $ make run Nachdem dieser Lauf abgeschlossen ist, können Sie sehen, dass die 7 Komponenten der Deis-Architektur mit dem Befehl list-units gestartet wurden: Der Builder, der Cache, der Controller, die Datenbank, der Logger, die Registry und der Router. Diese Architektur sieht der Architektur von CloudFoundry recht ähnlich. $ fleetctl list-units

UNITSTAATLADENAKTIVSUBDESCMACHINE
deis-builder.servicegestartetgeladenaktivLaufendeis-builder79874bde.../172.17.8.100
deis-cache.servicegestartetgeladenaktivLaufendeis-cache79874bde.../172.17.8.100
deis-controller.servicegestartetgeladenaktivLaufendeis-Kontrolleur79874bde.../172.17.8.100
deis-database.servicegestartetgeladenaktivLaufendeis-Datenbank79874bde.../172.17.8.100
deis-logger.servicegestartetgeladenaktivLaufendeis-logger79874bde.../172.17.8.100
deis-registry.servicegestartetgeladenaktivLaufendeis-registry79874bde.../172.17.8.100
deis-router.1.servicegestartetgeladenaktivLaufendeis-router79874bde.../172.17.8.100

Alternativ können Sie das Ergebnis auch überprüfen, indem Sie einen Blick in die virtuelle Maschine werfen: $ vagrant ssh -c "docker ps" Jetzt, da unsere Plattform läuft, können wir sie benutzen!

Schritt 5. Registrieren Sie einen neuen Benutzer bei Deis und fügen Sie den öffentlichen ssh-Schlüssel hinzu

$ deis register 172.17.8.100:8000 --username=mark --password=goddesses --email=mark.van.holsteijn@..com $ deis keys:add ~/.ssh/id_rsa.pub

Schritt 6. Einen Cluster erstellen

Erstellen Sie einen Anwendungscluster unter der Domäne 'dev.172.17.8.100.xip.io'. Die Option --hosts gibt alle Hosts im Cluster an: Der einzige verfügbare Host im Cluster ist derzeit 172.17.8.100. $ deis clusters:create dev dev.172.17.8.100.xip.io --hosts=172.17.8.100 --auth=~/.vagrant.d/insecure_private_key

Schritt 7. Holen Sie sich die App

Wir haben eine einfache, aber effektive node.js-Anwendung erstellt, die Ihnen zeigt, was passiert, wenn Sie die Anwendung skalieren oder eine neue Version pushen. $ git clone git@github.com:mvanholsteijn/sample_nodejs_cf.git $ deis apps:create appmon --cluster=dev $ deis config:set RELEASE=deis-v1 $ git push deis master

Schritt 8. Öffnen Sie Ihre Anwendung

Voilà! Ihre Anwendung läuft. Klicken Sie jetzt auf Überwachung starten. $ deis apps:open sollten Sie etwa so etwas sehen:

app-mon-1

Schritt 9. Skalierung Ihrer Anwendung

Um die Skalierung in Aktion zu sehen, geben Sie den folgenden Befehl ein: $ deis ps:scale web=4 Es werden 3 neue Container gestartet, die in der Liste angezeigt werden.

app-mon-4

Schritt 10. Aktualisieren Ihrer Anwendung

Nehmen Sie nun eine Änderung an der Anwendung vor, ändern Sie z.B. die Nachricht in 'Greetings from Deis release' und pushen Sie Ihre Änderung: $ git commit -a -m "Message changed" $ git push deis master Nach einer Weile werden Sie folgendes auf Ihrem Monitor sehen!

app-mon-8

Schritt 11. Blick auf CoreOS

Sie können fleetctl erneut verwenden, um sich die neuen Dienste anzusehen, die der Plattform hinzugefügt wurden!

$ fleetctl list-units

UNITSTAATLADENAKTIVSUBDESCMACHINE
app-mon_v7.web.1-announce.servicegestartetgeladenaktivLaufenapp-mon_v7.web.1 anmelden79874bde.../172.17.8.100
app-mon_v7.web.1-log.servicegestartetgeladenaktivLaufenapp-mon_v7.web.1 log79874bde.../172.17.8.100
app-mon_v7.web.1.servicegestartetgeladenaktivLaufenapp-mon_v7.web.179874bde.../172.17.8.100
app-mon_v7.web.2-announce.servicegestartetgeladenaktivLaufenapp-mon_v7.web.2 ankündigen79874bde.../172.17.8.100
app-mon_v7.web.2-log.servicegestartetgeladenaktivLaufenapp-mon_v7.web.2 log79874bde.../172.17.8.100
app-mon_v7.web.2.servicegestartetgeladenaktivLaufenapp-mon_v7.web.279874bde.../172.17.8.100
app-mon_v7.web.3-announce.servicegestartetgeladenaktivLaufenapp-mon_v7.web.3 ankündigen79874bde.../172.17.8.100
app-mon_v7.web.3-log.servicegestartetgeladenaktivLaufenapp-mon_v7.web.3 log79874bde.../172.17.8.100
app-mon_v7.web.3.servicegestartetgeladenaktivLaufenapp-mon_v7.web.379874bde.../172.17.8.100
app-mon_v7.web.4-announce.servicegestartetgeladenaktivLaufenapp-mon_v7.web.4 ankündigen79874bde.../172.17.8.100
app-mon_v7.web.4-log.servicegestartetgeladenaktivLaufenapp-mon_v7.web.4 log79874bde.../172.17.8.100
app-mon_v7.web.4.servicegestartetgeladenaktivLaufenapp-mon_v7.web.479874bde.../172.17.8.100
deis-builder.servicegestartetgeladenaktivLaufendeis-builder79874bde.../172.17.8.100
deis-cache.servicegestartetgeladenaktivLaufendeis-cache79874bde.../172.17.8.100
deis-controller.servicegestartetgeladenaktivLaufendeis-Kontrolleur79874bde.../172.17.8.100
deis-database.servicegestartetgeladenaktivLaufendeis-Datenbank79874bde.../172.17.8.100
deis-logger.servicegestartetgeladenaktivLaufendeis-logger79874bde.../172.17.8.100
deis-registry.servicegestartetgeladenaktivLaufendeis-registry79874bde.../172.17.8.100
deis-router.1.servicegestartetgeladenaktivLaufendeis-router79874bde.../172.17.8.100

 

Fazit

Deis ist eine sehr einfache und leicht zu bedienende Methode, um mit Docker und CoreOS ein PaaS zu erstellen. Die node.js-Anwendung, die wir erstellt haben, kann mit Deis ohne eine einzige Änderung bereitgestellt werden. In den folgenden Beiträgen werden wir uns näher mit Deis und CoreOS befassen!

Verfasst von

Mark van Holsteijn

Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.

Contact

Let’s discuss how we can support your journey.