Docker es una plataforma de contenedores que permite a los desarrolladores empaquetar y ejecutar aplicaciones en cualquier entorno. Esto significa que puedes desarrollar y probar tu aplicación en un entorno aislado en tu propio equipo, y luego desplegarla en producción sin preocuparte por la configuración del sistema o las dependencias. En este artículo, vamos a ver cómo utilizar Docker en un proyecto Symfony con PHP 8.1 y MySQL.
Instalar Docker
Antes de comenzar, es necesario tener Docker instalado en tu máquina. Puedes descargar Docker Desktop para Windows o Mac desde la página oficial de Docker. En caso de que uses Linux, busca las instrucciones específicas para tu distribución.
Una vez que lo tengas instalado, abre la terminal y ejecuta el siguiente comando para asegurarte de que Docker está funcionando correctamente:
$ docker run hola-mundo
Crear un nuevo proyecto Symfony
$ symfony new --webapp my_project
Configurar Docker
Crea un archivo Dockerfile en la raíz del proyecto con el siguiente contenido:
# Utilizamos una imagen oficial de PHP 8.1 como imagen base
FROM php:8.1-apache
# Instalamos los paquetes necesarios
RUN apt-get update && apt-get install -y \
git \
curl \
vim \
unzip \
&& rm -rf /var/lib/apt/lists/*
# Configuramos los módulos de PHP
RUN docker-php-ext-install pdo pdo_mysql
# Habilita mod_rewrite
RUN a2enmod rewrite
# Establecemos la raíz web de Apache en el directorio público del proyecto
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
ENV APACHE_DOCUMENT_ROOT /var/www/html/public
# Copiamos nuestra aplicación a la carpeta de trabajo del contenedor
COPY . /var/www/html/
# Establecemos la carpeta de trabajo
WORKDIR /var/www/html/
# Ejecutamos los comandos necesarios para instalar las dependencias de PHP y ejecutar nuestro proyecto
RUN curl -sS https://getcomposer.org/installer | php \
&& php composer.phar install \
&& chown -R www-data:www-data /var/www/html \
&& chmod -R 777 /var/www/html/var
# Exponemos el puerto 80 para el tráfico HTTP
EXPOSE 80
# Iniciamos el servidor Apache en primer plano
CMD ["apache2-foreground"]
Este archivo Dockerfile utiliza una imagen oficial de Docker que contiene PHP 8.1 junto con Apache y añade los módulos necesarios para ejecutar Symfony, además de instalar las dependencias del proyecto con Composer.
Crear un archivo docker-compose.yml
Crea un archivo docker-compose.yml en la raíz del proyecto con el siguiente contenido:
version: '3'
services:
# Define el servicio web
web:
build: .
ports:
- "8080:80"
depends_on:
- db
# Define el servicio de la base de datos
db:
image: mysql:8
environment:
MYSQL_DATABASE: symfony
MYSQL_USER: symfony
MYSQL_PASSWORD: secret
MYSQL_ROOT_PASSWORD: root
ports:
- "3306:3306"
Este archivo contiene la configuración básica necesaria para ejecutar tu proyecto en un contenedor Docker. En él definimos dos servicios:
Ejecutar Docker
Para ejecutar Docker, abre una terminal en la raíz del proyecto y ejecuta el siguiente comando:
$ docker-compose up
Este comando construirá la imagen de Docker y ejecutará los contenedores necesarios. Si todo va bien, podrás ver la salida del servidor de desarrollo de Symfony en la consola.
Comprobar tu proyecto
Abre tu navegador y navega a http://localhost:8080. Si todo ha ido bien, deberías ver la página principal de tu proyecto Symfony.
¡Eso es todo! Ahora tienes un entorno de desarrollo de Symfony totalmente funcional en Docker.
Ejecutar comandos Symfony
Para ejecutar comandos Symfony, como bin/console, desde dentro del contenedor Docker, necesitamos ejecutarlos dentro del contenedor. Para hacerlo, ejecuta el siguiente comando:
$ docker-compose exec web php bin/console <comando>
Por ejemplo, para ejecutar el comando cache:clear, ejecuta el siguiente comando:
$ docker-compose exec web php bin/console cache:clear
Depurar problemas
Si encuentras problemas al ejecutar tu proyecto en Docker, hay algunas cosas que puedes hacer para depurarlos. Primero, revisa la salida del comando docker-compose up para ver si hay algún error o advertencia. Si ves algún error, trata de solucionarlo.
Si el problema persiste, puedes ejecutar un contenedor interactivo para inspeccionar el contenedor. Para hacerlo, ejecuta el siguiente comando:
$ docker-compose run --rm --entrypoint /bin/bash web
Esto abrirá una sesión interactiva dentro del contenedor. Desde aquí, puedes ejecutar comandos para inspeccionar el sistema y solucionar problemas.
Comandos útiles
Para terminar, dejamos algunos comandos útiles para trabajar con Docker en un proyecto Symfony: