So erstellen Sie eine PHP+Nginx+Swoole+MySQL+Redis-Umgebung mit Docker

So erstellen Sie eine PHP+Nginx+Swoole+MySQL+Redis-Umgebung mit Docker

Betriebssystem: Alibaba Cloud ESC-Instanz centos7.4

Software: Docker-CE Version 18.09.3, Docker-Compose Version 1.23.2

1. Erstellen Sie ein Docker-Image mit der Erweiterung swoole-redis-pdo_mysql-gd

1. Erstellen Sie ein Dockerfile

vim Dockerdatei

2. Schreiben Sie in die Dockerfile-Datei

Von php:7.1-fpm
Führen Sie apt-get update && apt-get install -y \ aus.
  libfreetype6-dev \
  libjpeg62-turbo-dev \
  libpng-dev \
&& docker-php-ext-install -j$(nproc) iconv \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-configure pdo_mysql \
&& docker-php-ext-install pdo_mysql \
&& pecl installiere redis-4.3.0 \
&& pecl installiere swoole \
&& Docker-PHP-Ext-Aktivieren von Redis Swoole

3. Erstellen Sie ein benutzerdefiniertes PHP-Image. Vergessen Sie nicht den letzten '.', der das aktuelle Verzeichnis zum Erstellen des Images angibt.

docker build -t myphp4.

Führen Sie den Befehl aus. Aufgrund von Netzwerkproblemen dauert die Ausführung lange. Nach erfolgreichem Abschluss wird ein ähnlicher Code wie der folgende angezeigt.

...
Build-Prozess erfolgreich abgeschlossen
Installieren von „/usr/local/include/php/ext/swoole/config.h“
„/usr/local/lib/php/extensions/no-debug-non-zts-20160303/swoole.so“ wird installiert
Installation ok: channel://pecl.php.net/swoole-4.3.1
Die Konfigurationsoption „php_ini“ ist nicht auf den Speicherort von php.ini eingestellt.
Sie sollten "extension=swoole.so" zu php.ini hinzufügen
Zwischenbehälter entfernen ad1420f7554f
---> 2f2f332d73ce
2f2f332d73ce erfolgreich erstellt
Erfolgreich getaggt mit myphp4:latest

An diesem Punkt wurde das benutzerdefinierte myphp4-Image von Docker erfolgreich erstellt!

2. Erstellen Sie eine docker-compose.yml-Datei

mkdir pnsmr
CD PNSMR
vim docker-compose.yml

Schreiben Sie den folgenden Code

Version: '3.0'
Leistungen:
nginx:
  Bild: „nginx:latest“
  Häfen:
   - "10000:80"
  Bände:
   – /var/www/html:/usr/share/nginx/html
php-fpm:
  Bild: "myphp4"
  Bände:
  – /var/www/html:/usr/share/nginx/html
MySQL:
  Bild: "mysql:latest"
Redis:
  Bild: "redis:4.0"

Anweisungen ausführen

docker-compose up -d

Der Erfolg kann sich sehen lassen

WARNUNG: Die von Ihnen verwendete Docker Engine läuft im Swarm-Modus.

Compose verwendet den Schwarmmodus nicht, um Dienste auf mehreren Knoten in einem Schwarm bereitzustellen. Alle Container werden auf dem aktuellen Knoten geplant.

Um Ihre Anwendung im Swarm bereitzustellen, verwenden Sie „Docker Stack Deploy“.

Netzwerk „pnsmr_default“ mit dem Standardtreiber erstellen
pnsmr_php-fpm_1 erstellen ... fertig
pnsmr_redis_1 wird erstellt ... fertig
pnsmr_mysql_1 wird erstellt ... fertig
pnsmr_nginx_1 wird erstellt ... fertig

Bisher wurde der Nginx MySQL Redis PHP-Dienst gestartet

3. Ändern Sie jede Dienstkonfigurationsdatei

1. Geben Sie 127.0.0.1:9998 in den Browser ein. #Hier sollten Sie die IP-Adresse Ihres Servers eingeben. Anschließend sehen Sie das folgende Bild


2. Ändern Sie als Nächstes die Nginx-Konfigurationsdatei im Container. Verwenden Sie zunächst den Befehl, um die Docker-IP-Adresse jedes Containers anzuzeigen

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

Mit diesem Befehl können die IP-Adressen aller mit Docker-Compose geöffneten Container angezeigt werden. Das Ergebnis ähnelt der folgenden Abbildung. Die entsprechenden IP-Adressen können für die interne Kommunikation verwendet werden.

3. Kopieren Sie die Konfigurationsdatei des Nginx-Containers und ändern Sie sie, damit Nginx PHP analysieren kann.

docker cp pnsmr_nginx_1:/etc/nginx/conf.d/default.conf nginx.conf
vim nginx.conf

Ändern Sie den Code in den folgenden

