Mysql
 sql >> Database >  >> RDS >> Mysql

Containerizzazione di Apache, MySQL e PHP con Docker

Se stai lavorando con PHP e desideri avere un unico processo per container, ti consiglio di usare Nginx e di usare PHP-FPM, poiché è molto più facile da configurare rispetto ad Apache per questo tipo di configurazione (almeno questo è quello che ho ho trovato).

Devi assicurarti di avere un volume condiviso comune a entrambi i contenitori Nginx e PHP. In quel volume avresti il ​​tuo index.php . Ecco un esempio grezzo 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"

Dovresti quindi eseguire il seguente comando nella directory in cui docker-compose.yml il file è:

$ docker-compose -p prefix

Il motivo del "prefisso" è che crei un raggruppamento di progetti per i tuoi contenitori in modo da non entrare in conflitto con altri nomi di contenitori.

Naturalmente è necessaria una configurazione del sito nginx che punti a /var/www/html . Avrai pochi o nessun requisito di configurazione per il contenitore php-fpm.

Una nota a margine sulla configurazione di nginx. Il docker-compose.yml sopra è incompleto senza il riferimento al contenitore php all'interno della configurazione di nginx. Sembrerebbe così (in parole povere):

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
}

Noterai che ho chiamato il contenitore "php7", potresti effettivamente aggiungere un altro contenitore "php5" a questo docker-compose.yml e quindi ciò ti consente di definire siti nginx che utilizzano versioni diverse di PHP in esecuzione sulla stessa configurazione di composizione della finestra mobile.

Apprezzo che questo non risponda direttamente alla tua domanda in quanto non la risolve usando apache, ma è un'alternativa da considerare.

Si spera che questo almeno ti dia idee per aiutarti a risolvere la tua configurazione.