Führen Sie die Schritte zum Erstellen einer Laravel-Entwicklungsumgebung mit Docker aus

Führen Sie die Schritte zum Erstellen einer Laravel-Entwicklungsumgebung mit Docker aus

Vorwort

In diesem Artikel verwenden wir Docker, um eine schnelle, leichte und reproduzierbare Entwicklungsumgebung für Laravel- und Vue-Projekte auf einem lokalen PC zu erstellen, die nicht auf einer auf dem lokalen PC installierten Entwicklungssuite basiert (alle Abhängigkeiten der Entwicklungsumgebung werden im Docker-Build-Container installiert). Vue wird nur hinzugefügt, weil einige Projekte Vue in Laravel-Projekten für die getrennte Entwicklung von Front-End und Back-End verwenden. Die Entwicklungsumgebung muss den für die Front-End-Entwicklung erforderlichen Toolsatz installieren. Natürlich können Front-End und Back-End für die Entwicklung auch in zwei Projekte aufgeteilt werden. Dieses Thema fällt nicht in den Rahmen dieses Artikels.

Unsere Ziele sind also:

  • Installieren Sie Software wie Mamp/Wamp nicht lokal
  • Verwenden Sie keine virtuelle Maschine wie Vagrant
  • Installieren Sie das für die PHP-Entwicklung erforderliche Toolset nicht global auf Ihrem lokalen Computer.
  • Installieren Sie das für die Frontend-Entwicklung erforderliche Toolset nicht global auf Ihrem lokalen Computer.
  • Installieren Sie Mysql und Nginx nicht global auf dem lokalen Computer

Bevor Sie beginnen, müssen Sie einen Docker-Client installieren. Auf der offiziellen Docker-Website finden Sie detaillierte Installationsanweisungen.

Schritt 1: Holen Sie sich das Laravel-Quellpaket

Da Composer nicht auf unserem Computer installiert ist, können wir Composer nicht zum Erstellen eines Laravel-Projekts verwenden. Hier verwende ich cURL, um das neueste Laravel-Quellcodepaket direkt von GitHub herunterzuladen. Sie können auch wget oder git clone verwenden, um das Quellcodepaket abzurufen.

curl -L -O https://github.com/laravel/laravel/archive/v5.5.0.tar.gz /
&& tar -zxvf v5.5.0.tar.gz /
&& rm v5.5.0.tar.gz

Der obige Befehl dekomprimiert das Quellcodepaket, nachdem curl es heruntergeladen hat. Löschen Sie nach der Dekomprimierung das Quellcodepaket v5.5.0.tar.gz. Nach der Ausführung wird ein Projektverzeichnis laravel-5.5.0 angezeigt.

Schritt 2: docker-compose.yml hinzufügen

Erstellen Sie in Ihrem Projekt eine Datei docker-compose.yml.

Das Compose-Projekt ist ein offizielles Open-Source-Projekt von Docker und verantwortlich für die schnelle Orchestrierung von Docker-Container-Clustern. Wir wissen, dass Benutzer durch die Verwendung einer Dockerfile-Vorlagendatei problemlos einen separaten Anwendungscontainer definieren können. Hier verwenden wir vier Container, um PHP, Mysql und Nginx in vier verschiedene Container zu setzen, und verknüpfen die vier Anwendungscontainer durch Compose miteinander, um ein Projekt zu bilden.
Der Anfang der Layoutdatei sieht wie folgt aus:

Version: '2'
Leistungen:
  # unsere Dienstleistungen werden hier erscheinen

In der Orchestrierungsdatei wird jeder Container als Dienst bezeichnet und alle in der gesamten Anwendung verwendeten Dienste (also Container) werden unter „Dienste“ definiert.

App-Dienste

Der Container des APP-Dienstes führt den Code in unserem Projekt aus.

App:
 bauen:
  Kontext: ./
  Docker-Datei: app.dockerfile
 Arbeitsverzeichnis: /var/www
 Bände:
  - ./:/var/www
 Umfeld:
  - "DB_PORT=3306"
  – „DB_HOST=Datenbank“

