Entorno de desarrollo con Docker para Symfony4
Ha quedado atrás el tiempo en que para poder desarrollar en PHP había que instalar un entorno en función del sistema operativo, necesidades de versiones de los diferentes elementos de infraestructura y además hacerlo para cada proyecto.
La necesidad de sincronizar la información de infraestructura como se puede hacer con el código da pie al concepto de “Infrastructure as code”.
The enabling idea of infrastructure as code is that the systems and devices wich are used to run software can be treated as if they, themselves, are software.
Veremos como como configurar el entorno local para programar con Symfony4 con Docker.
El código se encuentra en https://github.com/felixgomez/docker-symfony4.
Instalación
Se puede descargar un instalador desde Docker CE (Community Edition). En mi caso una vez instalado y arrancado tengo:
.
Y desde consola tenemos acceso tanto a docker como a docker-compose y docker-machine.
Imágenes y configuración
Podemos configurar un contenedor de docker a partir de una imagen base y hacer modificaciones en base a un Dockerfile, que es un archivo de texto plano con una sintaxis específica.
Estas imágenes modificadas pueden ser base a su vez para la generación de nuevos contenedores.
Imágenes
Podemos utilizar Docker Hub para localizar imágenes. En este ejemplo tiraremos de imágenes oficiales.
Para este ejemplo configuraremos 4 contenedores orquestados con docker-compose:
- webserver, basado en imagen oficial (https://hub.docker.com/_/nginx/)
- mysql, basado en imagen oficial (https://hub.docker.com/_/mysql/)
- redis, basado en imagen oficial (https://hub.docker.com/_/redis/)
- php-fpm, basado en imagen oficial (https://hub.docker.com/_/php/)
Y como aplicación PHP utilizaremos el esqueleto de instalación de Symfony 4.
Configuración
Para este ejemplo sencillo utilizaremos la siguiente estructura:
1 | . |
** El código para la parte de infraestructura se encuentra en Github **
Para cada uno de los servicios únicamente se utilizan las siguientes opciones de configuración:
- image / build: Para utilizar una imagen o para construir una en base a un
Dockerfile - container_name: Nombre del contenedor
- working_dir: Directorio de trabajo
- environment: Establecimiento de variables de entorno
- volumes: Establecimiento de puntos de montaje
- port: Mapeo de puertos host <-> container
Con estas opciones el archivo docker-compose.yml podría ser
1 | version: "3.5" |
Ejecución
Para descargar las imágenes y construir los contenedores ejecutamos
1 | $ docker-compose build |
Y para levantar los servicios:
1 | $ docker-compose up -d # Detached mode |