How to dockerize Symfony 5 project with Nginx and Postgres (using docker-compose) 2020

Was geht ab! Haben Sie sich jemals gefragt, wie Sie Docker in Ihrem Projekt von Grund auf neu konfigurieren können? Oder wollten Sie schon immer mehr über Docker wissen? Toll! In diesem Tutorial werde ich erklären, wie Docker für eine Symfony-Anwendung sowohl für die lokale Entwicklung als auch für die Produktion eingerichtet wird Am Ende des Videos werde ich einige Informationen darüber geben, was zu tun ist, wenn Sie Probleme haben Ich werde oft gefragt: Warum sollte ich Docker verwenden? Ich habe viele Jahre ohne gearbeitet, meine Teamkollegen und ich machen es gut Also Ich habe eine Liste mit den Hauptgründen für die Verwendung von Docker erstellt: Dadurch werden die Kosten für den Wechsel zwischen verschiedenen Projekten erheblich reduziert, da Sie nicht mehrere Bibliotheksversionen auf Ihrem Computer verwalten müssen (Sie arbeiten beispielsweise an zwei Projekten, und eines verwendet PHP 5.4 und ein anderes PHP 7.2.) Außerdem reduziert Docker die Zeit, die für die Installation eines Projekts als neuer Entwickler erforderlich ist, erheblich Sie führen einfach einen Befehl aus und das Projekt wird ohne Probleme gestartet Docker ermöglicht die Reproduktion der Produktionsinfrastruktur (dasselbe Betriebssystem, dieselben Bibliotheken und dieselben Versionen). Mit Docker können Sie Ihre Tests direkt auf der CI-Plattform ausführen Ich werde dieses Tutorial mit der Vorbereitung des Dockers beginnen Konfiguration für die lokale Entwicklung In der Beschreibung dieses Videos finden Sie einen Link zum Endergebnis Sie können dies verwenden oder Sie können alles von Grund auf Schritt für Schritt mit mir tun Erstellen wir ein leeres Symfony-Projekt, das dockerisiert wird Ich würde vorschlagen, die offizielle Symfony-Website zu besuchen und die empfohlenen Möglichkeiten zum Erstellen eines neuen Projekts zu überprüfen In diesem Tutorial können wir mit Composer ein neues Symfony-Skelettprojekt erstellen Wenn Sie noch keinen Komponisten haben, besuchen Sie die offizielle Website und dort finden Sie Anweisungen zur Installation Alle Links sind in der Beschreibung zu diesem Video verfügbar Kopieren Sie diesen Befehl und führen Sie ihn im Terminal aus Es wird einige Zeit dauern, bis alle Abhängigkeiten installiert sind Dann öffne ich dieses Projekt in PhpStorm Außerdem brauchen wir einen Docker und Docker-Compose Sie können sie von offiziellen Websites installieren Auf meinem Computer sind sie bereits installiert Öffnen Sie PhpStorm und erstellen Sie eine neue Datei docker-compose.yml Zuerst sollten wir eine Version angeben, die für die Docker-Compose-Konfiguration verwendet wird Die aktuellste Version ist derzeit 3.8 Dann können wir Block “Dienste” definieren und der erste Dienst, den wir beschreiben werden, ist eine Datenbank Ich werde die Postgres-Datenbank verwenden, damit ich den Dienst gleich benenne Jetzt sollten wir ein Bild angeben Um ein korrektes Bild zu finden, sollten wir zur Docker Hub-Website gehen Dies ist eine Bibliothek für Containerbilder Geben Sie im Suchfeld eine Anwendung ein, nach der Sie suchen In unserem Fall handelt es sich um “Postgres” Es gibt mehrere Ergebnisse, aber wir benötigen eines mit der Bezeichnung “offizielles Bild” Dies bedeutet, dass solche Bilder ordnungsgemäß dokumentiert sind und sicherstellen, dass Sicherheitsupdates rechtzeitig angewendet werden Öffnen Sie dieses Ergebnis und scrollen Sie zu den unterstützten Tags Wir werden das Tag “12.4-alpine” verwenden, da es sich um die neueste Version von Postgres handelt und die Größe kleiner als das nicht-alpine Image ist Jetzt sollten wir dieses Image mithilfe von Umgebungsvariablen konfigurieren Gehen Sie zurück zum Docker-Hub und scrollen Sie zum Titel “Wie erweitern Sie dies?” image ” Hier finden Sie alle möglichen Umgebungsvariablen, von denen wir nur einige benötigen: POSTGRES_DB – Name der Datenbank, die erstellt wird; POSTGRES_USER – Benutzer, der erstellt wird; POSTGRES_PASSWORD – Legen Sie das Kennwort für den Benutzer fest, den wir zuvor angegeben haben; PGDATA – der Pfad, in dem alle Datenbankdateien gespeichert werden Dann sollten wir angeben, welche Ports dieser Dienst vom Container zum Host-Computer verfügbar macht Ich werde den Standard-Postgres-Port festlegen. Außerdem würde ich empfehlen, r anzugeben estart-Richtlinie als “On-Failure”, sodass der Container neu gestartet wird, wenn der Exit-Code einen On-Failure-Fehler anzeigt Wir können auch Hostordner für Datenbankdateien in den Container einbinden, sodass Sie alle Daten haben, auch wenn der Container entfernt wird Ich habe einen solchen Ordner als “db-data” bezeichnet und er befindet sich im Stammverzeichnis des Projekts