Hinweise:

  • Wir verwenden die Image-Datei app.dockerfile, um unseren App-Container zu erstellen. In der Image-Datei konfigurieren wir das im Projekt verwendete PHP-Modul-Image und installieren außerdem NPM, um den Front-End-Code zu erstellen.
  • working_dir: /var/www legt das Arbeitsverzeichnis auf /var/www fest. Im Container wird der Projektcode im Verzeichnis /var/www abgelegt, einschließlich der mit der Docker Exec-App ausgeführten Befehle, die ebenfalls /var/www als aktuelles Arbeitsverzeichnis verwenden.
  • Volumes ist die Pfadeinstellung zum Mounten des Datenvolumes im Container. Hier definieren wir nur ein Datenvolume und mounten das Host-Projektverzeichnis in /var/www im Container. Auf diese Weise werden die Änderungen, die wir am Projektcode auf dem lokalen Computer vornehmen, sofort mit dem Container synchronisiert und umgekehrt. Änderungen am Code im Container werden auch umgehend an das Projekt auf dem lokalen Computer zurückgemeldet.
  • Umgebung legt den Namen der Umgebungsvariablen fest. Hier legen wir DB_PORT und DB_HOST fest, damit Sie die Werte dieser beiden Elemente in der .env-Datei im Projekt nicht ändern müssen. Natürlich können alle Umgebungsvariablen, die Sie in der Entwicklungsumgebung separat festlegen müssen, hier geschrieben werden. DotEnv, das Laravel zum Lesen der Konfiguration verwendet, erkennt, ob das System die angegebenen Umgebungsvariableneinstellungen hat. Wenn dies der Fall ist, wird die .env-Datei nicht gelesen.

Jetzt müssen wir die im obigen Build-Schritt erwähnte Datei app.dockerfile erstellen. Der spezifische Inhalt ist wie folgt:

VON php:7.1.22-fpm

# Pakete aktualisieren
Führen Sie apt-get update aus.

# Installieren Sie PHP- und Composer-Abhängigkeiten
Führen Sie apt-get install -qq git curl aus. libmcrypt-dev libjpeg-dev libpng-dev libfreetype6-dev libbz2-dev

# Löschen Sie das lokale Repository der abgerufenen Paketdateien
# Führen Sie apt-get clean aus

# Installieren Sie die benötigten Erweiterungen
# Hier können Sie jede andere Erweiterung installieren, die Sie während des Test- und Bereitstellungsprozesses benötigen
Führen Sie apt-get clean aus; docker-php-ext-install pdo pdo_mysql mcrypt zip gd pcntl opcache bcmath


# Installiert Composer, um Ihre PHP-Abhängigkeiten einfach zu verwalten.
FÜHREN SIE curl --silent --show-error https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer aus

# Knoten installieren
Führen Sie apt-get update &&\ aus.
  apt-get install -y --no-install-recommends gnupg &&\
  curl -sL https://deb.nodesource.com/setup_10.x | bash - &&\
  apt-get update &&\
  apt-get install -y --no-install-recommends nodejs &&\
  npm-Konfigurationssatzregistrierung https://registry.npm.taobao.org --global &&\
  npm install --global gulp-cli

CMD php-fpm

Hinweise:

  • Ich habe NPM und Composer zunächst im App-Container installiert, da sie während der Entwicklung häufig benötigt werden. Wenn es in die Produktionsumgebung freigegeben wird, wird im Allgemeinen ein separater Composer zum Erstellen des Projektcodes verwendet, anstatt ihn in den Container zu legen, in dem die Anwendung ausgeführt wird. Eine der Kernideen des Containers besteht darin, ihn einzeln zu halten, sodass Container mit derselben Rolle schnell hinzugefügt werden können.

Webdienste

Als nächstes müssen wir einen Webserver konfigurieren. Wir nennen diesen Container in der Orchestrierungsdatei Web.

Webseite:
 bauen:
  Kontext: ./
  Docker-Datei: web.dockerfile
 Arbeitsverzeichnis: /var/www
 Bände_von:
  - App
 Häfen:
  -8080:80

Hinweise:

  • volumes_from wird verwendet, um den im App-Dienst definierten Datenvolumenpfad wiederzuverwenden
  • Verwenden Sie Ports, um Port 8080 des lokalen Computers Port 80 des Webcontainers zuzuordnen. Auf diese Weise müssen wir die Hosts-Datei nicht in der Entwicklungsumgebung einrichten und können direkt über IP plus Port auf den Dienst zugreifen.

Der Webserver verwendet nginx, daher müssen wir eine nginx-Image-Datei verwenden, um diesen Container zu erstellen. Zuvor müssen wir den im Projekt verwendeten virtuellen Host basierend auf dem nginx-Image einrichten, daher benötigen wir eine Datei web.dockerfile, die wie folgt definiert ist:

VON nginx:1.10

Füge vhost.conf /etc/nginx/conf.d/default.conf hinzu

Gemäß der Definition der Image-Datei haben wir die vhost.conf im Projekt in die /etc/nginx/conf.d/default.conf des Containers kopiert, sodass die grundlegende nginx-Konfiguration konfiguriert ist. Die Definition in vhost.conf lautet wie folgt:

Server {
  hören Sie 80;
  Index: Index.php; Index.html;
  Wurzel /var/www/öffentlich;

  Standort / {
    versuche_dateien $uri /index.php?$args;
  }

  Standort ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass app:9000;
    fastcgi_index index.php;
    fastcgi_params einschließen;
    fastcgi_param SCRIPT_FILENAME $Dokumentstammsatz$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
  }
}

Hinweise:

  • Da es sich um eine Entwicklungsumgebung handelt, führen wir nur die einfachste Konfiguration durch und berücksichtigen keine Feinabstimmung.
  • fastcgi_pass app:9000; nginx leitet die PHP-Anforderung über fastcgi an Port 9000 des App-Dienstes weiter. Docker-Compose verbindet die in Diensten definierten Containerdienste automatisch und jeder Dienst wird über den Dienstnamen referenziert.

MySQL-Dienst

Als Nächstes konfigurieren wir den Mysql-Dienst. Der Unterschied zu den beiden oben genannten Diensten besteht darin, dass wir in den PHP-FPM- und Nginx-Containern die Dateien auf dem lokalen Computer so konfigurieren, dass sie für den Containerzugriff mit dem Container synchronisiert werden. Auf diese Weise können wir bei Änderungen an den Dateien während der Entwicklung schnell Feedback im Container erhalten und so unseren Entwicklungsprozess beschleunigen. Im Datenbankcontainer hoffen wir jedoch, dass die im Container erstellten Dateien dauerhaft gespeichert werden können (wenn der Standardcontainer zerstört wird, werden auch die im Container erstellten Dateien zerstört). Wir können die obige Funktion über das Datenvolumen von Docker erreichen, aber dieses Mal müssen wir die Dateien auf dem lokalen Computer nicht mehr auf dem Datenvolumen mounten. Der Docker-Client verwaltet den spezifischen Speicherort des erstellten Datenvolumens auf dem lokalen Computer.
Nachfolgend finden Sie die Einstellungen für den Datenbankdienst in der Orchestrierungsdatei

Version: '2'
Leistungen:

 Datenbank:
  Bild:mysql:5.7
  Bände:
   -dbdata:/var/lib/mysql
  Umfeld:
   - „MYSQL_DATABASE=Homestead“
   - "MYSQL_USER=homestead"
   - "MYSQL_PASSWORD=geheim"
   - "MYSQL_ROOT_PASSWORD=geheim"
  Häfen:
    - „33061:3306“

Bände:
 Datenbankdaten:

Hinweise:

  • Am Ende der Datei haben wir mit dem Befehl „volumes“ ein Datenvolumen mit dem Namen „dbdata“ erstellt (der Doppelpunkt nach „dbdata“ ist beabsichtigt. Dies ist eine Syntaxbeschränkung der YML-Datei und Sie müssen sich darüber keine Gedanken machen).
  • Nachdem wir das Datenvolumen definiert haben, verwenden wir das obige Format <Name>:<Verzeichnis>, um Docker anzuweisen, das dbdata-Datenvolumen im Verzeichnis /var/lib/mysql im Container bereitzustellen.
  • Die vier notwendigen Parameter, die das MySQL-Docker-Image benötigt, werden in Umgebungen festgelegt.
  • Beim Port-Mapping ordnen wir Port 33061 des lokalen Computers Port 3306 des Containers zu, sodass wir über das Datenbanktool auf dem Computer eine Verbindung zu Mysql in Docker herstellen können.

Orchestrieren Sie alle Dienste gemeinsam

Unten finden Sie die vollständige Datei docker-compose.yml. Über die Orchestrierungsdatei verknüpfen wir drei Anwendungscontainer miteinander, um den Server des Projekts zu bilden.

Version: '2'
Leistungen:

 # Die Anwendung
 App:
  bauen:
   Kontext: ./
   Docker-Datei: app.dockerfile
  Arbeitsverzeichnis: /var/www
  Bände:
   - ./:/var/www
  Umfeld:
   - "DB_PORT=3306"
   – „DB_HOST=Datenbank“

 # Der Webserver
 Webseite:
  bauen:
   Kontext: ./
   Docker-Datei: web.dockerfile
  Arbeitsverzeichnis: /var/www
  Bände_von:
   - App
  Häfen:
   -8080:80

 # Die Datenbank
 Datenbank:
  Bild:mysql:5.6
  Bände:
   -dbdata:/var/lib/mysql
  Umfeld:
   - „MYSQL_DATABASE=Homestead“
   - "MYSQL_USER=homestead"
   - "MYSQL_PASSWORD=geheim"
   - "MYSQL_ROOT_PASSWORD=geheim"
  Häfen:
    - „33061:3306“

Bände:
 Datenbankdaten:

Starten des Dienstes

Nachdem wir die Orchestrierungsdatei und die angegebene Docker-Image-Datei gemäß den obigen Schritten konfiguriert haben, können wir den Dienst mit dem folgenden Befehl starten. Nach der Ausführung werden die drei in der obigen Datei definierten Dienste gestartet.

