Implementierung von LNMP für die separate Bereitstellung von Docker-Containern

Implementierung von LNMP für die separate Bereitstellung von Docker-Containern

1. Umweltvorbereitung

Die IP-Adresse jedes Containers:

  • Nginx: 172.16.10.10
  • MySQL: 172.16.10.20
  • PHP: 172.16.10.30

Beim Erstellen von LNMP zu beachten:

  • Die Daten jedes Containers bleiben erhalten;
  • Weisen Sie dem Container eine feste IP-Adresse zu, um zu verhindern, dass sich die IP-Adresse nach dem Neuaufbau des Containers ändert, was unnötige Probleme verursachen würde.
  • Da der Client nur auf Port 80 von Nginx zugreifen und dann PHP aufrufen muss, um über Nginx eine Verbindung zur Datenbank herzustellen, müssen Sie Port 80 von Nginx nur mit der Option „-p“ dem Hostcomputer zuordnen. Andere Container müssen nicht zugeordnet werden, was relativ sicherer ist.

2. Fallumsetzung

(1) Erstellen Sie ein benutzerdefiniertes Netzwerk

[root@docker ~]# Docker-Netzwerk erstellen -d Bridge --Subnetz 172.16.10.0/24 --Gateway 172.16.10.1 lnmp
//Erstellen Sie ein benutzerdefiniertes Netzwerk und geben Sie das Netzwerksegment und das Gateway an. Erst wenn das Netzwerksegment definiert ist, kann dieses Netzwerk verwendet werden, um dem Container eine feste IP zuzuweisen.

(2) Führen Sie den Nginx-Container aus

[root@docker ~]# docker run -itd --name test nginx    
//Führen Sie einen Container nach dem Zufallsprinzip aus, um die in nginx erforderlichen Konfigurationsdateien zu generieren[root@docker ~]# mkdir /wwwroot //Home-Verzeichnis für den Website-Zugriff[root@docker ~]# mkdir /docker //Konfigurationsdatei für Nginx//Erstellen Sie ein Verzeichnis zum Einbinden der relevanten Verzeichnisse des Nginx-Containers[root@docker ~]# docker cp test:/etc/nginx /docker/
//Kopiere das nginx-Home-Verzeichnis im nginx-Container in das lokal erstellte Verzeichnis [root@docker ~]# ls /docker/
nginx
[root@docker ~]# docker cp test:/usr/share/nginx/html /wwwroot/
//Kopiere das Web-Stammverzeichnis im Nginx-Container in das lokal erstellte Verzeichnis [root@docker ~]# ls /wwwroot/
html
[root@docker ~]# docker run -itd --name nginx -v /docker/nginx:/etc/nginx -v /wwwroot/html:/usr/share/nginx/html -p 80:80 --network lnmp --ip 172.16.10.10 nginx
//Führen Sie den Nginx-Container basierend auf dem gerade erstellten Nginx-Netzwerk aus und geben Sie seine IP-Adresse an.
// Verwenden Sie die Option „-v“, um das Verzeichnis jeweils in der Nginx-Konfigurationsdatei und im Webstammverzeichnis bereitzustellen und so Datenpersistenz zu erreichen.
// Beim Erreichen der Datenpersistenz wird auch das Problem gelöst, dass einige grundlegende Befehle im Nginx-Container nicht verwendet werden können.
// Wenn Sie die Nginx-Konfigurationsdatei oder das Netzwerkstammverzeichnis ändern müssen, führen Sie einfach den entsprechenden Vorgang im lokalen /data-Verzeichnis aus.
//Führen Sie den Nginx-Container aus und testen Sie [root@docker ~]# echo "hello world" > /wwwroot/html/index.html 
[root@docker ~]# curl 127.0.0.1
Hallo Welt 


(3) Ausführen des MySQL-Containers

[root@docker ~]# docker run --name mysql -e MYSQL_ROOT_PASSWORD=123.com -d -p 3306:3306 --network lnmp --ip 172.16.10.20 mysql:5.7
//Führen Sie das MySQL-Image basierend auf dem LNMP-Netzwerk aus und geben Sie seine IP-Adresse an.
//MYSQL_ROOT_PASSWORD=123.com" ist das Root-Passwort für die angegebene MySQL-Datenbank. //Wenn Sie zum Herstellen einer Verbindung mit der Datenbank ein grafisches Tool eines Drittanbieters verwenden müssen, fügen Sie einfach die Option „-p“ hinzu, um Port 3306 des Containers dem Hostcomputer zuzuordnen.

