Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Containerisierung von Apache, MySQL und PHP mit Docker

Wenn Sie mit PHP arbeiten und einen einzigen Prozess pro Container haben möchten, empfehle ich die Verwendung von Nginx und die Verwendung von PHP-FPM, da es für diese Art von Setup wesentlich einfacher zu konfigurieren ist als Apache (zumindest ist das, was ich gefunden habe).

Sie müssen sicherstellen, dass Sie ein gemeinsames freigegebenes Volume für die Nginx- und PHP-Container haben. In diesem Band hätten Sie Ihre index.php . Hier ist ein grobes Beispiel für docker-compose.yml:

services:
  php7:
    image: "php:7.1.10-fpm"
    container_name: "prefix-php"
    volumes:
      - "./your/local/dir:/var/www/html"
  nginx:
    image: "nginx:1.13.6"
    container_name: "prefix-nginx"
    ports:
      - "80:80"
      - "443:443"
    links:
      - "php7"
    volumes:
      - "./your/local/dir:/var/www/html"

Sie würden dann diesen folgenden Befehl in dem Verzeichnis ausführen, in dem sich die Datei docker-compose.yml befindet Datei ist:

$ docker-compose -p prefix

Der Grund für "Präfix" ist, dass Sie eine Projektgruppierung für Ihre Container erstellen, um nicht mit anderen Containernamen zu kollidieren.

Natürlich benötigen Sie dann eine nginx-Site-Konfiguration, die auf /var/www/html zeigt . Sie haben wenig bis gar keine Konfigurationsanforderungen für den php-fpm-Container.

Eine Randnotiz zur nginx-Konfiguration. Die obige docker-compose.yml ist ohne die Referenzierung des PHP-Containers innerhalb der nginx-Konfiguration unvollständig. Das würde so aussehen (grob gesagt):

server {
    listen 80 default_server;

    # ...more config, like root, index, server_name, etc

    location ~* \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass prefix-php:9000; # Note the container name here.
        fastcgi_index index.php;
        fastcgi_hide_header X-Powered-By;
        fastcgi_read_timeout 300s;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # ...more rules
}

Sie werden feststellen, dass ich den Container "php7" genannt habe, Sie könnten dieser docker-compose.yml tatsächlich einen weiteren "php5"-Container hinzufügen und dann können Sie Nginx-Sites definieren, die verschiedene PHP-Versionen verwenden, die alle auf demselben Docker-Compose-Setup ausgeführt werden.

Ich schätze, dass dies Ihre Frage nicht direkt beantwortet, da es sie nicht mit Apache löst, aber es ist eine Alternative, die Sie in Betracht ziehen sollten.

Hoffentlich gibt Ihnen das zumindest Ideen zur Lösung Ihres Setups.