Laravel Docker Tutorial

Laravel Docker Tutorial

Wie man eine Laravel Anwendung in Docker Container laufen lässt und welche Vorteile und Nachteile damit verbunden sind

Das PHP Framework Laravel hat es mit seiner einfachen Struktur und exzellenten Dokumentation zu den beliebtesten PHP Frameworks geschafft. Nach der Einrichtung der Serverumgebung lässt sich schon bald eine neue Web-Anwendung darstellen. Um den letzten Schritt zu vereinfachen kann man sich Docker zunutze machen. Eine einfache Erklärung findest du in diesem Laravel Docker Tutorial

Docker ermöglicht eine Virtualisierung und Isolierung von Services (siehe Docker in Wikipedia). Dadurch lassen sich Container schaffen, welche unabhängig vom zugrundeliegenden System ausführbar sind. Die einzige Bedingung ist, dass Docker auf dem System bereitsteht.

Vorteile der Virtualisierung mit Docker:

  • Services und Anwendungen laufen auf jedem System auf dem Docker zur Verfügung steht
  • Services und Anwendungen sind portierbar
  • Services und Anwendungen sind sehr leicht skalierbar

Nachteile der Virtualisierung mit Docker:

  • Erstmalig ein etwas höherer Einrichtungsaufwand
  • Basiswissen über Docker notwendig

0. Vorraussetzungen für dieses Tutorial

Voraussetzung für dieses Tutorial ist die Installation von Docker. Hierzu findest du unter dem folgenden Link nähere Informationen für dein Betriebssystem.

Dokumentation / Anleitung für die Installation von Docker

1. Installation von Laravel

Die Installation von Laravel lässt sich, Composer vorausgesetzt, einfach durchführen. Wie in der Dokumentation von Laravel beschrieben sind nur die bzw. der folgende Befehl dazu notwendig:

Download des Laravel Installers mit Composer. Dies ist nur einmalig notwenig!

composer global require "laravel/installer"

Erstellung einer neuen Laravel Applikation im aktuellen Ordner mit dem Namen laravel-application:

laravel new laravel-application

Falls der Befehl „laravel“ nicht gefunden wird muss dieser noch im Pfad (Verzeichnisse, in welche das System nach den ausführbare Anwendungen sucht) ergänzt werden. Hierfür findest du eine Anleitung für MacOS und eine Anleitung für Windows.

2. Vorbereitung der Docker Files

Damit Docker unsere Services für die Laravel Applikation bereitstellen kann, müssen wir die notwendigen Beschreibungen für unsere Dienste bereitstellen. Dadurch weiß Docker in Folge welche Services wie einzurichten sind und wie diese untereinander kommunizieren können.

In diesem Laravel Docker Tutorial werden für Laravel drei Container (Isolierte Services) verwendet:

  • Nginx als Webserver
  • PHP-FPM für die Verarbeitung der PHP Scripts
  • MySQL als Datenbank

Das wichtigste File ist das docker-compose.yml File welches Docker alle Services und die Beziehungen untereinander erklärt.

docker-compose.yml für Laravel Tutorial

Das File beschreibt drei Container:

  1. PHP-FPM Container mit Referenz zum Datenbank Container für Zugriffe auf die Daten
  2. Web Container für die Weiterleitung bzw. Antwort auf HTTP Anfragen
  3. MySQL Container für die Daten aus Laravel

Im docker-compose.yml werden zwei Build-Files referenziert, welche vorgeben wie der Service des Containers aufgebaut wird. Für das File web.dockerfile, welches ebenfalls so wie das docker-compose.yml im Stammverzeichnis des neuen Laravels platziert wird, wählen wir den folgenden Inhalt:


FROM nginx
COPY ./vhost.conf /etc/nginx/conf.d/default.conf

Als Inhalt für die vhost.conf Konfigurationsdatei, welche ebenfalls im Hauptverzeichnis abgelegt wird wählen wir den folgenden Inhalt.

vhost.conf für Laravel Tutorial

Als Letztes definieren wir das referenzierte app.dockerfile welches ebenfalls im Stammverzeichnis abgespeichert wird.


FROM php:7-fpm
RUN apt-get update && apt-get install -y libmcrypt-dev
mysql-client git zip --no-install-recommends
&& docker-php-ext-install mcrypt mysqli pdo pdo_mysql
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
&& php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
&& php composer-setup.php --filename=composer --install-dir=/usr/local/bin
&& php -r "unlink('composer-setup.php');"

Dies stellt uns eine PHP Umgebung mit den Laravel notwendigen Erweiterungen mit installiertem Composer bereit. Achtung: Der Hash für Composer kann sich in neuen Versionen ändern. Diesen bei Bedarf anpassen, mehr dazu findest du unter Composer Download.

3. Starten der Container 🙂

Die Installation von Docker die Voraussetzung für dieses Laravel Docker Tutorial. Um nun alle Container zu starten und zu verbinden ist nur ein einziger Befehl notwendig


docker-compose up -d

Damit werden die Container zuerst gebaut (lt. der Anleitung in den Dockerfiles web.dockerfile und app.dockerfile) und in Folge gestartet. Wenn ihr nun eure laufenden Container anseht sollte folgende Container laufen.

docker ps Command für Laravel Tutorial

Wie man in der Ausgabe sehen kann, werden die Ports 80 für HTTP und Port 3306 für MySQL an die jeweiligen Container weitergeleitet. Sollten die Container bei euch nicht startet, hängt das meist mit blockierten Ports zusammen. Bitte kontrolliert in diesem Fall ob nicht bereits ein Webserver oder eine MySQL Instanz die benötigten Port blockiert.

4. Anzeigen der Laravel Applikation

Wenn die Container erfolgreich gestartet wurden, ist die Laravel Applikation nun über den lokalen Computer verfügbar. Dazu öffnest du einfach deinen Web-Browser und öffnest den folgenden Link.

http://localhost

Nun solltest du deine Laravel Applikation bauen können, ohne eine lästige Installation von MySQL oder Apache / Nginx auf deinem lokalen Computer.

Viel Spaß!

Download

Die verwendeten Files kannst du unter dem folgenden Link herunterladen. Das ZIP Archiv beinhaltet die folgenden vier Dateien:

  • app.dockerfile
  • web.dockerfile
  • vhost.conf
  • docker-compose.yml

ZIP aller Tutorial Files