Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 22 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save V-Juarez/80b40aa9375abdd5c85c2ee7a293a3d1 to your computer and use it in GitHub Desktop.
Save V-Juarez/80b40aa9375abdd5c85c2ee7a293a3d1 to your computer and use it in GitHub Desktop.
Configuración de docker, php y nginx

Entorno de Desarrollo para php usando Docker 🐳

Quieres aprender php, pero las configuraciones te han abrumado y el deseo de aprender van mermando. No, no detengas tu aprendizaje, siempre existe una solución a los problemas. Instalar php, configurar un servidor web en Windows es muy sencillo, en Linux y macOS es otra situación. Debes conocer sobre la terminal, un editor de código, vim, nano, ser avanzado... y mucho más.

La herramienta que vamos a utilizar y que permite trabajar con php, un servidor web y la terminal es Docker.

Docker: Es una plataforma de software que permite crear, probar e implementar aplicaciones rápidamente.

Docker-compose: Es una herramienta para definir y ejecutar aplicaciones; es multicontenedor que permite simplificar el uso de Docker a partir de archivos YAML, de esta forma es más sencillo generar contendores que se relacionen entre sí, conectarlos, habilitar puertos, volúmenes, etc.

Servidor web: software que permite a los usuarios ver una página web en su navegador. Servidores más utilizados Apache y Nginx.

Configuración de docker-compose.yml

Crear el archivo docker-compose.yml con la siguiente configuración:

# Los archivos docker-compose.yml son versionados, lo que significa que es muy importante indicar la versión de las instrucciones que queremos darle.
version: "3.3"

# Servidor nginx
services:
  web:
  	# versión
    image: nginx:latest
    # Puerto 8080 
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html
      - ./default.conf:/etc/nginx/conf.d/default.conf
    links:
      - php-fpm

  # Configuración de php-fpm
  php-fpm:
    image: php:8-fpm
    volumes:
      - ./src:/var/www/html

Creamos un nuevo archivo con el nombre default.conf con la siguiente configuración, al nivel que docker-compose.yml.

# No te preocupes, por las configuraciones. 
server {
  index index.php index.html;
  server_name phpfpm.local;
  error_log  /var/log/nginx/error.log;
  access_log /var/log/nginx/access.log;
  root /var/www/html;

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass php-fpm:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
  }
}

Comandos de docker-compose

Crea e Iniciar el contenedor:

# Crea e inicia el contenedor
# -d inicia los contenedores en segundo plano y los deja en ejecución.
➜ docker-compose up -d

up-docker-compose

# Crea e inicia el contenedor en primer plano
➜ docker-compose up

start-docker-compose

Para que la interacción sea efectiva y el aprendizaje una experiencia positiva, los archivos .php se crean dentro del directorio src.

# directorio principal
├── docker-php
│   ├── default.conf
│   ├── docker-compose.yml
│   ├── README.md
│   └── src       # Directorio
│       ├── holi.php
└──     └── index.php

# Dentro de la carpte src, crear el archivo index.php

Crear el archivo index.php en el directorio src,

# contenido de index.php
<?php
  echo phpinfo();

Ir al navegador favorito, visitar el siguiente enlace http://localhost:8080. Surge algún un error con la conexión al servidor local, agregar en la dirección php-fpm. a localhost:8080. La dirección queda de la siguiente forma:

http://php-fpm.localhost:8080/

php-localhost

Listo, tienes corriendo tu primer servidor nginx, junto a php utilizando docker-compose.

Interactuar con la terminal de docker-compose

Ingresar a bash de docker-compose

➜ docker-compose exec php-fpm bash

bash-Docker-compose

Crea el archivo variables.php

# crear archivo
touch variables.php

variables.php

<?php
// Definir variables
$numero_1 = 8;
$numero_2 = 7;

// Definir constantes
define("NUMERO_PI", 3.14);
// define("NUMERO_PI", 14);

echo NUMERO_PI;

echo "\n";

echo $numero_1 + $numero_2;

echo "\n";%    

VSCode

Ejecutamos el archivo php en terminal:

php variables.php

ejecutar-php

Con el comando exit, cerramos bash.

Detener el contenedor que se ejecuta en segundo plano

# Segundo plano
docker-compose down

Detener contenedor en primer plano

# Primer plano
ctl + c

docker-compose-down

Enlace del Repositorio

Utilizar Docker para aprender un lenguaje de programación, es una oportunidad de no para de aprender. Puedes tomar el Curso de Docker y el Curso de Introducción a la Terminal y Línea de Comandos en platzi, de esta manera conoceras los fundamentos de php, crear ambientes en contenedores como todo un profesional.

Nunca pares de aprender

Curso Básico de PHP: Instalación, Fundamentos y Operadores

@Luimost
Copy link

Luimost commented Jan 30, 2023

Muchas gracias por el aporte.

@varaskkar
Copy link

Tremendo aporte compañero, a mi y a muchos nos has ahorrado horas de configuración del fichero docker para tener listo un server en php

Aún me sorprende que podamos tener un server encapsulado y funcional sólo ejecutando docker-compose up -d

@davidcsi
Copy link

davidcsi commented May 9, 2024

genial! Gracias!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment