sql >> Databasteknik >  >> RDS >> Mysql

Containerizing Apache, MySQL och PHP med Docker

Om du arbetar med PHP och du vill ha en enda process per behållare, så rekommenderar jag att du använder Nginx och använder PHP-FPM, eftersom det är betydligt enklare att konfigurera än Apache för den här typen av inställningar (åtminstone det är vad jag har hittat).

Du måste se till att du har en gemensam delad volym för både Nginx- och PHP-behållare. I den volymen skulle du ha din index.php . Här är ett grovt exempel 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"

Du skulle sedan köra följande kommando i katalogen där docker-compose.yml filen är:

$ docker-compose -p prefix

Anledningen till "prefix" är att du skapar en projektgruppering för dina containrar för att inte krocka med andra containernamn.

Naturligtvis behöver du då en nginx-webbplatskonfiguration som pekar på /var/www/html . Du kommer att ha små eller inga konfigurationskrav för php-fpm-behållaren.

En sidoanteckning angående nginx-konfigurationen. Ovanstående docker-compose.yml är ofullständig utan hänvisning till php-behållaren i nginx-konfigurationen. Det här skulle se ut så (ungefärligt sett):

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
}

Du kommer att märka att jag döpte behållaren "php7", du kan faktiskt lägga till en annan "php5"-behållare till denna docker-compose.yml och sedan låter det dig definiera nginx-webbplatser som använder olika versioner av PHP som alla körs på samma docker-compose-installation.

Jag förstår att detta inte direkt svarar på din fråga eftersom det inte löser det med apache, men det är ett alternativ att överväga.

Förhoppningsvis ger detta åtminstone dig idéer för att hjälpa dig att lösa din installation.



  1. konvertera mysql tidsstämpel till mktime

  2. Resque Mysql2::Error:Användaren har överskridit resursen 'max_user_connections' (aktuellt värde:10)

  3. Returnerar tomma rader i GROUP BY-satsen

  4. Hur snabbar man på SELECT .. LIKE-frågor i MySQL på flera kolumner?