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.
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.
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:
- El contenedor tendrá el nombre
wordpress-dev
(que será el cómo nos referiremos a él cuando hagamos undocker start wordpress-dev
, por ejemplo.) - 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. - El puerto 80 del contenedor queda enlazado al puerto 8080 de nuestro entorno local.
- 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. - El contenedor se ejecutará en segundo plano (
-d
) y será una instancia de la imagenwordpress:latest
, descargada de Docker Hub.
Con esto, al abrir la dirección http://localhost:8080 deberíamos poder finalizar la instalación de Wordpress:
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:
- La documentación de Wordpress en Docker Hub: https://hub.docker.com/_/wordpress/
- La documentación de MySQL en Docker Hub: https://hub.docker.com/_/mysql/
- La documentación de Wordpress para finalizar la instalación: https://wordpress.org/support/article/how-to-install-wordpress/#step-5-run-the-install-script