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:
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. 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:
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:
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:
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:
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. 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:
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:
So zeigen Sie Nginx-Protokolle an:
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 Analyse der Parameterdatei my.cnf von MySQL in Ubuntu
>>: Detaillierte Erklärung des Lebenszyklus einer Angular-Komponente (I)
1. Linux-Netzwerkkonfiguration Bevor Sie das Netz...
Überprüfen Sie, was in MySQL installiert ist grep...
Hintergrund In diesem Artikel wird hauptsächlich ...
Für Frontend-Entwickler ist es eine zeitaufwändig...
In diesem Artikelbeispiel wird der spezifische Co...
MySQL 8.0 für Windows v8.0.11 offizielle kostenlo...
Ein Designsoldat fragte: „Kann ich nur reines Des...
In diesem Artikel wird die Erstellung einer USB-S...
Inhaltsverzeichnis Grundlegende Selektoren: Ebene...
Virtuelle Maschinen sind eine sehr praktische Tes...
Meistens werden Plug-Ins zum Hochladen von Dateie...
Bei der Frontend-Entwicklung stehen wir in direkt...
Inhaltsverzeichnis 1. Betreiber 1.1 Arithmetische...
Einführung Es ist nicht nötig, Redis im Detail vo...
Dieses Mal werde ich über die Fähigkeiten zur Ent...