Verwenden Sie Docker, um eine flexible Online-PHP-Umgebung zu erstellen. Manchmal benötigen Sie einige Pakete oder Bilder nicht, die andere bereits integriert haben. Mit den folgenden Methoden können wir die benötigte Umgebungsstruktur Stück für Stück aufbauen und schließlich eine automatische Bereitstellung mit nur einem Klick erreichen. Erleuchten Sie den Docker-Skill-Tree Schritt für Schritt ## . ## ## ## == ## ## ## ## ## === /""""""""""""""".__/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ ._____ oder __/ . .__/ .___.______/ * Klonen Sie zunächst das Projekt [Server] und legen Sie es im Stammverzeichnis des Servers ab (Sie können später auch Ihre eigene Umgebungsstruktur erstellen). (Erste Ebene) Verwenden Sie Docker, um nacheinander zu erstellen 1. Laden Sie das Bild herunter docker pull php:7.2-fpm wählen Sie die Version nach dem Doppelpunkt Docker-Pull Nginx docker pull mysql:5.7 erfordert keine lokale Datenbank und kann ignoriert werden Docker Pull Redis: 3.2 erfordert kein lokales Redis und kann ignoriert werden Docker-Bilder Alle heruntergeladenen Bilder anzeigen 2. Führen Sie den Container aus, nachdem Sie das Image heruntergeladen haben. [Im Folgenden wird die Methode --link zum Erstellen des Containers verwendet. Beachten Sie die Erstellungsreihenfolge.] Notiz: <MySQL-Container ausführen> docker run --name mydb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 Hinweis: -MYSQL_ROOT_PASSWORD=123456 legt das initiale Passwort für MySQL fest Wenn Sie keine lokale Datenbank erstellen müssen, fahren Sie mit dem nächsten Schritt fort <Redis-Container ausführen> docker run --name myredis -p 6379:6379 -d redis:3.2 Hinweis: Wenn Sie kein lokales Redis erstellen müssen, fahren Sie mit dem nächsten Schritt fort <PHP-Container ausführen> docker run -d -p 9000:9000 --name myphp -v /server/www:/var/www/html -v /server/php:/usr/local/etc/php --link mydb:mydb --link myredis:myredis --privileged=true php:7.2-fpm Hinweis: Wenn Sie keine lokale Datenbank oder Redis erstellen müssen, können Sie --link mydb:mydb --link myredis:myredis weglassen. Beachten Sie, dass beim Einbinden eines leeren Ordners mit -v der Inhalt des Containers überschrieben wird. Daher muss die Konfigurationsdatei im Voraus vorbereitet werden. <Nginx-Container ausführen> docker run --name mynginx -d -p 80:80 -v /server/www:/usr/share/nginx/html -v /server/nginx:/etc/nginx -v /server/logs/nginx.logs:/var/log/nginx --link myphp:myphp --privileged=true nginx Notiz: Der Doppelpunkt nach der -v-Anweisung ist der Pfad innerhalb des Containers. Ich habe das Nginx-Webprojektverzeichnis, das Konfigurationsverzeichnis und das Protokollverzeichnis in das zuvor vorbereitete /server-Verzeichnis eingebunden. Nach dem Mounten des Verzeichnisses können Sie die Nginx-Konfiguration direkt im entsprechenden gemounteten Verzeichnis ändern, ohne den Container zum Ändern der Konfiguration aufrufen zu müssen. zu /server/nginx/conf.d/Default.conf Server { hören 80: Servername localhost: Standort / { root /usr/share/nginx/html/blog/public: ##/user/share/nginx/html ist das Arbeitsverzeichnis index index.html index.php index.htm } Fehlerseite 500 502 503 504 /50x.html Standort = /50x.html { root /usr/share/nginx/html } Standort ~\.php$ { fastcgi_pass myphp 9000: ## Um eine Verbindung zwischen Containern herzustellen, müssen Sie die IP-Adresse der anderen Partei angeben. Verwenden Sie den Befehl sudo docker inspect myphp, um zu überprüfen, ob der IPAddress-Parameter unten die IP-Adresse des Containers ist. ##Wir haben den Container mit --link beim Erstellen des Containers erstellt. Wir können das Pseudonym des Link-Containers anstelle der IP verwenden, um darauf zuzugreifen, wodurch die Abhängigkeit von der IP fastcgi_index index.php entfällt fastcgi-param SCRIPI_FILENAME /var/www/html/blog/public$fastcgi_script_name: ## Die Arbeitsverzeichnisse von myphp und mynginx sind unterschiedlich. Mynginx ist /usr/share/nginx/html ## php ist /var/www/html. Beim Erstellen des Containers haben wir daher beide Verzeichnisse im selben Verzeichnis auf dem Host /server/www gemountet, aber das öffentliche Mount-Verzeichnis des Hosts kann hier nicht verwendet werden. include fastcgi_params: } } 3. Installation der PHP-Erweiterungsbibliothek docker exec -ti myphp /bin/bash zuerst den Container betreten docker-php-ext-install pdo pdo_mysql Installieren Sie die pdo_mysql-Erweiterung Docker-PHP-Ext-Redis installieren Hinweis: Zu diesem Zeitpunkt wird eine Fehlermeldung für redis.so angezeigt, da einige Erweiterungen nicht in der PHP-Quellcodedatei enthalten sind Methode 1: tar zxvf /server/php_lib/redis-4.1.0.tgz Entpacken Sie das heruntergeladene Redis-Erweiterungspaket. docker cp /server/php_lib/redis-4.1.0 myphp:/usr/src/php/ext/redis Fügen Sie die Erweiterung in den Container ein und installieren Sie sie anschließend Notiz: Das Platzieren des Erweiterungspakets direkt in das Container-Ext-Verzeichnis kann zu einer Fehlermeldung führen: Kein solcher Container:Pfad: myphp:/usr/src/php/ext Methode 2: Notiz: Die offizielle Empfehlung ist, PECL (PHP-Erweiterungsbibliothek-Repository, gepackt über PEAR) zu verwenden. Verwenden Sie pecl install, um die Erweiterung zu installieren, und verwenden Sie dann das offizielle docker-php-ext-enable pecl installiere Redis und docker-php-ext-enable redis
* Andere Befehle docker stop $(docker ps -q) stoppt alle Container docker rm $(docker ps -aq) alle Container löschen docker rmi $(docker images -q) alle Bilder löschen Docker Inspect MyPHP, um Containerkonfigurationsinformationen anzuzeigen * Erstellen Sie Ihre eigene Verzeichnisstruktur Sie können auch Ihre eigene Server-Verzeichnisstruktur erstellen. Zunächst sollten Sie wissen, dass beim Mounten eines leeren Ordners der gesamte Inhalt des Ordners im Container gelöscht wird. Sie sollten ihn daher zuerst kopieren und dann mounten. Beispiel: Erstellen Sie einen temporären Container sudo docker run --name mynginx -p 80:80 -it -d nginx (Zweite Bestellung) Docker-Compose automatisierter Build Nach Abschluss der obigen Schritte verfügen Sie über ein vorläufiges Verständnis der grundlegenden Containervorgänge von Docker. 1. Installieren Sie Docker-Compose curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose --version 2. Bereitstellungsumgebung mit nur einem Klick /server/compose/docker-compose.yml wurde konfiguriert, geben Sie einfach den Befehl ein cd /server/compose docker-compose up -d Version: "2" Leistungen: meine Datenbank: Containername: „mydb“ Häfen: - „3306:3306“ volumes: #Schreiben Sie das gemountete Verzeichnis hier - /server/mysql:/var/lib/mysql - /etc/localtime:/etc/localtime:re #Stellen Sie die Zeitsynchronisierung zwischen dem Container und der Hostumgebung ein: # Benutzerdefinierte Umgebungsvariable MYSQL_ROOT_PASSWORD:123456 images:mysql: 8.0 # Der Container verweist auf das Image myredis: Containername: „myredis“ Neustart: immer Häfen: - „6379:6379“ Bände: – /server/redis:/daten -/usw./Ortszeit:usw./Ortszeit:re Bild: redis:3.2 meinphp: Containername: "myphp" Neustart: immer Häfen: - "9000:9000" Bände: – /server/www:/var/www/html -/Server/php:/usr/local/etc/php -/etc/Ortszeit:/etc/Ortszeit:re Links: - "meine Datenbank" - "myredis" Bild:php:7.2-fpm meinnginx: Containername: "mynginx" Neustart: immer Häfen: - "80:80" Links: - "meinphp" Bände: – /server/www:/usr/share/nginx/html – /server/nginx:/etc/nginx – /server/logs/nginx.logsL/var/log/nginx - /etc/localtime:/etc/localtime:re Bild: nginx:latest Im Vergleich zum obigen Befehl zum Ausführen des Containers sind die Konfigurationsstruktur und Semantik von docker_yml auf einen Blick klar. (Stufe 3) Docker-Compose und Dockerfile-Komplettbau Docker-Compose wird verwendet, um eine Ein-Klick-Bedienung zu erreichen, das Problem besteht jedoch darin, dass die PHP-Erweiterungsbibliothek noch separat installiert werden muss, sodass hier Dockerfile benötigt wird, um ein benutzerdefiniertes Container-Image zu erstellen. Erreichen Sie echte Ein-Klick-Erledigung Inhaltsverzeichnis: Server -| -| Compose.Dockerfiles -| Docker-Compose.yml -| mysql -| Dockerfile Hier legen wir unser benutzerdefiniertes Dockerfile fest, um das MySQL-Image zu erstellen| -| nginx -| Dockerfile Hier legen wir unser benutzerdefiniertes Dockerfile fest, um das Nginx-Image zu erstellen| -| php -| Dockerfile Hier legen wir unser benutzerdefiniertes Dockerfile fest, um das PHP-Image zu erstellen| -| redis -| Dockerfile Hier legen wir unser eigenes Dockerfile fest, um das Redis-Image zu erstellen FROM php:7.2-fpm #Erstellen Sie ein benutzerdefiniertes Image und importieren Sie das offizielle Image MAINTAINER goozp "Benutzername" #Stellen Sie die Zeitzone des Containers auf die gleiche Zeitzone wie die des Hosts ein ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtome && echo $TZ > /etc/timezone #Aktualisieren und installieren Sie abhängige Pakete und PHP-Kernerweiterungen. RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libhpeg62-turbo-dev \ libpng-dev \ && 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-install zip \ && docker-php-ext-install pdo_mysql \ && docker-php-ext-install opcache && docker-php-ext-install mysqli rm -r /var/lib/apt/lists/* # Wenn das Quellpaket nicht existiert, verwenden Sie pecl, um die Erweiterung zu installieren. FÜHREN SIE pecl install redis \ aus && pecl installiere xdebug \ && Docker-PHP-Ext-Redis Xdebug aktivieren ARBEITSVERZEICHNIS /data #Berechtigungseinstellung RUN usermod -u 1000 www-data Passen Sie die Docker-Datei von PHP an, um ein benutzerdefiniertes Image zu erstellen und gleichzeitig Erweiterungen zu installieren. Nach Abschluss aller Docker-Dateikonfigurationen muss die Datei Docker-compose.yml nicht mehr das offizielle Image image:php-fpm:7.2 verwenden, sondern direkt build: ./php verwenden, um direkt auf die im Verzeichnis konfigurierte Docker-Datei zu verweisen cd /server/compose.dockerfiles docker-compose up -d Das Obige sind alle Umgebungskonfigurationsmethoden von Docker * Wenn Sie die Shell verwenden müssen, um PHP für die Ausführung von Skripten auf dem Hostcomputer zu planen docker exec -it myphp /bin/bash -c '/usr/local/bin/php /var/www/html/blog/public/index.php' 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:
|
<<: Vuex implementiert einfache Warenkorbfunktion
1. Benutzer anlegen und autorisieren Das Erstelle...
Ich habe einige Qt-Schnittstellenprogramme geschr...
Inhaltsverzeichnis Vorwort Einführung JavaScript ...
Inhaltsverzeichnis Tutorial-Reihe 1. MySQL-Archit...
Inhaltsverzeichnis 01 Problembeschreibung 02 Lösu...
Inhaltsverzeichnis 1. Was ist JSON 1.1 Array-Lite...
Eine Forderung Im Allgemeinen hat ein Unternehmen...
Inhaltsverzeichnis Erster Blick Erstellen einer V...
Inhaltsverzeichnis Überblick Anwendungsszenarien ...
Inhaltsverzeichnis 1. v-wenn 2. Verwenden Sie v-i...
Die folgenden drei Methoden werden häufig verwende...
1. Verwenden Sie Pseudoklassen, um die Hälfte des...
Es ist sehr einfach, Daten und Tabellen in MySQL ...
Laden Sie zuerst die Version 15.1 von VMware Work...
Vorwort Dieser Artikel stellt hauptsächlich die B...