© Liashko/Shutterstock.com
Entwickler Magazin
Deployments mit Docker und Dokku

Das PaaS-Traumpaar?

Das Deployment komplexer Webapplikationen ist eine Wissenschaft für sich. „Platform as a Service“ (PaaS) wie Heroku oder cloudControl haben den Markt revolutioniert, indem sie auch DevOps-unerfahrenen Entwicklern die Möglichkeit geben, ihre Anwendung mittels eines einfachen „git push“-Befehls zu deployen. Dokku ist eine Sammlung von Shell-Skripten, die es erlaubt, sich sein eigenes PaaS zu implementieren. Das Projekt ist nicht sehr komplex und darüber hinaus durch eine simple Plug-in-Architektur erweiterbar. In diesem Artikel wird demonstriert, wie man Dokku auf einem Server installiert und exemplarisch eine Anwendung dort deployt.

Sebastian Deutsch


Dokku ist die kleinste auf Docker basierende PaaS-Lösung, die es gibt. Dokku ist Open-Source-Software und wurde von Jeff Lindsay entwickelt [1]. Es besteht aus ungefähr 100 Zeilen Bashscript und nutzt die von Heroku Open Source zur Verfügung gestellten Build Packs, um definierte Umgebungen wie z. B. Rails- oder Node. js-Apps isoliert in Docker-Containern laufen zu lassen. Bei 9elements sind Docker und Dokku deshalb sehr interessante Technologien, weil sie den Deployment-Prozess von Applikationen signifikant vereinfachen. Es muss kein langwieriges Provisioning von Serverressourcen via Chef, Ansible oder Babushka stattfinden – ein einfaches git push genügt, um eine Applikation zu deployen. Jeder Entwickler, der Git bedienen kann, ist nun in der Lage, seine Arbeitsergebnisse zu deployen. Das ist insbesondere bei Feature Branches interessant, wo z. B. kurz ein Schulterblick seitens des Kunden benötigt wird.

Die Komponenten von Dokku

Dokku setzt voraus, dass man seine Applikation mit der Softwareversionskontrolle Git verwaltet. Ohne Git kann man Dokku leider nicht verwenden, da der Einstiegspunkt in das Deployment mittels eines Gitre­ceive-Hooks auf Serverseite stattfindet. Ähnlich wie bei Heroku richtet man bei Git einen weiteren Remote-Server ein. Dokku lauscht nun auf diesem remote, und wenn per SSH ein Update gepusht wird, dann startet die eigentliche Mechanik von Dokku über einen Gitreceive-Hook (Abb. 1).

Im ersten Schritt startet Docker das Image einer Standarddistribution in einem Container. Der nächste Schritt wird „Buildstep“ genannt. Im ersten Schritt des Buildsteps wird die Applikation in den Container mittels tar übertragen. Buildstep analysiert danach das Git Repository, indem es heuristisch testet, ob z. B. ein Gemfile für eine Ruby-Applikation vorhanden ist, oder ob es eine package.json-Datei, z. B. für eine Node.js-Applikation, gibt. Für die meisten Programmiersprachen sind diese so genannten Buildpacks verfügbar. Manche werden offiziell von Heroku bereitgestellt, andere wiederum werden von der Open-Source-Community gepflegt.

Nach dem Gitreceive können Plug-ins mittels des Plug-ins-Hooks ausgeführt werden. Die Applikation selbst wird über einen definierten Port verfügbar gemacht, der dann über einen nginx-Proxy per HTTP zur Verfügung gestellt wird. SSH Command ist ein so genannter „convenient-wrapper“, um Shell-Befehle via SSH auszuführen.

Abb. 1: Die Komponenten von Dokku

Lebenszyklus einer Dokku-Applikation

Die Grafik in Abbildung 2 veranschaulic...

Entwickler Magazin
Deployments mit Docker und Dokku

Das PaaS-Traumpaar?

Das Deployment komplexer Webapplikationen ist eine Wissenschaft für sich. „Platform as a Service“ (PaaS) wie Heroku oder cloudControl haben den Markt revolutioniert, indem sie auch DevOps-unerfahrenen Entwicklern die Möglichkeit geben, ihre Anwendung mittels eines einfachen „git push“-Befehls zu deployen. Dokku ist eine Sammlung von Shell-Skripten, die es erlaubt, sich sein eigenes PaaS zu implementieren. Das Projekt ist nicht sehr komplex und darüber hinaus durch eine simple Plug-in-Architektur erweiterbar. In diesem Artikel wird demonstriert, wie man Dokku auf einem Server installiert und exemplarisch eine Anwendung dort deployt.

Sebastian Deutsch


Dokku ist die kleinste auf Docker basierende PaaS-Lösung, die es gibt. Dokku ist Open-Source-Software und wurde von Jeff Lindsay entwickelt [1]. Es besteht aus ungefähr 100 Zeilen Bashscript und nutzt die von Heroku Open Source zur Verfügung gestellten Build Packs, um definierte Umgebungen wie z. B. Rails- oder Node. js-Apps isoliert in Docker-Containern laufen zu lassen. Bei 9elements sind Docker und Dokku deshalb sehr interessante Technologien, weil sie den Deployment-Prozess von Applikationen signifikant vereinfachen. Es muss kein langwieriges Provisioning von Serverressourcen via Chef, Ansible oder Babushka stattfinden – ein einfaches git push genügt, um eine Applikation zu deployen. Jeder Entwickler, der Git bedienen kann, ist nun in der Lage, seine Arbeitsergebnisse zu deployen. Das ist insbesondere bei Feature Branches interessant, wo z. B. kurz ein Schulterblick seitens des Kunden benötigt wird.

Die Komponenten von Dokku

Dokku setzt voraus, dass man seine Applikation mit der Softwareversionskontrolle Git verwaltet. Ohne Git kann man Dokku leider nicht verwenden, da der Einstiegspunkt in das Deployment mittels eines Gitre­ceive-Hooks auf Serverseite stattfindet. Ähnlich wie bei Heroku richtet man bei Git einen weiteren Remote-Server ein. Dokku lauscht nun auf diesem remote, und wenn per SSH ein Update gepusht wird, dann startet die eigentliche Mechanik von Dokku über einen Gitreceive-Hook (Abb. 1).

Im ersten Schritt startet Docker das Image einer Standarddistribution in einem Container. Der nächste Schritt wird „Buildstep“ genannt. Im ersten Schritt des Buildsteps wird die Applikation in den Container mittels tar übertragen. Buildstep analysiert danach das Git Repository, indem es heuristisch testet, ob z. B. ein Gemfile für eine Ruby-Applikation vorhanden ist, oder ob es eine package.json-Datei, z. B. für eine Node.js-Applikation, gibt. Für die meisten Programmiersprachen sind diese so genannten Buildpacks verfügbar. Manche werden offiziell von Heroku bereitgestellt, andere wiederum werden von der Open-Source-Community gepflegt.

Nach dem Gitreceive können Plug-ins mittels des Plug-ins-Hooks ausgeführt werden. Die Applikation selbst wird über einen definierten Port verfügbar gemacht, der dann über einen nginx-Proxy per HTTP zur Verfügung gestellt wird. SSH Command ist ein so genannter „convenient-wrapper“, um Shell-Befehle via SSH auszuführen.

Abb. 1: Die Komponenten von Dokku

Lebenszyklus einer Dokku-Applikation

Die Grafik in Abbildung 2 veranschaulic...

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang