Laravel und Docker: Die perfekte Entwicklungsumgebung

aktualisiert am 16. April 2018, erstellt am 15. April 2018 von Dirk Helbert in Laravel
Laravel und Docker

Als Laravel Entwickler ist man immer darum bemüht eine optimale Entwicklungsumgebung zu haben. Laravel und Docker sind dabei zwei perfekte Partner für schnelle Entwicklung. Bisher habe ich VirtualBox oder Laravel Valet benutzt. Doch die beiden Möglichkeiten haben auch erhebliche Nachteile. Nachteile, die ich mit der Nutzung von Docker vermeiden möchte.

Ziel des Artikels ist eine einfache und reproduzierbare Entwicklungsumgebung mit Docker zu erstellen innerhalb von wenigen Minuten. Inspiriert wurde ich von Shane Osbourne und seinem Beitrag auf Medium.

Hol dir jetzt mein kostenloses E-Book
Geben Sie Ihre Email Adresse ein und klicken Sie auf den Knopf "Sofort Zugang erhalten".
Ich stimme zu, dass meine Daten beim Newsletter Provider Mailchimp gespeichert werden. ( Datenschutzerklärung und Datenschutz Mailchimp )
Mit der Anforderung des eBooks meldest du dich zu meinem kostenlosen E-Mail Newsletter mit relevanten Informationen zur Webentwicklung sowie meinen Büchern und Leistungen an.

Was ist Docker?

Docker ist eine Container Virtualisierung Software. Dabei werden einzelne Services in einem Container isoliert und unabhängig vom Betriebssystem ausgeführt. Im Vergleich zu einer Virtualisierung mit VirtualBox oder VMWare ist die Virtualisierung mit Docker sehr leichtgewichtig und spart Ressourcen auf dem Host System. Außerdem lassen sich Docker Container sehr schnell wieder von Grund auf neu initialisieren und es können sehr einfach komplette Produktivsysteme simuliert werden.

Warum nicht VirtualBox oder Laravel Valet?

Ich habe vor vielen Jahren mit VirtualBox angefangen und benutze es heute auf der Arbeit immer noch. Privat nutze ich seit einiger Zeit Laravel Valet, welches aber nur für Mac OS möglich ist. Viele Laravel Entwickler nutzen auch Laravel Homestead in Verbindung mit VirtualBox. VirtualBox benutzt mehr Systemressourcen als ein Docker Container. Bei Laravel Valet muss PHP, MySQL usw. auf dem Mac installiert sein und aktuell gehalten werden.

Gerade wenn man auch mal eine andere PHP Version testen will, dann ist eine Virtualisierung mit Docker einfach genial. Mehr über Docker erfährst du auf der What is Docker Seite

Vorbereitungen

Zuerst solltest du Docker für dein Betriebssystem installieren und zwar am besten die Docker Community Edition. Ich arbeite mit der Docker Version 18.03 und der Docker Compose Version 1.20.1.

Jetzt brauchst du noch ein Projektverzeichnis. Hier liegen dann später die beiden Verzeichnisse für die Docker Konfiguration und das Laravel Projekt. Ich nenne das hier einfach mal dockerprojekt.

Jetzt brauchst du noch eine aktuelle Laravel Version. Ich lade sie in dem Beispiel hier mit Curl runter. Du kannst auch einfach die Zip Datei von Github runterladen und dann entpacken. Wichtig ist, dass in dem dockerprojekt Verzeichnis ein laravel Verzeichnis liegt mit den entpackten Laravel Dateien.

Laravel und Docker konfigurieren

Docker Konfigurations Verzeichnis anlegen

Hier werden später alle Docker Konfigurationen abgelegt. Ich trenne die Konfiguration immer von dem eigentlichen Projekt. Das ist dann aufgeräumter.

Docker Compose Konfiguration

Zuerst erstelle ich eine docker-compose.yml Datei und öffne sie mit einem geeigneten Editor. Hier musst du aufpassen, dass keine Tabs in der Konfiguration vorkommen. Sonst gibt es beim Start einen Fehler. Ich benutze für solche Sachen gerne Atom du kannst aber auch vi oder jeden anderen Editor benutzen.

