Detaillierte Erklärung zur Verwendung von Docker zum Erstellen einer Entwicklungsumgebung für Laravel- und Vue-Projekte

Detaillierte Erklärung zur Verwendung von Docker zum Erstellen einer Entwicklungsumgebung für Laravel- und Vue-Projekte

Dieser Artikel stellt die Entwicklungsumgebung von Laravel- und Vue-Projekten vor, die mit Docker erstellt wurden, und teilt sie mit Ihnen. Die Details sind wie folgt:


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 docker-compose.yml .

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、 Nginx放在四個不同的容器中,通過Compose, um die vier Anwendungscontainer zu einem Projekt zusammenzufügen.

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 docker exec app 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 environment fest. Hier legen wir DB_PORT und DB_HOST fest, damit wir 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 vhost 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 vhost.conf im Projekt in /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>:<dir> , um Docker anzuweisen, dbdata Datenvolumen im Verzeichnis /var/lib/mysql im Container bereitzustellen.
  • Die vier notwendigen Parameter, die das MySQL-Docker-Image benötigt, werden in environments festgelegt.
  • Beim ports -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.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Schritte zur Migration eines Laravel-Projekts in eine neue Entwicklungsumgebung mithilfe von Git
  • Führen Sie die Schritte zum Erstellen einer Laravel-Entwicklungsumgebung mit Docker aus
  • 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

<<:  Spezifische Verwendung globaler Variablen von node.js

>>:  Detaillierte Erläuterung der MySQL Master-Slave-Datenbankkonstruktionsmethode

Artikel empfehlen

Tutorial zur Verwendung von Docker Compose zum Erstellen von Confluence

Dieser Artikel verwendet die Lizenzvereinbarung „...

Schritte zum Kapseln von Element-UI-Popupkomponenten

Kapseln Sie el-dialog als Komponente ein Wenn wir...

Zabbix konfiguriert DingTalks Alarmfunktion mit Bildern

Umsetzungsideen: Zunächst müssen die Alarminforma...

JavaScript, um einen ausgefallenen Karusselleffekt zu erzielen

In diesem Artikel werden zwei Methoden zur Implem...

Tutorial zur manuellen Installation und Konfiguration von mysql8.0.11 winx64

Lassen Sie mich zunächst über meinen Alltag sprec...

Detailliertes Beispiel für JavaScript-Array-Methoden

Inhaltsverzeichnis Einführung Erstellen eines Arr...

So stellen Sie mit Docker schnell einen Elasticsearch-Cluster bereit

In diesem Artikel werden Docker Container (orches...