Flag “rw” bedeutet, dass dieser “freigegebene Ordner” zum Lesen und Schreiben verfügbar ist Jetzt können wir einen Dienst für unseren PHP-Code für beschreiben Damit werden wir unser eigenes Image aufbauen Wir sollten den “Build” -Block definieren und einen Kontext festlegen Der Kontext ist ein Pfad, auf den dieser Dienst Zugriff hat Als Bild sollten wir in diesem Fall einen Namen angeben, wie unser benutzerdefiniertes Bild benannt werden soll. Ich würde es “sf-docker / php” mit dem Tag “dev” und ich nennen ‘würde auch die Neustartrichtlinie “bei Fehler” wie für die Datenbank festlegen Für diesen Dienst habe ich mehrere Umgebungsvariablen für die Symfony-Anwendung festgelegt: APP_ENV entspricht “dev” APP_DEBUG “1”, was bedeutet, dass das Debuggen aktiviert wird. Außerdem würde ich die Zeitzone mit dem Standardwert “UTC” festlegen. Es ist sehr wichtig anzugeben, dass der PHP-Dienst davon abhängt auf Service “Postgres” Dies bedeutet, dass zuerst “postgres” gestartet wird und erst dann “php” Der letzte Dienst ist “nginx” und wir verwenden auch ein benutzerdefiniertes Image. Der Bildname lautet “sf-docker / nginx” mit dem Tag “dev” Die Neustartrichtlinie lautet ebenfalls “on-fail” Für nginx würde ich den Containerport zuordnen 80 zum Host-Port 8080 Und Nginx hängt vom PHP-Dienst ab. Erstellen wir eine Docker-Datei für unser benutzerdefiniertes Image. Ich würde eine Variable für die PHP-Version definieren. Die neueste Version ist derzeit 7.4.10. Ich möchte auch kleinere Versionen steuern , für die Sie jedoch angeben können Beispiel PHP 7.4 oder sogar PHP 7 und Docker ziehen die neueste Version für Sie. Der nächste Schritt ist die Angabe des Basisimages Ich verwende das offizielle Image “php-fpm-alpine”. Ich möchte Sie nicht mit jedem Aspekt dieser Konfiguration langweilen , daher verwende ich bereits vorbereiteten Code und erkläre die wichtigsten Teile Also werden zuerst alle Basisdienstprogramme installiert, dann wir Installieren Sie dann die Postgresql-Datenbank – pecl-Module wie Opcache und xdebug Aktivieren Sie sie. Install intl extension Und am Ende entfernen wir unnötige Dateien und Ordner Hier kopieren wir die Composer-Datei aus dem Image “Composer” Die Angabe des Tags “1” ist von entscheidender Bedeutung, da die neuere Version 2 bald verfügbar sein wird Ich würde dringend empfehlen, das Composer-Plugin “prestissimo” zu installieren, das Pakete parallel herunterlädt , um den Installationsprozess zu beschleunigen Hier geben wir das Arbeitsverzeichnis an. Kopieren Sie Composer-Dateien und installieren Sie alle Abhängigkeiten Anschließend erstellen wir Ordner für Cache und Protokolle Erstellen Sie jetzt einen neuen Ordner “docker / php” und erstellen Sie darin eine neue Datei “php.ini” Die Konfiguration wurde bereits von vorbereitet Ich und es besteht aus allgemeinen PHP-Einstellungen und Symfony-Leistungsempfehlungen Einige Konfigurationen sind für die lokale Entwicklung deaktiviert Duplizieren Sie diese Datei und nennen Sie “php-cli.ini” Ich würde die Konfiguration beibehalten, aber Sie möchten sie möglicherweise ändern. Wechseln Sie zurück zu Dockerfile und scrollen Sie zum Platz vor dem Installations-Composer-Plugin Kopieren Sie die Dateien php.ini und php-cli.ini vom Host-Computer in den Container Jetzt sollten wir eine Datei docker-entrypoint.sh erstellen Dieses Skript wird ausgeführt, wenn alle Vorbereitungen in Dockerfile abgeschlossen sind Hier installieren wir bei Bedarf Abhängigkeiten und installieren Assets Dieser Dienst wartet, bis die Verbindung zum Debase hergestellt ist. Wechseln Sie zum Dockerfile. Kopieren Sie das Docker-Entrypoint-Skript in das Verzeichnis local / bin und machen Sie es ausführbar. Legen Sie nun unser Skript als Entrypoint fest Öffnen Sie die Datei docker -compose .yml

