sql >> Base de Datos >  >> RDS >> Mysql

Contenedorización de Apache, MySQL y PHP con Docker

Si está trabajando con PHP y desea tener un solo proceso por contenedor, le recomiendo usar Nginx y PHP-FPM, ya que es significativamente más fácil de configurar que Apache para este tipo de configuración (al menos eso es lo que yo he encontrado).

Debe asegurarse de tener un volumen compartido común para los contenedores Nginx y PHP. En ese volumen tendrías tu index.php . Aquí hay un ejemplo crudo de 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"

Luego ejecutaría este siguiente comando en el directorio donde se encuentra docker-compose.yml el archivo es:

$ docker-compose -p prefix

El motivo del "prefijo" es que crea una agrupación de proyectos para sus contenedores para que no entren en conflicto con otros nombres de contenedores.

Naturalmente, necesita una configuración de sitio nginx que apunte a /var/www/html . Tendrá pocos o ningún requisito de configuración para el contenedor php-fpm.

Una nota al margen sobre la configuración de nginx. El docker-compose.yml anterior está incompleto sin la referencia del contenedor php dentro de la configuración de nginx. Esto se vería así (en términos generales):

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
}

Notará que nombré el contenedor "php7", en realidad podría agregar otro contenedor "php5" a este docker-compose.yml y luego eso le permite definir sitios nginx que usan diferentes versiones de PHP, todas ejecutándose en la misma configuración de docker-compose.

Agradezco que esto no responda directamente a su pregunta, ya que no la resuelve usando Apache, pero es una alternativa a considerar.

Con suerte, esto al menos te dará ideas para ayudarte a resolver tu configuración.