So konfigurieren Sie nginx+php+mysql in Docker

So konfigurieren Sie nginx+php+mysql in Docker

Verstehen Sie zunächst eine Methode:

Aufrufen eines Docker-Containers mit Docker Exec

Docker bietet nach Version 1.3.X auch einen neuen Befehl exec zum Aufrufen des Containers. Diese Methode ist relativ einfacher. Schauen wir uns die Verwendung dieses Befehls an:

sudo docker exec --help 

Als nächstes verwenden wir diesen Befehl, um einen bereits laufenden Container aufzurufen

$ sudo docker ps 
$ sudo docker exec -it 775c7c9ee1e1 /bin/bash

1. Konfigurieren Sie nginx

Finden Sie das Nginx-Image auf Docker Hub

runoob@runoob:~/nginx$ Docker-Suche nginx
NAME BESCHREIBUNG STERNE OFFIZIELL AUTOMATISIERT
nginx Offizieller Build von Nginx. 3260 [OK]    
jwilder/nginx-proxy Automatisierter Nginx-Reverse-Proxy für Docker-C... 674 [OK]
richarvey/nginx-php-fpm Container mit Nginx + PHP-FPM-fähig ... 207 [OK]
million12/nginx-php Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS... 67 [OK]
maxexcloo/nginx-php Docker-Framework-Container mit Nginx und ... 57 [OK]
webdevops/php-nginx Nginx mit PHP-FPM 39 [OK]
h3nrik/nginx-ldap NGINX-Webserver mit LDAP/AD, SSL und Pro… 27 [OK]
bitnami/nginx Bitnami nginx Docker-Image 19 [OK]
maxexcloo/nginx Docker-Framework-Container mit Nginx-Instanz ... 7 [OK]
...

Hier ziehen wir das offizielle Bild

runoob@runoob:~/nginx$ docker pull nginx

Nachdem wir gewartet haben, bis der Download abgeschlossen ist, können wir den Spiegel mit REPOSITORY als nginx in der lokalen Spiegelliste finden.

runoob@runoob:~/nginx$ Docker-Bilder nginx
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
nginx latest 555bbd91e13c vor 3 Tagen 182,8 MB

Erstellen und Ausführen des Containers:

docker run --name mynginx -p 80:80 -v /var/www:/var/www -v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d -d nginx

Beachten:

-v fügt Dateizuordnungen hinzu, sodass auf dem Host geänderte Dateien direkt in den Container zugeordnet werden können. Das Verzeichnis hier wird entsprechend Ihrer tatsächlichen Situation zugeordnet.

Nach dem Erstellen und Ausführen des Containers wird nginx im Docker erfolgreich gestartet. Es ist nicht erforderlich, Docker aufzurufen, um nginx erneut zu starten. Andernfalls wird angezeigt, dass Port 80 und andere Ports belegt sind, da nginx bereits gestartet wurde.

Derzeit können Sie auf die von nginx konfigurierte Domänennamenüberprüfung zugreifen.

Die hier zugeordnete Datei conf.d enthält hauptsächlich die Nginx-Konfigurationsdatei und die PHP-Konfigurationsinformationen lauten:

# php
Server {
  Zeichensatz UTF-8;
  Maximale Client-Body-Größe: 128 M;

  listen 80; ## auf IPv4 hören
  #listen [::]:80 default_server ipv6only=on; ## auf IPv6 hören

  Servername www.baidu.com;
  Wurzel /var/www;
  Indexierung index.php;

  Standort / {
    #-e bedeutet, solange der Dateiname existiert, ist es wahr, wenn (!-e $request_filename){
      schreibe ^(.*)$ /index.php?s=$1 last um;
      brechen;
    }
    # Leite alles, was keine echte Datei ist, nach index.php um
    try_files $uri $uri/ /index.php$ist_args$args;
  }

  # Kommentar entfernen, um die Verarbeitung von Aufrufen nicht vorhandener statischer Dateien durch Yii zu vermeiden
  #Speicherort ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
  # versuche_Dateien $uri =404;
  #}
  #Fehlerseite 404 /404.html;

  # den Zugriff auf PHP-Dateien für das Verzeichnis /assets verweigern
  Standort ~ ^/assets/.*\.php$ {
    alles leugnen;
  }

  Standort ~ \.php$ {
    fastcgi_params einschließen;
    fastcgi_param SCRIPT_FILENAME $Dokumentstammsatz$fastcgi_script_name;
    fastcgi_pass 172.17.0.3:9000;
    #fastcgi_pass unix:/var/run/php5-fpm.sock;
    versuche_dateien $uri =404;
  }

  Standort ~* /\. {
    alles leugnen;
  }
}