Hängen Sie den Stammprojektordner in / app ein und setzen Sie die Flags “rw” und “cached” Ich habe einen Link in die Beschreibung eingefügt, wenn Sie mehr über alle verfügbaren Flags erfahren möchten. Dockerfile für den PHP-Dienst ist bereit und jetzt beginnen wir mit nginx Es ist möglich, eine Docker-Datei für mehrere Dienste zu verwenden Es heißt mehrstufige Builds Ich werde es demonstrieren Open Dockerfile Definieren Sie eine Variable für die Nginx-Version Die aktuellste Version ist 1.18 Scrollen Sie nach unten und geben Sie ein anderes Basisbild nginx-alpine an Jetzt können wir diese Phase mit einem eindeutigen Namen markieren Scrollen Sie zum Anfang und markieren Sie auch die erste Stufe Jetzt sollten wir diese Namen als Referenzen in der Docker-Compose-Datei verwenden, indem wir die Eigenschaft “target” angeben. Wechseln Sie zu Dockerfile und geben Sie das Arbeitsverzeichnis für nginx an. Hängen Sie den lokalen Ordner “public” in den Container und markieren Sie ihn als gelesen erstellen Sie nur neue Ordner „nginx / conf.d“ und im Inneren eine Datei „default.conf“ Ich habe eine Standard vorbereitet nginx Konfiguration für Symfony – Anwendung Es gibt einen Stammordner einige benutzerdefinierte Konfiguration für Abschnitt api Endpunkte für die Profilierung Rewrite – Logik Abschnitt zu verarbeiten PHP – Dateien und Ausgabe nginx Protokolle in der Standardausgabe, so dass sie in Docker verfügbar sein wird protokolliert Lassen Sie sich dieses Add Konfiguration in Nginx-Container Jetzt können wir endlich das Docker-Setup testen! Führen Sie “Docker-Compose Up” im Terminal aus. Beim ersten Start lädt Docker alle erforderlichen Images herunter und es wird einige Zeit dauern, aber beim nächsten Start wird Docker viel schneller gestartet Und wir können sehen, dass der PHP-Container keine Verbindung zur Datenbank herstellen kann Beenden wir Docker durch Drücken von Strg + C Standardmäßig verfügt das Symfony-Skeleton-Projekt nicht über ORM, daher sollten wir es installieren Wechseln Sie zum Terminal und fügen Sie orm-pack über Composer hinzu. Nach der Installation erhalten Sie einen neuen Eintrag in der ENV-Datei mit DATABASE_URL. Wir sollten ihn ändern: Ersetzen Sie “mysql” durch “postgres”. Für andere Parameter kehren wir schnell zur Docker-Compose-Datei zurück Wir sollten genaue Werte verwenden, die wir im Postgres-Dienst angegeben haben. Der Hostname sollte in den Dienstnamen geändert werden, der in der Docker-Compose-Datei definiert ist In unserem Fall ist es “postgres” Lassen Sie uns Docker-Compose erneut ausführen Und jetzt hat alles ohne Probleme begonnen. Ok, Stop Docker Sie können auch ein Projekt mit dem Befehl “Docker-Compose Up-D” starten

