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

CSS zum Erzielen des Effekts einer rotierenden Flip-Card-Animation

Die CSS-Animation des rotierenden Flip-Effekts, d...

So erstellen Sie eine Ansicht für mehrere Tabellen in MySQL

Erstellen Sie in MySQL eine Ansicht für zwei oder...

Automatisches Laden des Kernelmodul-Overlayfs-Vorgangs beim CentOS-Start

Um Kernelmodule in CentOS automatisch zu laden, k...

Details zu MySQL-Zeittypen und -Modi

Inhaltsverzeichnis 1. MySQL-Zeittyp 2. Überprüfen...

So legen Sie die Tabellenbreite in IE8 und Chrome fest

Wenn die oben genannten Einstellungen in IE8 und C...

Implementierung eines Random Roll Callers basierend auf JavaScript

In diesem Artikel wird der spezifische JavaScript...

Implementierung mehrerer Tomcat-Instanzen auf einer einzigen Maschine

1. Einleitung Zunächst müssen wir eine Frage bean...

mysql5.6.zip-Format komprimierte Version Installations-Grafik-Tutorial

Vorwort: MySQL ist ein relationales Datenbankverw...

Vue implementiert Login-Sprung

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Zusammenfassung von MySQL und verbindungsbezogenen Timeouts

MySQL und verbindungsbezogene Timeouts Vorwort: H...

JS verwendet Canvas-Technologie, um Echarts-Balkendiagramme zu imitieren

Canvas ist ein neues Tag in HTML5. Sie können js ...

Beispielcode für die Konvertierung von MySQL-Zeilen und -Spalten

1. Nachfrage Wir haben drei Tabellen. Wir müssen ...