(4) Ausführen des PHP-Containers

[root@docker ~]# docker run -itd --name phpfpm -p 9000:9000 -v /wwwroot/html:/usr/share/nginx/html --network lnmp --ip 172.16.10.30 php:7.2-fpm
//Führen Sie einen Container mit dem Namen phpfpm aus, ordnen Sie den Port zu, mounten Sie das entsprechende Verzeichnis und geben Sie die IP-Adresse an //Das gemountete Verzeichnis ist dasselbe wie das Nginx-Hauptverzeichnis, da die Konfigurationsdatei des Nginx-Containers geändert werden muss [root@docker ~]# cd /wwwroot/html/
[root@docker html]# vim test.php
<?php
phpinfo();
?>

(5) Ändern Sie die Nginx-Konfigurationsdatei, um Nginx und PHP zu verbinden

[root@docker ~]# vim /docker/nginx/conf.d/default.conf
  Standort / {
    root /usr/share/nginx/html;
    index index.html index.htm index.php; //Fügen Sie diesen Abschnitt hinzu: index.php
  }

  Standort ~ \.php$ {
    root /usr/share/nginx/html; //Speicherort des Stammverzeichnisses der Webseite ändern fastcgi_pass 172.16.10.30:9000; //Zur IP-Adresse des PHP-Containers ändern fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; //Variable $document_root hinzufügen include fastcgi_params;
  }
[root@docker ~]# docker restart nginx //Nginx-Dienst nginx neu starten

Gehen Sie an diesem Punkt zum Browser, um die Schnittstelle des Nginx-Dienstes und des PHP-Dienstes zu überprüfen …


(6) Testen Sie die Koordination zwischen PHP-Container und MySQL

Dies zeigt, dass es kein Problem mit der Verbindung zwischen Nginx und PHP gibt. Der nächste Schritt ist die Verbindung zwischen PHP und MySQL.

Hier verwenden wir ein phpMyAdmin-Datenbankverwaltungstool.

[root@docker ~]# wget https://files.phpmyadmin.net/phpMyAdmin/4.9.1/phpMyAdmin-4.9.1-all-languages.zip
//Laden Sie das Quellcodepaket von phpMyAdmin herunter[root@docker ~]# unzip phpMyAdmin-4.9.1-all-languages.zip //Entpacken Sie das Quellcodepaket[root@docker ~]# mv phpMyAdmin-4.9.1-all-languages ​​​​/wwwroot/html/phpmyadmin //Ändern Sie den Namen des entpackten Verzeichnisses[root@docker ~]# vim /docker/nginx/conf.d/default.conf //Bearbeiten Sie die Hauptkonfigurationsdatei von NginxSpeicherort /phpmyadmin {
    root /usr/share/nginx/html;
    index index.html index.htm index.php ;
  }

Standort ~ /phpmyadmin/(?<after_ali>(.*)\.(php|php5)?$) {
    root /usr/share/nginx/html;
    fastcgi_pass 172.16.10.30:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $Dokumentstammsatz$fastcgi_script_name;
    fastcgi_params einschließen;
  } 


[root@docker ~]# docker restart nginx //Starten Sie den Nginx-Container neu [root@docker ~]# docker ps | grep nginx Stellen Sie sicher, dass der Nginx-Container normal läuft f8442dc794b9 nginx "/docker-entrypoint.…" Vor etwa einer Stunde Aktiv seit 24 Sekunden 0.0.0.0:80->80/tcp nginx

Zum Browsertest gelangen Sie:

OK, wenn Sie einen Fehler sehen, bedeutet das, dass alles richtig gemacht wurde. Normalerweise wird dieser Fehler angezeigt, weil Sie beim normalen Kompilieren und Installieren von PHP einige zugehörige Optionen wie „--with-mysql...“ hinzufügen müssen. Wenn Sie diese Seite sehen, ist es offensichtlich, dass der von uns ausgeführte PHP-Container keine Optionen zur Datenbank hinzufügt. Als Nächstes werden wir diese Probleme lösen.

(7) Lösen Sie das Problem, dass der PHP-Container die Verknüpfung mit der MySQL-Datenbank nicht unterstützt

Melden Sie sich auf der offiziellen Docker-Website an, suchen Sie nach „PHP“ und klicken Sie wie folgt, um es einzugeben:



Ich habe die Antwort auf der offiziellen Docker-Website gesehen. Als Nächstes werde ich basierend auf dem ursprünglichen PHP-Image eine Docker-Datei schreiben, um ein neues Image zur Unterstützung dieser Funktion zu generieren!

[root@docker html]# vim Dockerfile #Schreiben Sie die Dockerfile-Datei. Der Anfang der Datei ist der von der offiziellen Website bereitgestellte Code FROM php:7.2-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 \ //Schrägstrich hinzufügen&& docker-php-ext-install mysqli pdo pdo_mysql //Fügen Sie diese Zeile hinzu, um die MySQL-Verbindungsfunktion zu unterstützen//Nach dem Schreiben speichern und beenden [root@docker html]# docker build -t phpmyadmin . //Erstellen Sie ein neues Image. Lassen Sie den "." am Ende des Befehls nicht weg.
[root@docker html]# docker rm -f phpfpm //Der ursprüngliche PHP-Container kann gelöscht werden [root@docker html]# docker run -itd --name phpfpm -p 9000:9000 -v /wwwroot/html:/usr/share/nginx/html --network lnmp --ip 172.16.10.30 phpmysql
//Führen Sie einen neuen PHP-Container basierend auf dem neu erstellten PHP-Image aus [root@docker ~]# cd /wwwroot/html/phpmyadmin/
[root@docker phpmyadmin]# mv config.sample.inc.php config.inc.php 
[root@docker phpmyadmin]# vim config.inc.php //Schreibe eine PHP-Konfigurationsdatei $cfg['Servers'][$i]['host'] = '172.16.10.20'; Ändere sie in die IP-Adresse des MySQL-Containers 

[root@docker phpmyadmin]# docker restart phpfpm // PHP neu starten
phppfpm
[root@docker phpmyadmin]# docker ps | grep phpfpm // Stellen Sie sicher, dass der PHP-Container normal ausgeführt wird c9feb2df0603 phpmysql "docker-php-entrypoi…" vor 11 Minuten Aktiv Vor etwa einer Minute 0.0.0.0:9000->9000/tcp phpfpm 


Dies ist das Ende dieses Artikels über die Implementierung der Docker-Container-Separation-Bereitstellung LNMP. Weitere relevante Inhalte zur Docker-Separation-Bereitstellung LNMP finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • So stellen Sie LNMP und phpMyAdmin in Docker bereit
  • So erstellen Sie eine lnmp-Umgebung im Docker
  • Verwenden Sie Docker, um eine integrierte Service-LNMP-Umgebung zu erstellen
  • Detaillierte Erläuterung zur Verwendung von Docker zum Erstellen einer LNMP-Umgebung
  • Ubuntu erstellt eine auf Docker basierende LNMP + Redis-Entwicklungsumgebung (Bild und Text)

<<:  So lösen Sie das Problem, dass das Kennwort nach dem Dekomprimieren der kostenlosen MySQL-Installationsversion nicht gefunden wird

>>:  Implementierungsmethode für die Kapselung von Vue3-Navigationsleistenkomponenten

Artikel empfehlen

Ausführliche Erläuterung der HTML-Grundlagen (Teil 2)

1. Liste Der Listen-UL- Container wird mit einer ...

Fassen Sie die häufig verwendeten n-ten-Kind-Selektoren zusammen

Vorwort In der Front-End-Programmierung verwenden...

Navicat für MySQL-Tutorial

Zuerst müssen Sie Navicat für MySQL herunterladen...

Detailliertes Tutorial zur automatischen Installation von CentOS7.6 mit PXE

1. Nachfrage Die Basis verfügt über 300 neue Serv...

Vue – Erste Schritte mit der Wettervorhersage

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Zusammenfassung des JavaScript-Arrays

Inhaltsverzeichnis 1. Array-Induktion 1. Teilen S...

So deinstallieren Sie MySQL 8.0 unter Linux

1. MySQL herunterfahren [root@localhost /]# Diens...

Problem beim Testen des nicht autorisierten Zugriffs auf Zookeeper

Inhaltsverzeichnis Vorwort Erkennen des geöffnete...

10 Tipps zur Verbesserung der Website-Benutzerfreundlichkeit

Ob Unternehmenswebsite, persönlicher Blog, Shoppi...

Flex-Layout erreicht feste Anzahl von Zeilen pro Zeile + adaptives Layout

Dieser Artikel stellt das Flex-Layout vor, um ein...

So überwachen Sie Oracle-Datenbanken mit Zabbix Agent2

Überblick In Zabbix Version 5.0 und höher wurde e...

Verwenden von jQuery zum Implementieren des Karusselleffekts

In diesem Artikel finden Sie den spezifischen Cod...