Das Flag “-d” bedeutet, dass das Projekt als Daemon gestartet wird Führen Sie “docker ps” aus, um zu überprüfen, ob alle Container ordnungsgemäß ausgeführt werden Auch hier sind Sie die wichtigsten Informationen über das Ausführen von Containern Um zu sehen, etwas im Inneren des Behälters, Typ „Docker-compose“, dann „exec“ und den Namen eines Dienstes ausführen, die verwendet werden soll, und dann ein Befehl, der Sie zu Demonstrationszwecken ausführen möchten Ich habe Beispielcode hinzugefügt Es gibt OrderController und drei Entitäten In OrderController erhalte ich eine Bestellung und gebe sie zurück. Testen wir sie Ich verwende ein Tool Postman, um API-Anfragen zu senden Überprüfen Sie die Infobox und die Beschreibung. Wenn Sie daran interessiert sind, wie eine API-Anwendung mit Symfony Ok erstellt wird, wird sie gestartet und ich kann jetzt Anfragen senden Und wir haben eine Antwort bekommen Gehen Sie zurück zum Controller und ich würde einfach die Bestellvariable durch eine Zeichenfolge ersetzen, um zu zeigen, dass unser Code mit dem Docker-Container synchronisiert ist Und jedes Mal, wenn Sie den Code ändern, ist er sofort im Container verfügbar Führen Sie die Anfrage noch einmal aus … und wir haben unseren Teststring erhalten Okay Bei einigen Betriebssystemen tritt ein Problem auf, bei dem bereitgestellte Ordner zu Leistungseinbußen führen können Beispielsweise wird Mac-Benutzern nicht empfohlen, Ordner wie “var” bereitzustellen, da die Anwendung viele Anforderungen an Dateien in diesem Ordner stellt und die Leistung wirklich abnimmt Es gibt ein offenes GitHub-Problem im Docker-Repository. Der Link befindet sich in der Beschreibung, wenn Sie an weiteren Details interessiert sind Als Lösung können gemountete Ordner durch benannte gemountete Volumes ersetzt werden Ich würde empfehlen, gemountetes Volume für Datenbankdateien und den Ordner “var” zu verwenden Erstellen Sie dazu den Abschnitt “Volumes” und geben Sie einen beliebigen Namen für Ihre Volumes an Ich würde sie “db-data” und “var” nennen. Ersetzen Sie jetzt einen gemounteten Pfad durch den Datenträgernamen Für den PHP-Dienst sollten wir einen Eintrag für ein neues Datenträger hinzufügen Wenn die Leistung Ihrer Anwendung sehr langsam ist, können Sie auch den Herstellerordner verschieben in montiertes Volumen In diesem Fall erhalten Sie jedoch vom Host-Computer keinen Zugriff auf den Inhalt dieses Ordners Dies bedeutet, dass Sie keine Bundles lokal installiert haben und die automatische Vervollständigung für solche Klassen natürlich nicht funktioniert Kürzlich habe ich einen guten Artikel zum Synchronisieren von Dateien mithilfe eines Zwischencontainers gefunden Aber es liegt wirklich an Ihnen, zu entscheiden, ob es sich lohnt Und was tun Sie, um Docker auf dem Mac zu beschleunigen? Schreiben Sie mit Ihrer Lösung einen Kommentar zu diesem Video ———————- * Weitere Informationen zu Docker-Volumes * ———— ———- Für die lokale Entwicklung ist es sehr wichtig, dass Sie Ihren Code debuggen können Lassen Sie uns also xdebug einrichten. Erstellen Sie unter dem Ordner docker / php eine neue Datei xdebug.ini. Sie können dieselbe Konfiguration verwenden oder an Ihre Bedürfnisse anpassen Die wichtigsten Teile sind Remote-Port und IDE-Schlüssel Öffnen Sie Dockerfile und kopieren Sie die Datei xdebug.ini in den Container Gehen Sie zu docker-compose.yml und in pHP – Dienst neue Umgebungsvariablen XDEBUG_CONFIG und PHP_IDE_CONFIG öffnen PhpStorm Vorlieben und die Suche nach „debug“ in xdebug Abschnitt Änderung Port hinzufügen ein exakt die Sie in der Datei angegeben haben, auf „Add – Konfiguration“ xdebug.ini klicken und dann on plus Wählen Sie “PHP Remote Debug”. Geben Sie einen beliebigen Namen für diese Konfiguration ein und aktivieren Sie die Filterung nach IDE-Schlüssel Klicken Sie auf drei Punkte, um einen neuen Server hinzuzufügen. Klicken Sie auf plus und geben Sie einen Namen für diesen Server an. Der Host lautet “localhost” und Port 8080 wie wir Legen Sie es in der Docker-Compose-Datei fest Außerdem sollten wir die Pfadzuordnung aktivieren. Hier sollten wir den Hostpfad für das Projekt dem Projektpfad im Container zuordnen. Geben Sie im IDE-Schlüsselfeld den Schlüssel an, den Sie in xdebug.ini hinzugefügt haben. Übernehmen Sie die Änderungen und gehen Sie zu terminal Führen Sie “docker-compose down -v” aus, um Container zu stoppen und Volumes zu entfernen Jetzt sollten wir Container neu erstellen, indem wir “docker-compose up -d” mit dem Flag “–build” ausführen Sobald Sie Volumes entfernen, werden Datenbankdateien als entfernt So gut ich Migrationen laufe neu erstellen Tabellen öffnen OrderController, Breakpoint hinzufügen und Debugger

