Crear una imagen personalizada con Nginx y PHP

La imagen oficial de NGINX no incluye PHP por defecto, ya que se centra únicamente en el servidor web NGINX. Si deseas ejecutar PHP en el mismo contenedor que NGINX, necesitarás configurar un entorno adecuado para ello.Puedes crear una imagen personalizada basada en NGINX que incluya PHP. Para ello, crearás un archivo Dockerfile que combine NGINX y PHP-FPM (que es el manejador de PHP recomendado para NGINX). Aquí te dejo un ejemplo de un Dockerfile que agrega PHP a la imagen de NGINX:

# Usa la imagen oficial de NGINX como base
FROM nginx:latest

# Instala PHP y PHP-FPM
RUN apt-get update && \
    apt-get install -y php-fpm php-mysql

# Copia un archivo de configuración personalizado para NGINX
COPY default.conf /etc/nginx/conf.d/

# Exponer el puerto 80
EXPOSE 80

# Inicia PHP-FPM y NGINX cuando se inicie el contenedor
CMD service php7.4-fpm start && nginx -g 'daemon off;'

FROM nginx: Usamos la imagen base de NGINX.

apt-get install -y php-fpm php-mysql: Instalamos PHP-FPM y extensiones de PHP necesarias como php-mysql para poder conectar a bases de datos MySQL, entre otros.

COPY default.conf: Esto asume que tienes un archivo de configuración para NGINX que define cómo manejar las solicitudes PHP (lo veremos más adelante).

CMD: Se usa para iniciar tanto PHP-FPM como NGINX al mismo tiempo. php-fpm procesa las solicitudes PHP, y NGINX sirve las páginas.

Ejemplo de de archivo default.conf

server {
    listen 80;
    server_name localhost;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}