docker-compose up -d

Beim ersten Start wird der Docker-Client langsam starten, da er die drei oben genannten Images herunterladen und den Dienst erstellen muss. Nachdem die Images heruntergeladen und erstellt wurden, werden nachfolgende Starts sehr schnell sein.

Laravel-Projekt initialisieren

Nach dem Start des Dienstes können wir das Laravel-Projekt initialisieren. Die Schritte sind dieselben wie in der offiziellen Dokumentation beschrieben, müssen jedoch im Container des gestarteten App-Dienstes ausgeführt werden:

docker-compose exec app composer installieren
docker-compose exec app npm install // Wenn das Frontend-Projekt eingebunden ist, führe die entsprechenden Befehle aus docker-compose exec app cp .env.example .env
Docker-Compose Exec App PHP Artisan Schlüssel: Generieren
Docker-Compose, Exec-App, PHP, Artisan, Optimieren
docker-compose exec app php artisan migrieren --seed
Docker-Compose Exec App PHP Artisan Make:Controller MyController

Hinweise:

  • docker-compose exec sendet den Befehl zur Ausführung an den angegebenen Container
  • app ist ein in docker-compose.yml definierter Dienst, ein Container, auf dem php-fpm ausgeführt wird
  • php artisan migrate ist der Befehl, der im Container ausgeführt werden soll

So zeigen Sie Nginx-Protokolle an:

  • docker ps findet die Container-ID des Nginx-Dienstes
  • docker exec -it <Container-ID> /bin/bash, um den Nginx-Container aufzurufen
  • Den spezifischen Pfad des Nginx-Protokolls finden Sie in der Datei vhost.conf im Projekt.

Nachdem Sie den obigen Befehl ausgeführt haben, können Sie über http://127.0.0.1:8080/ auf das Projekt zugreifen.

In meinem Github-Gist finden Sie eine Reihe von Referenzdateien zu Ihrer Information: https://gist.github.com/kevinyan815/fa0760902d29f19a4213b4a16fe0501b

Die Dateien im Gist sind etwas veraltet. Später wurden im Laufe der Nutzung einige neue PHP-Module und Node hinzugefügt. Composer wurde zuvor auch in einem separaten Container abgelegt. Aber ich glaube, dass Sie nach dem Lesen dieses Artikels schlau genug sind, diese Dateien Ihren Bedürfnissen entsprechend zu ändern.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Detaillierte Schritte zur Migration eines Laravel-Projekts in eine neue Entwicklungsumgebung mithilfe von Git
  • Detaillierte Erklärung zur Verwendung von Docker zum Erstellen einer Entwicklungsumgebung für Laravel- und Vue-Projekte
  • Detaillierte Erklärung zur Installation der Laravel-Entwicklungsumgebung mit Docker
  • Detaillierte Erläuterung der Installations- und Bereitstellungsmethoden der Laravel-Framework-Entwicklungsumgebung unter 4 Windows-Systemen

<<:  Detaillierte Analyse der Parameterdatei my.cnf von MySQL in Ubuntu

>>:  Detaillierte Erklärung des Lebenszyklus einer Angular-Komponente (I)

Artikel empfehlen

So verbinden Sie XShell und Netzwerkkonfiguration in CentOS7

1. Linux-Netzwerkkonfiguration Bevor Sie das Netz...

So deinstallieren Sie MySQL 5.7 unter CentOS7

Überprüfen Sie, was in MySQL installiert ist grep...

Vuex implementiert einen einfachen Einkaufswagen

In diesem Artikelbeispiel wird der spezifische Co...

Einführung in die neuen Funktionen von MySQL 8.0.11

MySQL 8.0 für Windows v8.0.11 offizielle kostenlo...

Designperspektive Technologie ist ein wichtiges Kapital der Designfähigkeit

Ein Designsoldat fragte: „Kann ich nur reines Des...

Detaillierte Installationshistorie von Ubuntu 20.04 LTS

In diesem Artikel wird die Erstellung einer USB-S...

Detaillierte Erklärung des JQuery-Selektors

Inhaltsverzeichnis Grundlegende Selektoren: Ebene...

Vorgehensweise bei der Installation einer virtuellen VMware Workstation-Maschine

Virtuelle Maschinen sind eine sehr praktische Tes...

Dateiupload über HTML5 auf Mobilgeräten

Meistens werden Plug-Ins zum Hochladen von Dateie...

Detaillierte Erklärung zur Verwendung des CSS-Zeigerereignisse-Attributs

Bei der Frontend-Entwicklung stehen wir in direkt...

So installieren und konfigurieren Sie Redis in CentOS7

Einführung Es ist nicht nötig, Redis im Detail vo...