In Debugger Registerkarte starten Sie der IDE – Schlüssel sehen zur Zeit Lassen Sie sich Test es verwendet wird Öffnen Sie den Postman und senden Sie die Anfrage. Der Debugger hat den Prozess beendet und Sie haben Zugriff auf alle Variablen. So funktioniert es wie erwartet Jetzt zeige ich Ihnen, wie Sie eine Verbindung zu einer Datenbank herstellen, die im Docker ausgeführt wird Öffnen Sie das Fenster Datenbank. Klicken Sie auf Plus -> Datenquelle -> PostgreSQL Legen Sie einen Namen fest Host als localhost beibehalten Als Benutzer verwenden Sie “sf_user” und für das Kennwort “random_password”. Ändern Sie den Datenbanknamen in “test” Klicken Sie auf “Verbindung testen” und es wurde erfolgreich bestanden. Änderungen übernehmen Im Datenbankfenster haben Sie Ihre Datenbank mit allen Tabellen Öffnen wir zum Beispiel die Tabelle app_order und Sie können ihre Datensätze sehen Jetzt möchte ich Ihnen zeigen, wie Sie den PHP-Interpreter vom Docker in PhpStorm integrieren Öffnen Sie die PhpStorm- Einstellungen und geben Sie “php” in das Suchfeld ein In der Dropdown-Liste für Cli-Interpreter sehen Sie Ihr lokales PHP Wenn verfügbar oder einfach nichts Klicken Sie auf drei Punkte, um einen neuen Interpreter hinzuzufügen Klicken Sie dann auf Plus und wählen Sie in diesem Fenster “From Docker” aus. PhpStorm füllt einige Informationen vorab aus, überprüft, ob sie korrekt sind, und klickt auf “OK” Sie sollten P sehen HP- und Xdebug-Versionen Änderungen übernehmen Öffnen Sie die Datei index.php und fügen Sie einen Haltepunkt hinzu. Jetzt können Sie diese Datei ausführen, indem Sie auf “Debug index.php” klicken. Sie können sehen, dass der Prozess unterbrochen und der Debugger ausgelöst wurde Ein weiterer Anwendungsfall, wie Sie diese Funktion verwenden können führt Unit-Tests direkt in PhpStorm aus Wir sollten PHPUnit installieren, zum Terminal wechseln und “symfony / phpunit-bridge” über Composer hinzufügen. Nach Abschluss der Installation sollten wir phpunit ausführen, um alle Abhängigkeiten zu installieren Wechseln Sie nun zu PhpStorm und öffnen Sie die Klasse OrderController Gehe zu Menü “Navigieren” und klicken Sie auf “Test” Klicken Sie hier auf “Neuen Test erstellen …” Überprüfen Sie, ob Klassenname und Verzeichnis korrekt sind Im Test würde ich eine neue Instanz des Controllers erstellen und einen Haltepunkt hinzufügen Öffnen Sie die Einstellungen und suchen Sie nach “test” Gehen Sie zu “Test Frameworks” und fügen Sie neues “PHPUnit” hinzu, wählen Sie den zuvor erstellten Interpreter aus Wählen Sie in der PHPUnit-Bibliothek “Path to phpunit” und geben Sie einen Pfad ein, der oben erwähnt wurde Es wird das Projektstammverzeichnis sein und dann bin / phpunit eingeben Klicken Sie auf die Schaltfläche ” Aktualisieren”. Das ist es. Klicken Sie auf “OK” und lassen Sie uns den Test mit Debug ausführen. Und es funktioniert perfekt Ich würde einige Aussagen hinzufügen. Der Test wurde erfolgreich bestanden und wir sehen die Ergebnisse im Fenster An diesem Punkt funktioniert unser Docker-Setup für die lokale Entwicklung perfekt Bereiten wir die Docker-Konfiguration für die Produktion vor Kopieren Sie die Docker-Compose-Datei und nennen Sie sie docker-compose_prod.yml Ich zeige Ihnen, wie Sie Ihre Anwendung im Docker starten, wenn sich die Datenbank separat befindet, z. B. auf einem anderen Server. Entfernen Sie also zuerst das Postgres-Dienst- Änderungs-Tag von “dev” zu “latest” Ändern Sie auch die Symfony-Umgebung von “dev”