Notieren Sie am Ende die IP-Adresse von fastcgi_pass, die in den FAQ zur PHP-Konfiguration ausführlich beschrieben wird.

2. PHP-Konfiguration

Finden Sie das PHP-Image auf Docker Hub

runoob@runoob:~/php-fpm$ Docker-Suche PHP
NAME BESCHREIBUNG STERNE OFFIZIELL AUTOMATISIERT
php Obwohl es für die Webentwicklung konzipiert ist, ist das PH... 1232 [OK]    
richarvey/nginx-php-fpm Container mit Nginx + PHP-FPM-fähig ... 207 [OK]
phpmyadmin/phpmyadmin Eine Weboberfläche für MySQL und MariaDB. 123 [OK]
eboraas/apache-php PHP5 auf Apache (mit SSL-Unterstützung), erstellt aus... 69 [OK]
php-zendserver Zend Server - die integrierte PHP-Anwendung... 69 [OK]    
million12/nginx-php Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS... 67 [OK]
webdevops/php-nginx Nginx mit PHP-FPM 39 [OK]
webdevops/php-apache Apache mit PHP-FPM (basierend auf webdevops/php) 14 [OK]
phpunit/phpunit PHPUnit ist ein programmiererorientiertes Testframework... 14 [OK]
tetraweb/php PHP 5.3, 5.4, 5.5, 5.6, 7.0 für CI und Run... 12 [OK]
webdevops/php PHP (FPM und CLI) Service-Container 10 [OK]
...

Hier ziehen wir das offizielle Bild mit dem Tag 5.6-fpm

runoob@runoob:~/php-fpm$ docker pull php:5.6-fpm

Nachdem wir gewartet haben, bis der Download abgeschlossen ist, können wir das Image mit dem REPOSITORY als php und dem Tag 5.6-fpm in der lokalen Spiegelliste finden.

runoob@runoob:~/php-fpm$ Docker-Bilder
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
php 5.6-fpm 025041cd3aa5 vor 6 Tagen 456,3 MB

Erstellen und führen Sie den PHP-Container aus:

docker run -p 9000:9000 --name phpfpm -v /var/www:/var/www -d php:5.6-fpm

Beachten Sie, dass Sie hier ein Filemapping erstellen müssen bzw. entsprechender PHP-Code im PHP-Container vorhanden sein muss. Die Dateizuordnung von nginx im vorherigen Schritt kann hier nicht gefunden werden. Wenn also keine Dateizuordnung vorhanden ist, kann 127.0.0.1:9000 die Datei in diesem Container nicht finden.

Häufig gestellte Fragen:

Wenn Sie nach dem Starten des PHP-Containers auf nginx zugreifen, wird Folgendes angezeigt: 502 Bad Gateway

Versuchen Sie Folgendes:

Zeigen Sie die IP-Adresse des PHP-Spiegels an

docker inspect --format='{{.NetworkSettings.IPAddress}}' phpfpm

Beispiel: 192.168.4.202

Ändern Sie dann die conf-Konfigurationsdatei von nginx, um den Wert von fastcgi_pass auf 192.168.4.202:9000 festzulegen

vim /docker/nginx/conf.d/default.conf

fastcgi_pass 192.168.4.202:9000;

Nach dem Neustart des Nginx-Containers können Sie normal darauf zugreifen.

3. MySQL-Konfiguration

Finden Sie das MySQL-Image auf Docker Hub

runoob@runoob:/mysql$ Docker-Suche MySQL
NAME BESCHREIBUNG STERNE OFFIZIELL AUTOMATISIERT
mysql MySQL ist eine weit verbreitete Open-Source-Relationship... 2529 [OK]    
mysql/mysql-server Optimierte MySQL Server Docker-Images. Erstellen... 161 [OK]
centurylink/mysql Bild, das MySQL enthält. Optimiert, um wie ... 45 [OK] zu sein.
sameersbn/mysql 36 [OK]
google/mysql MySQL-Server für Google Compute Engine 16 [OK]
appcontainers/mysql Centos/Debian-basierte anpassbare MySQL-Con... 8 [OK]
marvambass/mysql MySQL-Server basierend auf Ubuntu 14.04 6 [OK]
drupaldocker/mysql MySQL für Drupal 2 [OK]
azukiapp/mysql Docker-Image zum Ausführen von MySQL von Azuki - http:... 2 [OK]
...

Hier ziehen wir das offizielle Bild, getaggt 5.6

runoob@runoob:~/mysql$ docker pull mysql:5.6

Nachdem wir gewartet haben, bis der Download abgeschlossen ist, können wir das Image mit REPOSITORY als mysql und Tag 5.6 in der lokalen Spiegelliste finden.

runoob@runoob:~/mysql$ Docker-Bilder |grep mysql
mysql 5.6 2c0964ec182a vor 3 Wochen 329 MB

Erstellen und führen Sie den MySQL-Container aus:

docker run -p 3306:3306 --name mysql -v /usr/local/mysql:/etc/mysql/sqlinit -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

Der Hauptzweck der Dateizuordnung besteht hier darin, die SQL-Datenbankdatendatei des Hosts zum einfachen Importieren dem Docker-MySQL-Container zuzuordnen. Beachten Sie, dass das Verzeichnis des MySQL-Containers kein vorhandenes Verzeichnis sein darf, da es sonst überschrieben wird.

Beachten:

Hier ist es einfach, my.cnf zu erstellen, Sie müssen es also nicht selbst hinzufügen.

expandieren

Verwenden Sie das externe Tool Navicat, um im Docker eine Verbindung zu MySQL herzustellen

Geben Sie für den MySQL-Host die IP in Docker ein und erhalten Sie sie wie folgt:

Docker-Inspektion --Format = '{{.NetworkSettings.IPAddress}}' MySQL 

Geben Sie die SSH-Verbindungsinformationen ein:

Die Verbindung ist erfolgreich!

Beachten:

Die Startreihenfolge von Docker-Containern führt zu inkonsistenten Container-IP-Adressen. Wenn die Container-IP zum Herstellen einer Verbindung mit der Datenbank und FastCGI verwendet wird, achten Sie auf die Startreihenfolge der Container.

Starten Sie den Container neu: Docker-Neustart Containername/Container-ID

Container herunterfahren: docker stop xxx

Starten Sie den Container: docker start xxx

Zeigen Sie die laufenden Container an: docker ps

Alle Container anzeigen (einschließlich nicht laufender Container): docker ps -a

Container erstellen und ausführen: docker run

------------------------------------------

Häufige Fehler:

1. thinkphp meldet einen Fehler: Undefinierte Klassenkonstante 'MYSQL_ATTR_INIT_COMMAND'

Die Erweiterung pdo_mysql fehlt und die Datenbankverbindung schlägt fehl.

Suchen Sie php.ini, kopieren Sie eine Kopie von php.ini in /usr/local/etc/php im Docker, fügen Sie extension=pdo_mysql.so hinzu und starten Sie phpfpm neu.

Wenn es immer noch nicht funktioniert, besuchen Sie die phpinfo-Seite, um zu sehen, ob pdo_mysql vorhanden ist

Wenn nicht, existiert die Erweiterung nicht und muss kompiliert werden.

Die Kompilierungsmethode ist wie folgt:

Dies kann auf zwei Arten erreicht werden

Methode 1 (nicht verifiziert):

pdo_msql

Methode 2 (nachgewiesene Durchführbarkeit):

Gehen Sie zum PHP-Container von Docker, im PHP-Ordner:

Docker-PHP-Ext-Installieren Sie PDO PDO_MySQL

Wenn /usr/local/bin/docker-php-ext-enable gemeldet wird: /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini kann nicht erstellt werden: Verzeichnis nicht vorhanden

Lösung:

Erstellen Sie ein neues conf.d-Verzeichnis und die entsprechende docker-php-ext-pdo_msql.ini-Datei direkt unter dem Verzeichnis /usr/local/etc/php

Der Inhalt von docker-php-ext-pdo_msql.ini ist:

Erweiterung=pdo_mysql.so

2. thinkphp meldet Fehler _STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/Home/4e64ea6a2012f26b832b14cbc2152b28.php