Server {
  hören Sie 80;
  Servername localhost;

  #Zeichensatz koi8-r;
  #access_log /var/log/nginx/host.access.log main;

  Standort / {
    root /usr/share/nginx/html;
    Index Index.html Index.htm;
  }

  #Fehlerseite 404 /404.html;

  # Server-Fehlerseiten auf die statische Seite /50x.html umleiten
  #
  Fehlerseite 500 502 503 504 /50x.html;
  Standort = /50x.html {
    root /usr/share/nginx/html;
  }

  # Proxy für die PHP-Skripte an Apache, das auf 127.0.0.1:80 lauscht
  #
  #Standort ~ \.php$ {
  # Proxy-Passwort http://127.0.0.1;
  #}

  # Übergeben Sie die PHP-Skripte an den FastCGI-Server, der auf 127.0.0.1:9000 lauscht.
  #
  Standort ~ \.php$ {
    Stamm-HTML;
    fastcgi_pass 172.24.0.3:9000;#Hier müssen Sie die interne Docker-Kommunikations-IP Ihres PHP-Containers eingeben
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$fastcgi_script_name;
    fastcgi_params einschließen;
  }

  # Zugriff auf .htaccess-Dateien verweigern, wenn das Apache-Dokumentenstammverzeichnis
  # stimmt mit nginx überein
  #
  #Standort ~ /\.ht {
  # alles ablehnen;
  #}
}
docker cp nginx.conf pnsmr_nginx_1:/etc/nginx/conf.d/default.conf #Kopieren Sie die geänderte Konfigurationsdatei in den Container docker container stop pnsmr_nginx_1 
Docker-Container starten pnsmr_nginx_1 #Starten Sie den Nginx-Container neu, damit die Konfigurationsdatei wirksam wird vim /var/www/html/index.php #Erstellen Sie eine neue Datei index.php im lokalen Verzeichnis des Servers, geben Sie <?php phpinfo(); ein und speichern Sie sie vim /var/www/html/index.html #Erstellen Sie eine neue Datei index.html im lokalen Verzeichnis des Servers und geben Sie „hallowelt“ aus

Access 127.0.0.1:9998, HTML-Dateianalyse ist normal


Zugriff auf 127.0.0.1:9998/index.php, PHP-Dateianalyse ist normal


4. Testen Sie, ob MySQL und Redis effektiv sind

vim /var/www/html/redis.php #Wird verwendet, um zu testen, ob Redis erfolgreich konfiguriert ist<?php
$redis = neues Redis();
$redis->connect("172.24.0.4",6379);
$redis->set('test','dies ist ein Test für Redis');
echo $redis->get('test');

Besuchen Sie 127.0.0.1:9998/redis.php, Redis ist wirksam geworden

Geben Sie den MySQL-Container ein

docker exec -it pnsmr_mysql_1 bash

Geben Sie mysql ein und ändern Sie das Root-Benutzerkennwort

Erstellen einer Testdatei

vim /var/www/html/mysql.php
<?php
$pdo = neues PDO('mysql:host=172.24.0.2;dbname=mysql;port=3306','root','root123');
var_dump($pdo);

Zugriff auf 127.0.0.1:9998/mysql.php, mysql ist wirksam

IV. Fazit

Obwohl die Umgebung erfolgreich konfiguriert ist und mit dem Befehl „docker-compose up“ mit einem Klick generiert werden kann, müssen die Konfigurationsdateien jedes Containers noch geändert werden, was immer noch nicht bequem genug ist und optimiert werden muss. Darüber hinaus werden die Cluster- und Stapelfunktionen von Docker nicht verwendet, was später untersucht wird.

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 nginx+php+mysql in Docker
  • So erstellen Sie ein php-nginx-alpine-Image von Grund auf in Docker
  • Der gesamte Prozess der Verwendung von Docker zum Erstellen der PHP7- und Nginx-Betriebsumgebung (offizielles Image)
  • Docker-Installation von PHP und Bereitstellungsbeispiel mit Nginx

<<:  MySQL-Optimierungszusammenfassung – Gesamtzahl der Abfrageeinträge

>>:  js+Html zur Realisierung einer Tabellenbearbeitungsoperation

Artikel empfehlen

Detailliertes Installationstutorial für Windows 10 + MySQL 8.0.11 Zip

Vorbereiten: Downloadadresse für das MySQL 8.0 Wi...

Zusammenfassung der Javascript-Datumstools

lass Utils = { /** * Ist es das Todesjahr? * @ret...

So implementieren Sie Code und Schritte für den digitalen Paging-Effekt in CSS

Eine beträchtliche Anzahl von Websites verwendet d...

Das Submit-Ereignis des Formulars reagiert nicht

1. Problembeschreibung <br />Wenn JS verwen...

Docker-Image-Analysetool - Analyse des Tauchprinzips

Heute empfehle ich ein solches Open-Source-Tool z...

Konfigurationshandbuch für den Lastenausgleich auf Ebene 4 von Nginx

1. Einführung in Layer 4 Load Balancing Was ist L...

So erstellen Sie manuell ein neues Image mit Docker

In diesem Artikel wird die Methode zum manuellen ...

Detaillierte Erklärung, wie Sie alle untergeordneten Elemente mit CSS auswählen

Wie wähle ich mit CSS rekursiv alle untergeordnet...

CSS3 Flexible Box Flex, um ein dreispaltiges Layout zu erreichen

Wie der Titel schon sagt: Die Höhe ist bekannt, d...

Reines CSS3 zum Erstellen eines Beispielcodes für Seitenwechseleffekte

Das, was ich vorher geschrieben habe, ist zu komp...

So vermeiden Sie die URL-Zeitzonenfalle in MySQL

Vorwort Wenn Sie MySQL 6.0.x oder höher (JAR) ver...