Am Anfang steht immer die Konfigurations Versionsnummer. In dem Fall ist es Version 3. Es kommt auf die Docker Version an, die du benutzt. Einige Konfigurationseinstellungen können während der Versionssprünge weggefallen sein. Eine Aufstellung der Versionsnummern findest du auf der Docker Seite Compose file versions and upgrading. Wenn du bereits eine aktuelle Version hast, dann kannst du meinem Beispiel einfach weiter folgen ohne Anpassungen vorzunehmen.

In der ersten Zeile steht also version: '3'. Direkt danach folgen die Services. In unserem Fall sind das app für die Laravel Anwendung, web für den Web Server nginx und database für die MySQL Datenbank.

app Service

In dem app Service wird die eigentliche Laravel Anwendung als Container konfiguriert. Wichtig ist hier dockerfile: app.dockerfile, das wir gleich noch erstellen werden. Unter volumes wird der Pfad von dem lokalen Verzeichnis ../laravel auf den Docker Container Pfad /var/www gemappt. Zusätzlich wird der Anwendung noch die Datenbank Informationen übergeben.

web Service

Der web Service enthält den Webserver nginx. Dieser wird über das web.dockerfile konfiguriert. Das machen wir dann im nächsten Schritt. Der Port 8080 wird dann auf den Port 80 gemappt. Damit lässt sich unsere Anwendung dann später mit 127.0.0.1:8080 aufrufen.

database Service

Der letzte Service ist der database Service. image ist hier für das Docker Image und in dem Fall nutzen wir MySQL 5.6. Du kannst auch MySQL 5.7 dort eintragen und es funktioniert direkt. Auch eine spätere Änderung der Version ist schnell möglich. Auch hier mappen wir wieder den Port.

Hier die gesamte docker-compose.yml:

app Service konfigurieren

Jetzt kommt der app Service. Hier installieren wir PHP, den MySQL Client, Imagick, Composer, Git und Zip. Man kann die RUN Befehle auch zusammenfassen. Ich habe sie hier einzeln aufgeführt, damit es übersichtlicher ist.

web Service konfigurieren

In meinem Beispiel benutze ich nginx als Webserver. Dieser lässt sich auch als Docker Container sehr einfach konfigurieren.

Hier wird nginx 1.10 installiert und unsere vhost.conf als default.conf für nginx verwendet.

Endlich starten

Nachdem jetzt alles konfiguriert ist, können wir unsere Composition starten:

Beim allerersten Start dauert das jetzt ein wenig. Es müssen einige Pakete aus dem Internet geladen werden. Das aktuelle Konsolen Fenster bleibt auch geöffnet. Hier erscheinen auch Log Daten der einzelnen Container.

Also öffne am besten eine neue Konsole und geht wieder in das dockerprojekt/docker Verzeichnis.

docker-compose exec führt auf dem Container app den Befehl mv .env.example .env aus. Das gilt auch für die beiden anderen Befehle. Hier wird die mitgelieferte Laravel Beispiel Konfiguration aktiviert, Composer aktualisiert alle benötigten Pakete und der Key wird generiert.

Der erste Aufruf im Browser

Du kannst jetzt im Browser http://localhost:8080 aufrufen und wooohoooooo. Wir sehen unsere Laravel Installation. Ist das nicht genial einfach?

Ein paar Meter extra

Da jetzt alles funktioniert machen wir noch die Probe ob auch die Datenbankverbindung einwandfrei läuft. Das sind die sprichwörtlichen extra Meter bzw. der Zusatzaufwand, wenn man es nüchtern aussprechen will.

Ok, also erweitern wir unsere Laravel Anwendung mal um die Authentifizierung.

Danach erstellen wir mit artisan tinker einen neuen Benutzer.
dann tinker

Jetzt kannst du einmal die Seite localhost:8080 im Browser neu laden. Oben rechts dann auf Login klicken und dich mit den eben erstellten Zugangsdaten einloggen. Wenn du eingeloggt bist, hat alles geklappt. Perfekt.

Wie du siehst, kann man in sehr kurzer Zeit eine Laravel Entwicklungsumgebung mit Docker erstellen. Vor allem ist dies Umgebung reproduzierbar. Mit ein paar Anpassungen kann man das auch für eine WordPress Entwicklungsumgebung machen. Hier sind keine Grenzen gesetzt. Einfacher geht es kaum.

Wenn dir der Beitrag gefallen hat, dann würde ich mich über einen Kommentar freuen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.