Configurar contenedores PHP-FPM y Nginx Docker

John Wachira 20 junio 2023
  1. Configurar el contenedor CLI de PHP
  2. Configure una pila web con PHP-FPM y NGINX
Configurar contenedores PHP-FPM y Nginx 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.

John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn