HOWTO · PHP

Configurar contenedores PHP-FPM y Nginx Docker

En este tutorial, analizaremos cómo puede configurar sus contenedores PHP, PHP-FPM y NGINX al desarrollar localmente en Docker.

Este tutorial analizará cómo configurar sus contenedores PHP, PHP-FPM y NGINX al desarrollar localmente en Docker.

Comida para llevar:

  1. Construya y ejecute contenedores en su línea de comando.
  2. El archivo Docker y sus usos.
  3. Cómo interactúan los contenedores.

Asegúrese de tener el programa Docker y Git Bash instalados en su dispositivo.

Configurar el contenedor CLI de PHP

Crearemos el directorio C:/delft/docker-php/app, donde almacenaremos nuestro código fuente:

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

En nuestro tutorial, usaremos la imagen oficial de PHP. Ejecutamos el siguiente código;

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

Esto significa,

  1. docker run: esto ejecutará un contenedor.
  2. -d - Se ejecutará en segundo plano (independiente).
  3. --name docker-php: esto especificará docker-php.
  4. -v "C:/delft/docker-php/app":/var/www - Esto sincronizará el directorio C:/delft/docker-php/app en el host de Windows con /var/www en el contenedor.
  5. php:7.0-cli: utilizará esta imagen para construir el contenedor.

Producción :

$ 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

Debido a que nuestra máquina no tiene la imagen, Docker intentará obtener la imagen del registro oficial.

Ejecutamos el comando docker ps -a para ver si el contenedor se está ejecutando.

Notará que el contenedor deja de ejecutarse inmediatamente después de la inicialización. Necesitamos agregar el argumento -i al comando docker run.

Antes de volver a ejecutar el comando docker run, ejecute el siguiente comando.

docker rm docker-php

El comando anterior elimina nuestro primer docker-php ya que no podemos usarlo nuevamente. Ahora podemos ejecutar el comando docker run con el indicador -i.

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

Ejecute el comando docker ps -a para verificar si el contenedor se está ejecutando.

Para iniciar sesión, ejecute el siguiente comando;

winpty docker exec -it docker-php bash

Configure una pila web con PHP-FPM y NGINX

Analicemos ahora cómo puede configurar los contenedores PHP-FPM y Nginx.

Configurar NGINX

Comenzamos con la obtención de un servidor que actuará como contenedor para ejecutar la imagen oficial de Nginx. Crearemos un docker-compose.yml para ejecutar nuestra última imagen de Nginx. Utilizaremos los puertos 80 y 8080.

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

Luego ejecutamos el comando docker-compose up.

Producción:

nginx

Montemos el archivo docker-compose.yml en un repositorio local. Usaremos la carpeta delft, donde se encuentra nuestro archivo docker-compose.yml.

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

En este punto, Nginx no sabe que nuestra carpeta existe. Usaremos el siguiente archivo site.conf para resolver esto.

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;
}

Necesitamos activar la configuración. Modifiquemos un poco más el archivo docker-compose.yml.

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

Ahora podemos agregar un index.html a nuestra carpeta deft y ejecutar el código a continuación;

docker-compose up

Nuestro Nginx debería estar en funcionamiento.

Añadir PHP-FPM

El siguiente paso es obtener el PHP7-FPM oficial, que se vinculará a nuestro contenedor Nginx. El archivo docker-compose.yml actualizado debería verse así.

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

Ahora configuraremos nuestro contenedor Nginx para interpretar archivos PHP utilizando el contenedor PHP-FPM. Nuestro archivo site.conf actualizado leerá,

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;
    }
}

Probemos el programa. Primero, cambiaremos el nombre de nuestro archivo index.html a index.php y cambiaremos el contenido a lo siguiente.

<?php
echo phpinfo();

Antes de ejecutar el comando docker-compose up, debemos montar nuestra carpeta delft en nuestro contenedor PHP. La iteración final de nuestro archivo docker-compose.yml dirá,

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

Ejecutar el comando docker-compose up produce la imagen a continuación.

phpinfo

Eso resume nuestro tutorial.