HOWTO · PHP

Richten Sie PHP-FPM- und Nginx-Docker-Container ein

In diesem Tutorial besprechen wir, wie Sie Ihre PHP-, PHP-FPM- und NGINX-Container einrichten können, wenn Sie lokal auf Docker entwickeln.

In diesem Tutorial wird erläutert, wie Sie Ihre PHP-, PHP-FPM- und NGINX-Container einrichten, wenn Sie lokal auf Docker entwickeln.

Imbiss:

  1. Erstellen und führen Sie Container auf Ihrer Befehlszeile aus.
  2. Die Docker-Datei und ihre Verwendung.
  3. Wie Container interagieren.

Stellen Sie sicher, dass Sie das Docker-Programm und Git Bash auf Ihrem Gerät installiert haben.

Richten Sie den PHP-CLI-Container ein

Wir erstellen das Verzeichnis C:/delft/docker-php/app, wo wir unseren Quellcode speichern:

mkdir -p "C:/delft/docker-php/app"

In unserem Tutorial verwenden wir das offizielle PHP-Image. Wir führen den folgenden Code aus;

docker run -d --name docker-php -v "C:/delft/docker-php/app":/var/www php:7.0-cli

Das heisst,

  1. docker run – Dies führt einen Container aus.
  2. -d - Es wird im Hintergrund ausgeführt (getrennt).
  3. --name docker-php – Hiermit wird docker-php angegeben.
  4. -v "C:/delft/docker-php/app":/var/www - Dies synchronisiert das Verzeichnis C:/delft/docker-php/app auf dem Windows-Host mit /var/www im Container.
  5. php:7.0-cli – Dies wird dieses Image verwenden, um den Container zu erstellen.

Ausgang:

$ docker run -d --name docker-php -v "C:/delft/docker-php/app":/var/www php:7.0-cli
Unable to find image 'php:7.0-cli' locally

Da unser Computer nicht über das Image verfügt, versucht Docker, das Image aus der offiziellen Registrierung abzurufen.

Wir führen den Befehl docker ps -a aus, um zu sehen, ob der Container läuft.

Sie werden feststellen, dass der Container sofort nach der Initialisierung nicht mehr ausgeführt wird. Wir müssen das Argument -i zum Befehl docker run hinzufügen.

Bevor Sie den Befehl docker run erneut ausführen, führen Sie den folgenden Befehl aus.

docker rm docker-php

Der obige Befehl entfernt unser erstes docker-php, da wir es nicht erneut verwenden können. Wir können jetzt den Befehl docker run mit dem Flag -i ausführen.

docker run -di --name docker-php -v "C:/delft/docker-php/app":/var/www php:7.0-cli
7b3024a542a2d25fd36cef96f4ea689ec7ebb758818758300097a7be3ad2c2f6

Führen Sie den Befehl docker ps -a aus, um zu prüfen, ob der Container ausgeführt wird.

Um sich anzumelden, führen Sie den folgenden Befehl aus;

winpty docker exec -it docker-php bash

Richten Sie einen Webstack mit PHP-FPM und NGINX ein

Lassen Sie uns nun besprechen, wie Sie die PHP-FPM- und Nginx-Container einrichten können.

Richten Sie NGINX ein

Wir beginnen damit, einen Server zu bekommen, der als Container fungiert, um das offizielle Nginx-Image auszuführen. Wir werden eine docker-compose.yml erstellen, um unser neuestes Nginx-Image auszuführen. Wir werden die Ports 80 und 8080 verwenden.

web:
 image: nginx:latest
 ports:
 - "8080:80"

Anschließend führen wir den Befehl docker-compose up aus.

Ausgang:

nginx

Lassen Sie uns die Datei docker-compose.yml in einem lokalen Repository mounten. Wir verwenden den Ordner delft, in dem sich unsere Datei docker-compose.yml befindet.

web:
    image: nginx:latest
    ports:
        - "8080:80"
    volumes:
        - ./delft:/delft

Zu diesem Zeitpunkt weiß Nginx nicht, dass unser Ordner existiert. Wir werden die folgende site.conf-Datei verwenden, um dies zu beheben.

server {
    index index.html;
    server_name php-docker.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /delft;
}

Wir müssen das Setup aktivieren. Lassen Sie uns die Datei docker-compose.yml noch etwas modifizieren.

web:
    image: nginx:latest
    ports:
        - "8080:80"
    volumes:
        - ./delft:/delft
        - ./site.conf:/etc/nginx/conf.d/site.conf

Wir können jetzt unserem Ordner deft eine index.html hinzufügen und den folgenden Code ausführen;

docker-compose up

Unser Nginx sollte betriebsbereit sein.

Fügen Sie PHP-FPM hinzu

Der nächste Schritt besteht darin, das offizielle PHP7-FPM abzurufen, das mit unserem Nginx-Container verknüpft wird. Die aktualisierte docker-compose.yml-Datei sollte so aussehen.

web:
    image: nginx:latest
    ports:
        - "8080:80"
    volumes:
        - ./delft:/delft
        - ./site.conf:/etc/nginx/conf.d/site.conf
    links:
        - php
php:
    image: php:7-fpm

Wir werden jetzt unseren Nginx-Container so konfigurieren, dass er PHP-Dateien mit dem PHP-FPM-Container interpretiert. Unsere aktualisierte site.conf-Datei wird lauten,

server {
    index index.php index.html;
    server_name php-docker.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /delft;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

Lassen Sie uns das Programm testen. Zuerst werden wir unsere Datei index.html in index.php umbenennen und den Inhalt wie folgt ändern.

<?php
echo phpinfo();

Bevor wir den Befehl docker-compose up ausführen, müssen wir unseren delft-Ordner in unseren PHP-Container mounten. Die letzte Iteration unserer Datei docker-compose.yml lautet:

web:
    image: nginx:latest
    ports:
        - "8080:80"
    volumes:
        - ./delft:/delft
        - ./site.conf:/etc/nginx/conf.d/site.conf
    links:
        - php
php:
    image: php:7-fpm
    volumes:
        - ./delft:/delft

Das Ausführen des Befehls docker-compose up ergibt das folgende Bild.

phpinfo

Das fasst unser Tutorial zusammen.