Dies liegt daran, dass der Server-Cache-Ordner nicht über ausreichende Betriebsberechtigungen verfügt, d. h. Runtime hat keine Berechtigungen. Löschen Sie alle Cache-Dateien und erteilen Sie Runtime777 dann Berechtigungen.

sudo chmod 777 Runtime oder direkt 777 Berechtigungen auf der äußersten Ebene der Codebasis setzen

3. Das Bild des ThinkPHP-Bestätigungscodes kann nicht angezeigt werden

GD-Erweiterung fehlt, installieren Sie:

Docker-PHP-Ext-Installieren Sie PDO PDO_MySQL

Die folgenden Fehler können gemeldet werden:

Wenn die Konfiguration fehlschlägt, versuchen Sie --with-webp-dir=<DIR>
Wenn die Konfiguration fehlschlägt, versuchen Sie --with-jpeg-dir=<DIR>
Konfigurieren: Fehler: png.h nicht gefunden.

Installieren:

apt-get installiere libpng-dev libjpeg-dev

Erneut ausführen:

// Freetype-Konfiguration hinzufügen docker-php-ext-configure gd --enable-gd-native-ttf --with-freetype-dir=/usr/include/freetype2 --with-png-dir=/usr/include --with-jpeg-dir=/usr/include

// Installieren Sie docker-php-ext-install gd

php.ini fügt php_gd2.so hinzu

Die gd-Bibliothek wird in phpinfo angezeigt

Beachten Sie, dass der Bestätigungscode trotzdem nicht angezeigt und ein Fehler gemeldet wird, wenn in der gd-Bibliothek von phpinfo keine Freetype-Unterstützung vorhanden ist:

Aufruf der nicht definierten Funktion Think_imagettftext()

Wenn freeType in der gd-Bibliothek nicht verfügbar ist, führen Sie diese Schritte aus:

docker-php-ext-configure gd --enable-gd-native-ttf --with-freetype-dir=/usr/include/freetype2 --with-png-dir=/usr/include

Neu kompilieren:
docker-php-ext-gd installieren

Wenn ein Fehler auftritt:

Konfigurieren: Fehler: Freetype-Konfiguration nicht gefunden.

Führen Sie aus: apt-get -y install libfreetype6-dev und führen Sie dann den obigen Befehl weiter aus.

Bei Freetype in der gd-Bibliothek wird der Bestätigungscode normal angezeigt:

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:
  • So konfigurieren Sie https für Nginx in Docker
  • So installieren Sie Nginx in Docker und konfigurieren den Zugriff über https
  • So stellen Sie nginx mit Docker bereit und ändern die Konfigurationsdatei
  • nginx generiert automatisch Konfigurationsdateien im Docker-Container
  • So installieren und konfigurieren Sie Docker nginx
  • So führen Sie nginx in Docker aus und mounten das lokale Verzeichnis in das Image
  • Detailliertes Tutorial zur Konfiguration von Docker nginx + https-Subdomains

<<:  So ändern Sie die Konfiguration von „create-react-app“, ohne „eject“ zu verwenden

>>:  Detaillierte Erläuterung der Verwendung von Befehlen in MySQL zum Erreichen einer hierarchischen Suchhilfe

Artikel empfehlen

So zeigen Sie MySQL-Links an und löschen abnormale Links

Vorwort: Während des Betriebs und der Wartung der...

Implementierung eines Puzzlespiels mit js

In diesem Artikel wird der spezifische Code von j...

Implementierung eines einfachen Weihnachtsspiels mit JavaScript

Inhaltsverzeichnis Vorwort Ergebnisse erzielen Co...

HTML-Versionsdeklaration DOCTYPE-Tag

Wenn wir den Quellcode einer normalen Website öff...

Beispiel für eine Nginx-Cache-Konfiguration

Beim Entwickeln und Debuggen einer Webanwendung s...

Eine kurze Einführung in die Kernkenntnisse der VUE uni-app

Inhaltsverzeichnis Spezifikation a. Die Auslageru...

So lösen Sie das Problem der hohen Parallelität in der MySQL-Datenbank

Vorwort Wir alle wissen, dass Startups zunächst m...

Dieser Artikel hilft Ihnen, den Quellcode von PReact10.5.13 zu verstehen

Inhaltsverzeichnis render.js-Teil create-context....