zu “prod”. Entfernen Sie alle Umgebungsvariablen mit Ausnahme der Zeitzone, entfernen Sie “abhängige_on” und “Volumes” Ändern Sie für nginx auch das Tag in “neueste”, entfernen Sie Volumes und entfernen Sie sie Volumes Block Für die Prod-Version sollten wir eine andere Docker- Datei angeben. Vorhandene Docker- Datei duplizieren und Dockerfile_prod nennen Hier sollten wir das xdebug-Modul entfernen und es konfigurieren. Außerdem werden wir eine separate PHP-Konfiguration für die Produktion erstellen Dann sollten wir alle erforderlichen Dateien und Ordner vom Host-Computer in den Container verschieben Da sich alle erforderlichen Dateien bereits im Container befinden, können wir Skripts nach der Installation ausführen Skripte nach der Installation sind solche Skripte, die Sie in der Datei composer.json definieren können. Sie werden automatisch ausgeführt, wenn Sie “composer install” ausführen In meinem Fall gibt es Skripte zum Löschen des Cache und zum Installieren von Assets, für die ich keinen Root-Benutzer verwenden möchte In der Produktionsumgebung erteile ich dem Benutzer also Berechtigungen für bestimmte Ordner. Anschließend definieren wir, dass dieser Benutzer zum Ausführen aller Befehle in diesem Container verwendet wird Im Abschnitt nginx sollten alle Assets kopiert werden, die in der vorherigen Phase generiert wurden Dazu können wir den Befehl COPY mit dem Flag “from” verwenden und den Stufennamen und den Pfad zum Ordner oder zur Datei angeben, die in diesen Container verschoben werden sollen Und … entfernen wir das Volume für den var-Ordner Kopieren Sie die Datei php.ini und benennen Sie sie in php um. prod.ini Machen Sie dasselbe für die PHP-CLI-Datei Für die Produktion können wir jetzt ein erweitertes Caching aktivieren Ich würde die externe Postgres-Datenbank imitieren, indem ich die Datenbank in einem separaten Docker-Container ausführe Wichtige Teile sind Passwort, Benutzer und Datenbankname OK, Datenbank ist bereit Öffnen docker-composer_prod.yml und fügen wir die URL der Umgebungsvariablen-Datenbank hinzu Diese Variable überschreibt den in der ENV-Datei festgelegten Wert Wir sollten Produktionsanmeldeinformationen verwenden Als Host sollten wir die IP-Adresse angeben, unter der sich unsere Datenbank befindet, da meine Datenbank auf derselben ausgeführt wird Ich kann das Dienstprogramm “ifconfig” verwenden, um die richtige IP-Adresse abzurufen. In meinem Fall befindet sich die lokale IP-Adresse in Block en0. Wenn Sie Probleme haben, Ihre IP-Adresse abzurufen , habe ich in der Beschreibung des Artikels einen Link mit einer guten Erklärung hinzugefügt es benutze thi s Adresse als Hostname In der Produktionsumgebung ändert sich die IP-Adresse normalerweise nicht Gehen Sie zum Terminal und führen Sie die Docker-Compose-Datei aus und geben Sie die Docker-Compose-Prod-Datei an Wie wir sehen, sind alle Container aktiv. Jetzt können wir eine Konsole in einem Container starten Und hier sehen wir, dass die Umgebung produziert und das Debuggen deaktiviert ist Lassen Sie uns Migrationen ausführen Jetzt können wir unser Produktionssetup testen Öffnen Sie den Postboten und senden Sie die Anfrage Und wir haben eine richtige Antwort erhalten. In Ordnung An diesem Punkt haben wir die Docker-Konfiguration für die lokale Entwicklung und für die Produktion abgeschlossen

