Instalación local de Wordpress con Docker

Normalmente, cuando desarrollamos sitios Wordpress, debemos instalar mucho software en nuestro equipo local. En macOS, por ejemplo, dependemos de MAMP, mientras que en Linux instalaríamos el conjunto conocido como LAMP (Linux, Apache, MySQL y PHP.)

La principal desventaja que veo a esto es que estamos obligados a usar las versiones del software disponibles en los repositorios de software de la distribución, además de que muchas veces la coexistencia de distintas versiones de PHP, MySQL o Apache es imposible.

Todo esto complica la instalación en caso de tener requisitos específicos que a veces son necesarios para emular el entorno de producción, cosa que deberíamos hacer para evitar problemas de compatibilidad.

/img/it-works-on-my-machine.png

Así que si tienes requisitos específicos (versión de MySQL, por ejemplo) esto puede ser lo mejor que puedes hacer para desarrollar en tu entorno local.

Antes de empezar

Para seguir con esta guía debes tener instalado en tu entorno local Docker Engine.

Si necesitas instalarlo puedes ir a https://hub.docker.com/search/?type=edition&offering=community y seguir las instrucciones específicas para tu sistema operativo. Docker CE soporta Windows, macOS, GNU/Linux (con instrucciones específicas para muchas distribuciones.)

Crear la base de datos

Previamente escribí un artículo dedicado exclusivamente a esta tarea. Puedes revisarlo a detalle: Base de datos MySQL local con Docker.

En resumen, lo que debemos crear es un contenedor del sistema manejador de base de datos MySQL (si tenemos requerimientos de versiones específicos pueden ser atendidos sin problema) y opcionalmente exponer el puerto de la base de datos a nuestro puerto local.

Esto lo podemos lograr ejecutando

docker run --name wp-database \
    -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345qwert \
    -d mysql:5.7

Nota: es posible usar el mismo contenedor MySQL para varias instancias de Wordpress, creando tantas bases de datos como sean necesarias.

Si tenemos un software como MySQLWorkbench podremos fácilmente conectarnos al servidor MySQL y crear un usuario específico para Wordpress así como una base de datos para la instalación de Wordpress.

Si deseas hacerlo usando PHPMyAdmin puedes ejecutar el siguiente comando:

docker run -it --link wp-database:db -p 8090:80 --rm phpmyadmin/phpmyadmin

Luego, sin cerrar la terminal, abre la dirección http://localhost:8090 y podrás usar PHPMyAdmin para administrar la base de datos.

/img/phpmyadmin-login-root.png

En este caso en particular la contraseña del usuario root es 12345qwert, tal como se definió en el comando docker run cuando creamos el contenedor de MySQL.

Para más detalles sobre cómo crear la base de datos necesaria para Wordpress revisa la documentación oficial al respecto: https://wordpress.org/support/article/creating-database-for-wordpress/#using-phpmyadmin

Crear el contenedor de Wordpress

Una vez que el contenedor de MySQL está creado y la base de datos destinada para Wordpress existe en el servidor es momento de crear nuestro contenedor host de la instalación Wordpress.


Debido a que los contedores Docker son inmutables no es posible modificar archivos “dentro” de los mismos, por lo que debemos enlazar un directorio local (donde guardamos y editamos la instalación Wordpress) a un contenedor con el software necesario para servir estos archivos (que contenga PHP, la conexión con la base de datos, Apache, etc.)


Para comenzar una instalación desde cero debemos bajar la versión de Wordpress que se ajuste a nuestras necesidades. En caso de requerir la última versióne estable podemos solicitarla de inmediato:

cd /path/to/workdir
curl -O https://wordpress.org/latest.zip
unzip latest.zip

Eso creará una carpeta llamada wordpress con los archivos completos para nuestra nueva instalación. Haciendo cd wordpress y un listado de los archivos (ls) deberíamos ver algo como lo siguiente:

index.php            wp-config-sample.php wp-mail.php
license.txt          wp-content           wp-settings.php
readme.html          wp-cron.php          wp-signup.php
wp-activate.php      wp-includes          wp-trackback.php
wp-admin             wp-links-opml.php    xmlrpc.php
wp-blog-header.php   wp-load.php
wp-comments-post.php wp-login.php

Lo único que resta en el proceso es ejecutar el contenedor Docker correspondiente:

docker run --name wordpress-dev \
    --link wp-database:mysql \
    -p 8080:80 \
    --volume `pwd`:/var/www/html \
    -d wordpress:latest

Con esto estamos creando el contenedor con distintas opciones:

  1. El contenedor tendrá el nombre wordpress-dev (que será el cómo nos referiremos a él cuando hagamos un docker start wordpress-dev, por ejemplo.)
  2. El contenedor estará enlazado al contenedor llamado wp-database que creamos previamente. Este enlace está etiquetado como “mysql”, que es el nombre con el que la imagen Wordpress reconoce la conexión a la base de datos.
  3. El puerto 80 del contenedor queda enlazado al puerto 8080 de nuestro entorno local.
  4. Enlazamos el directorio local (donde tenemos todos los archivos de la instalación nueva de Wordpress previamente descargados) al directorio /var/www/html del contenedor, lo que funcionará para servir nuestros archivos locales a través del contenedor nuevo.
  5. El contenedor se ejecutará en segundo plano (-d) y será una instancia de la imagen wordpress:latest, descargada de Docker Hub.

Con esto, al abrir la dirección http://localhost:8080 deberíamos poder finalizar la instalación de Wordpress:

/img/wordpress-install-start.png

En adelante nuestra instalación se comportará como una instancia regular de Wordpress, en la que podremos instalar complementos, temas y modificar todos los archivos como sea conveniente.

Para más información puedes revisar también: