Einfache Entwicklungsumgebung mit Docker

Als Entwickler stehe ich immer wieder vor der Herausforderung, unterschiedlichste Entwicklungsumgebungen für verschiedenste Projekte erstellen zu müssen. Diese sind idealerweise sehr nah an dem zukünftigen Produktiv-/Livesystem und zum Teil sehr komplex.

Ich bin jetzt schon seit vielen Jahren in der Entwicklung tätig und habe einiges an lokalen Entwicklungsumgebungen ausprobiert bzw. verwenden müssen. Ob auf Windows mit XAMPP, unter Linux direkt auf meinem Rechner, virtualisiert via Virtualbox oder Vagrant und zuletzt mit Docker auf dem eigenen Rechner.

Natürlich mag die Meinung von Entwickler zu Entwickler unterschiedlich ausfallen, aber dafür gibt es ja so viele Alternativen. Meine Wahl fällt mittlerweile immer auf Docker. Darum möchte ich auch einen kleinen Leitfaden an die Hand geben, wie ihr eure eigene Entwicklungsumgebung auf Docker aufsetzen könnt und wo es Probleme geben kann.

Schritt 1 ist wie immer, die notwendige Software zu installieren. Da dies je nach System immer anders aussieht, verweise ich euch hier auf die Installationsanleitung von Docker:
https://docs.docker.com/v17.09/engine/installation/

Um Docker auch als normaler User nutzen zu können, bitte folgende Schritte befolgen: https://docs.docker.com/v17.09/engine/installation/linux/linux-postinstall/

Schritt 2 ist die Installation von docker-compose. Hier bitte ebenfalls die offizielle Anleitung verwenden:
https://docs.docker.com/v17.09/compose/install/

Schritt 3 ist nicht mehr so einfach zu beschreiben. Hier kommt es sehr stark darauf an, welche Art von Projekt ihr entwickelt. Da ich hauptsächlich mit einem LAMP-Stack arbeite, führe ich diese Anleitung auch damit fort. Sofern ihr Fragen haben solltet, könnt ihr mir jederzeit eine E-Mail schreiben oder mich auf einem meiner Social-Media-Kanäle kontaktieren.

Apache Webserver als Beispiel

Um einen einfachen Webserver auf eurem System zu starten, könnt ihr folgenden Befehl verwenden:

$ docker run -dit --name my-first-apache2 -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:latest

Grob beschrieben macht dieser Befehl folgendes:

Starte einen neuen Docker Container (im Hintergrund) auf Basis des „httpd“ Images mit der aktuellsten/neuesten Version. Dieser Container hat den Namen „my-first-apache2“, macht Port 80 vom Container auf dem Hostsystem als Port 8080 verfügbar und mountet das aktuelle Verzeichnis nach „/usr/local/apache2/htdocs“ auf dem Container.

Für weitere Details zu „docker run“ bitte ich euch hier nachzulesen: https://docs.docker.com/engine/reference/run/

Wenn ihr nun „docker ps“ eingebt, solltet ihr eine ähnliche Ausgabe sehen wie hier gezeigt:

CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                  NAMES
6e4885023cdc        httpd:latest        "httpd-foreground"   9 seconds ago       Up 7 seconds        0.0.0.0:8080->80/tcp   my-first-apache2

Testen könnt ihr auch noch, indem ihr im Browser auf „localhost:8080“ geht. Ihr solltet dann den Inhalt des Verzeichnisses sehen, in dem ihr den Befehl gestartet habt.

Docker-Compose hilft

Damit ihr nicht jeden Bestandteil eures Projektes als einzelnen Container mittels „docker run“ starten müsst, gibt es eine tolle Erfindung die sich „docker-compose.yml“ heißt. Diese Datei ermöglicht es euch, mehrere Services (Docker Container) mit einem Befehl „docker-compose start|stop|up|down|kill|rm…“ zu steuern.

Wie genau Ihr mit Docker-Compose arbeitet, werde ich euch in einem zweiten Artikel näher bringen.