Ich möchte zeigen, wie Sie Ihr Leben mit Docker ein wenig einfacher machen können, indem Sie Makefile verwenden. Grundsätzlich werden wir dies tun Erstellen von Aliasen für die am häufigsten verwendeten Befehle Erstellen einer neuen Datei “Makefile” Zuerst definieren wir einen Befehl zum Starten eines Projekts mit Dev-Konfiguration Ein weiterer Befehl besteht darin, das Projekt herunterzufahren. Als Nächstes können wir einen Befehl definieren, um das Projekt neu zu erstellen und zu starten Von Grund auf würde ich auch einen Befehl hinzufügen, um eine Datenbank neu zu erstellen Es ist sehr nützlich während der Entwicklung Außerdem können wir einen Befehl hinzufügen, um ein Projekt mit Produktkonfiguration zu starten Es kann nützlich sein, einen Befehl zu haben, um nur Produktbilder zu erstellen Ok Lass es uns versuchen Wechseln Sie zum Terminal und geben Sie “make up” ein. Das Projekt wird gestartet Geben Sie “make d” ein und drücken Sie zweimal die Tabulatortaste Sie sehen mögliche Befehle Jetzt haben Sie die automatische Vervollständigung für alle Befehle Ist es nicht schön Sie sollten keine Probleme haben, wenn Sie in diesem Video alles richtig gemacht haben. Nehmen wir jedoch an, Sie haben eine Situation, in der etwas nicht funktioniert Was ist zu tun? Wo kann man nachsehen? Es kann verschiedene Gründe geben, warum Ihre Container nicht funktionieren Ich würde empfehlen, mit der Überprüfung der Protokolle zu beginnen Öffnen Sie das Terminal und überprüfen Sie die laufenden Docker-Container Sind alle Ihre Container in dieser Liste? Wenn nicht, führen Sie “docker ps -a” mit dem optionalen Filter nach Bildnamen aus, der in der Docker-Compose- Datei angegeben wurde. Dieser Befehl zeigt Ihnen sogar gestoppte Container an. Um die Containerprotokolle zu überprüfen, führen Sie “Docker-Protokolle” aus und geben Sie die Container-ID oder den Namen in den Protokollen an Normalerweise können Sie eine Problemquelle finden Als weitere schnelle Lösung können Sie lokale Bilder entfernen und erneut erstellen Wenn Sie einige Bilder nicht entfernen können, versuchen Sie zuerst, die Container anzuhalten und dann das Bild zu entfernen Wenn dies nicht hilft, können Sie versuchen, das Flag “force” zu verwenden Ein weiterer sehr nützlicher Befehl ist das Entfernen aller nicht verwendeten Container, Images und Volumes Dieser Befehl gibt nicht nur Speicherplatz frei, sondern entfernt auch beschädigte Images und Volumes Wenn Sie ein Projekt starten, erstellt Docker alle Images erneut Wenn während eines Image-Builds ein Fehler auftritt, überprüfen Sie alle Fehlermeldungen in der Ausgabe Normalerweise gibt es eine aussagekräftige Erklärung, und wenn nicht, nur eine Google-Fehlermeldung oder einen Fehlercode Es kann sich um einen Rechtschreibfehler, einen Syntaxfehler oder ein inkompatibles Paket handeln Ein weiterer häufiger Fehler bei der Verwendung von Dateien in Dockerfile, bevor sie tatsächlich bereitgestellt wurden Beispielsweise führen Sie einige Symfony-Befehle in Dockerfile aus oder führen “Composer Install” ohne das Flag “No-Scripts” aus. Vergessen Sie nicht, dass Composer standardmäßig Skripte nach der Installation ausführt. Sie sollten Docker-Entrypoint verwenden, wenn Sie einige Skripte ausführen möchten beim Starten eines Projekts Und vergessen Sie nicht, Google ist Ihr bester Freund Das war’s! Ich hoffe, dieses Tutorial hilft Ihnen dabei, Docker besser kennenzulernen Abonnieren Sie meinen Kanal, wenn Sie mehr über Symfony erfahren möchten Wenn Sie Fragen haben, lassen Sie diese im Kommentarbereich unten Vielen Dank fürs Zuschauen