Cómo instalar WordPress con Docker Compose

'
Cuando nos disponemos a desarrollar un sitio web usando WordPress, podemos hacerlo mediante infinidad de herramientas o tecnologías, lo más sencillo hace unos años, era desplegar un servidor local (seguro que ya conoces XAPP ), luego apareció vagrant y las máquinas virtuales, pero desde hace unos años, los contenedores son a niveles técnicos los más eficientes en cuanto a rendimiento, despliegue y sobre todo la inmutabilidad del entorno de desarrollo al entorno de producción.Para desplegar nuestro WordPress, primero tenemos que asegurarnos que tenemos las dos herramientas básicas instaladas en nuestro equipo. Docker y Docker compose.Una vez hecho esto, asegúrate siempre de tener las versiones más actualizadas posibles, puedes comprobar eso usando el comando:

Descarga y creación del contenedor

Descargar el fichero desde Github

Muy bien, una vez hechas las instalaciones básicas, tenemos que descargarnos el ficho docker-compose.yml que sera el que usaremos para crear el contenedor con las imágenes de docker. Dirígete al directorio donde quieras almacenar wordpress en local ( tu carpeta de proyectos por ejemplo).

NOTA: Debes tener git instalado para lanzar el comando. (ver repositorio GITHUB).

Si todo ha ido bien, ahora en el directorio wordpress tendrás dos ficheros:
  • README.md: Información para la instalación
  • docker-compose.yml: Fichero docker-compose
Si quieres ver directamente la creación del contenedor pincha aqui. Vamos a analizar el fichero docker-compose-yml para comprender bien la magia de este fichero.

Explicando la estructura básica de un docker-compose.yml

Este fragmento de código, ha podido ser actualizado con mejoras. Mira mi repositorio Github para asegurarte de que tienes todas las piezas del puzzle 😉
vesion ‘3.7’:Lo primero que veremos será la versión del formato del archivo, es decir, dependiendo de la versión que se encuentre el fichero, algunas propiedades estarán disponibles y otras no.services: Aquí definimos los dos servicios docker que se implementaran dentro de nuestro contenedor. En nuestro caso, usaremos un servicio al que hemos llamado mysql y otro wordpress. Estos nombres, deben ser lo más descriptivos posibles para facilitar la lectura. Comenzamos a describir las propiedades del servicio Mysql:image:mariadb:10 Nombre de la imagen y su versión. En docker-hub, puedes encontrar todas las imágenes que te puedas imaginar e incluso crear las tuyas personalizadas. En nuestro caso, queremos una imagen de mariadb en su versión 10.nerwork_mode: bridgecontainer_name:mysql¿Fácil no?, El nombre del contenedor debe ser único.restart: on-failure Esta propiedad establece la politica de reinicio, en que en el caso de un codigo de salida de error, el servicio se restaurara, es decir, que en caso de fallo, el servicio se reiniciara solo. Existen diferentes politicas que puedes modificar en cada caso.
  • restart: ‘no’ : Valor por defecto, no se reinicia. Si estamos en local, no seria necesario, pero en producción, si el servicio se cae, quizá nos interese que se restaure y más si es una web.
  • restart: ‘always’ : Siempre se reinicia.
  • restart: ‘on-failure’: En caso de error, como hemos descrito antes.
  • restart: ‘unless-stopped’: A no ser que el contenedor se detenga.
environment:Dentro se definirán las variables de entorno que usara la imagen docker, normalmente se utilizan para configurar las contraseñas por defecto de ls diferentes servicios.MYSQL_ROOT_PASSWORD: passwordvolumes: Esta es una de las propiedades que más mágicas me parecen, podemos definer que ubicación dentro de nuestro equipo esta vinculada con una carpeta especifica dentro de nuestro contenedor y viceversa. En nuestro caso, al usar ./mysql estamos indicando que en el mismo directorio donde se encuentra el fichero docker-compose.yml y dentro de mysql se almacenaran todos los fichero var/lib/mysql. ¿Magia verdad?

 ./mysql:/var/lib/mysql Dentro del servicio Web, tenemos unas propiedades extra:ports:Define que puertos del contenedor que serán expuestos al exterior, es decir, es una asociación virtual entre nuestro contenedor y como se accederá desde nuestra máquina local, VPC, etc.. En nuestro caso, exponemos el puerto 80 de nuestra imagen al 8001 de nuestra máquina local.

Hay que tener cuidado de no estar usando ese puerto local con otro servicio, debe estar libre no funcionara.
depends_on:Básicamente expresa una dependencia de un servicio con el resto de servicios. Cuando ejecutamos el comando: docker-compose up, docker analiza las dependencias y las lanza según el orden de las mismas. En nuestro caso, veras que hemos puesto que el servicio web depende del servicio mysql, y tiene sentido, ya que wordpress no funcionaria si antes no tiene un sistema gestor de bases de datos funcionando, ¿verdad?links:Indica que la imagen del servicio llamado web, se conecte con el servicio llamado mysql. Es un poco difícil de ver la abstracción de docker y como se comunican las imágenes dentro de un contenedor, pero para entenderlo fácil, digamos que es “como un cable” que une los dos servicios para que puedan comunicarse uno con el otro, sin ese cable, serían dos imágenes sin ninguna conexión entre ellas.

Creación del contenedor

Muy bien, ya tenemos todo en nuestro directorio de trabajo y entendemos perfectamente ( o lo más importante) todas las propiedades del fichero .yml. Ahora, vamos a ver como funciona todo esto, para ello, nos dirigimos al directorio donde tenemos nuestro docker-compose.yml y lanzamos el comando:Nos debería aparecer algo como la captura de arriba, si has ejecutado algunas instrucciones y te indica que el nombre del contenedor ya existe, solo deberas modificarlo para que funcione. Para ver si esta el contenedor funcionando, debemos hacer uno de uno de los comandos de docker y veremos una lista de los contenedores que en ejecución.docker ps

Test de nuestra aplicación WordPress en nuestro navegador

Ya deberiamos tener nuestro wordpress funcionando dentro de nuestro contenedor, asi que para testear y ver que todo funciona perfectamente, accede mediante localhost:(puerto del fichero docker-compose.yml),.instalacion wordpress dockerSi ves el instalador de wordpress.. todo va como se espera. Puedes ahora también, comprobar como se han creado los directorios para los ficheros mysql y wp-content.

Conclusiones

Espero que te ayude mucho este artículo, la tecnología de contenedores esta creciendo por momentos y sin duda es el momento de ponerte a ello, así lo estoy haciendo yo, así que animo!. Dar las gracias a mi amigo Alberto Roura, ya que el es el creador del fichero docker-composer.yml. Visitad su blog albertoroura.com !