wordpress en local con docker

WordPress en local con Docker: La guía paso a paso definitiva

Desarrollar un entorno de wordpress en local con docker es el estándar definitivo para profesionalizar tu flujo de trabajo, garantizar la consistencia y eliminar para siempre el temido «en mi ordenador sí funciona». Esta guía te ofrece un camino práctico y directo para abandonar herramientas obsoletas como MAMP o XAMPP. Aprenderás a orquestar un entorno de desarrollo completo y aislado utilizando un archivo docker-compose.yml optimizado, que te permitirá levantar toda la pila tecnológica de WordPress con un único comando en la terminal.

Si buscas llevar tu desarrollo de WordPress al siguiente nivel de eficiencia y portabilidad, dominando las mismas herramientas que utilizan las agencias y los equipos de desarrollo más avanzados, has llegado al lugar correcto. Esta guía no solo te enseñará a copiar y pegar código, sino a entender los fundamentos que te darán un control absoluto sobre tus proyectos.

La Transformación Definitiva: Pilares de Docker para tu Flujo de Trabajo

Adoptar Docker para el desarrollo de WordPress en local es un cambio de paradigma que garantiza consistencia, portabilidad y un flujo de trabajo profesional. Dejarás atrás los conflictos de versiones y el clásico «en mi ordenador sí funciona». A continuación, te resumimos las claves que transformarán tu manera de crear y gestionar proyectos de WordPress.

  • Dile adiós al «en mi máquina funciona»: Docker empaqueta tu proyecto en contenedores aislados, asegurando que el entorno sea idéntico para ti, tu equipo y el servidor de producción.
  • Domina tu entorno con un único archivo: El fichero docker-compose.yml define y centraliza todos los servicios (WordPress, base de datos), permitiendo levantar todo el sistema con un solo comando.
  • Gestiona versiones de PHP y MySQL sin conflictos: Asigna versiones específicas de software a cada proyecto de forma independiente, evitando las incompatibilidades entre instalaciones locales.
  • Colabora y despliega proyectos como un profesional: Comparte tu configuración de Docker para que todo el equipo trabaje en un entorno replicado, simplificando la integración continua y el despliegue a producción.
  • Simplifica la instalación a un solo comando: Lanza un entorno de WordPress completo y optimizado ejecutando docker-compose up, sin necesidad de configurar servidores web ni bases de datos manualmente.
  • Aísla tus proyectos para mayor seguridad y limpieza: Cada proyecto se ejecuta en su propio contenedor, lo que evita que las dependencias o configuraciones de uno afecten a los demás.

Docker puede parecer intimidante, pero con el enfoque correcto, se convierte en una herramienta indispensable para cualquier desarrollador serio de WordPress. En esta guía te llevaremos de la mano, con un enfoque 100% práctico, para que puedas implementar este flujo de trabajo profesional desde hoy mismo.

¿Por Qué Usar Docker para WordPress en Lugar de MAMP o XAMPP?

Las herramientas como MAMP o XAMPP fueron durante años el estándar para montar un servidor local. Sin embargo, se basan en instalar el software (Apache, MySQL, PHP) directamente en tu sistema operativo, lo que genera un entorno único, frágil y a menudo conflictivo. Si necesitas una versión de PHP para un proyecto y otra distinta para otro, empiezan los interminables problemas de configuración. Estos entornos monolíticos son el equivalente a realizar una cirugía en una cocina: es posible, pero el riesgo de contaminación y error es altísimo.

Docker, en cambio, utiliza la tecnología de contenedores. Imagina cada parte de tu aplicación (WordPress, la base de datos) como una pieza de Lego dentro de su propia caja transparente y estéril. Estas cajas, o contenedores, son aisladas, portátiles y contienen todo lo necesario para funcionar, y nada más. Esto elimina por completo los conflictos entre proyectos y las diferencias entre el entorno de desarrollo y el de producción.

Las Ventajas Clave de un Entorno de Desarrollo en Contenedores

Adoptar un flujo de trabajo basado en contenedores no es solo una moda; es una evolución estratégica que aporta beneficios tangibles desde el primer día, aplicables conceptualmente a cualquier sector que valore la consistencia y la reproducibilidad.

Consistencia Total: El Fin del «En mi Ordenador Funciona»

El principal dolor de cabeza en el desarrollo web desaparece. Como el entorno está definido en archivos de configuración, será idéntico en tu Mac, en el Windows de tu compañero y en el servidor Linux de producción. De la misma forma que un laboratorio farmacéutico necesita un entorno controlado y replicable para sus ensayos, un desarrollador necesita consistencia para garantizar que el código se comporte de manera predecible. Se acabó el depurar problemas que solo ocurren en una máquina concreta.

Aislamiento de Proyectos y Dependencias

¿Necesitas un proyecto con PHP 8.2 y MySQL 8, y otro antiguo que solo funciona con PHP 7.4 y MySQL 5.7? Con Docker, cada proyecto vive en su propio ecosistema de contenedores. Puedes tener múltiples entornos ejecutándose simultáneamente sin que interfieran entre sí, una flexibilidad que es simplemente imposible con herramientas como MAMP. Esto es crucial para agencias que gestionan el mantenimiento de docenas de sitios o para freelancers que trabajan con un portfolio de clientes diverso.

Portabilidad y Colaboración Simplificada

Incorporar a un nuevo miembro al equipo es tan fácil como pedirle que clone el repositorio y ejecute un comando. Todo el entorno de desarrollo se levantará automáticamente, sin necesidad de un largo manual de instalación y configuración manual. Esta portabilidad redefine la colaboración, permitiendo a equipos distribuidos trabajar sobre una base idéntica, agilizando desde el desarrollo de funcionalidades en un eCommerce hasta la creación de una plataforma de e-learning para un centro educativo.

Con estas ventajas en mente, es evidente por qué Docker se ha convertido en la herramienta preferida. Ahora, veamos qué necesitas para empezar.

Requisitos Previos: Qué Necesitas Antes de Empezar

No te asustes, la lista es corta y el proceso es más sencillo de lo que parece. Solo necesitas un par de cosas para ponerte en marcha y entrar en el mundo del desarrollo profesional.

Instalación de Docker Desktop (Windows, macOS y Linux)

Docker Desktop es la herramienta principal que necesitas. Es una aplicación gratuita que instala todo lo necesario para trabajar con contenedores en tu ordenador personal. Incluye:

  • Docker Engine: El motor que crea, ejecuta y gestiona los contenedores.
  • Cliente de línea de comandos de Docker: La interfaz para comunicarte con el Docker Engine.
  • Docker Compose: La herramienta que usaremos para definir y orquestar nuestras aplicaciones multicontenedor de WordPress.

Puedes descargarlo e instalarlo fácilmente desde la web oficial de Docker Desktop. La instalación está guiada y es muy sencilla en cualquier sistema operativo moderno.

Conocimientos Básicos de la Terminal o Línea de Comandos

No necesitas ser un gurú de la terminal, pero te sentirás más cómodo si sabes ejecutar comandos básicos para navegar entre directorios (cd), listar archivos (ls en macOS/Linux o dir en Windows) y crear carpetas (mkdir). La mayoría de las interacciones con Docker se realizan mediante comandos sencillos que te proporcionaremos aquí, como docker-compose up y docker-compose down.

Una vez que tengas Docker Desktop instalado y funcionando, estarás listo para crear tu primer proyecto de WordPress en local con Docker.

Guía Paso a paso: Instalar WordPress en Local con Docker

Es hora de la acción. En los siguientes pasos, crearemos un entorno de WordPress completo, funcional y profesional desde cero. Verás lo rápido y limpio que es el proceso.

Creación de la Estructura de Carpetas del Proyecto

Primero, abre tu terminal y crea una carpeta para tu nuevo proyecto. Dentro de ella, crearemos otra carpeta llamada wordpress que contendrá los archivos de nuestra instalación (temas, plugins y uploads).

mkdir mi-proyecto-wp
cd mi-proyecto-wp
mkdir wordpress

Tu estructura de carpetas debería ser así de simple por ahora:

mi-proyecto-wp/
└── wordpress/

El Archivo docker-compose.yml: Tu Centro de Control

El corazón de nuestro entorno es el archivo docker-compose.yml. Este fichero en formato YAML es como una receta de cocina donde le decimos a Docker qué servicios necesitamos (WordPress y una base de datos), qué ingredientes (imágenes de software) usar y cómo deben interactuar entre ellos.

Crea un archivo llamado docker-compose.yml en la raíz de tu proyecto (mi-proyecto-wp/).

El Código docker-compose.yml Listo para Usar

Copia y pega el siguiente código en tu archivo docker-compose.yml. Hemos incluido Adminer, un gestor de bases de datos ligero y muy útil, como servicio adicional.

version: '3.8'

services:
  db:
    image: mysql:8.0
    container_name: mi_proyecto_wp_db
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 'password_muy_segura_aqui'
      MYSQL_DATABASE: 'wordpress'
      MYSQL_USER: 'wordpress_user'
      MYSQL_PASSWORD: 'password_wordpress'
    restart: always

  wordpress:
    image: wordpress:latest
    container_name: mi_proyecto_wp_wordpress
    depends_on:
      - db
    ports:
      - "8000:80"
    volumes:
      - ./wordpress:/var/www/html
    environment:
      WORDPRESS_DB_HOST: 'db:3306'
      WORDPRESS_DB_NAME: 'wordpress'
      WORDPRESS_DB_USER: 'wordpress_user'
      WORDPRESS_DB_PASSWORD: 'password_wordpress'
    restart: always

  adminer:
    image: adminer
    container_name: mi_proyecto_wp_adminer
    restart: always
    ports:
      - "8080:8080"

volumes:
  db_data:

Análisis Detallado del Fichero docker-compose.yml

No te limites a copiar y pegar. Entender qué hace cada línea es clave para dominar Docker y poder adaptar la configuración a tus necesidades futuras.

El Servicio de Base de Datos (db)

Este bloque define el contenedor para nuestra base de datos MySQL.

  • image: mysql:8.0: Le decimos a Docker que use la imagen oficial de MySQL, en su versión 8.0, disponible en Docker Hub.
  • container_name: mi_proyecto_wp_db: Le damos un nombre fácil de recordar a nuestro contenedor.
  • volumes: - db_data:/var/lib/mysql: Mapea un volumen llamado db_data a la carpeta donde MySQL guarda los datos dentro del contenedor. Esto es crucial, ya que asegura que los datos de tu base de datos persistan aunque apagues o elimines el contenedor.
  • environment: Aquí definimos las variables de entorno para configurar la base de datos: la contraseña de root, el nombre de la base de datos y las credenciales del usuario de WordPress. ¡Recuerda cambiar password_muy_segura_aqui por algo seguro!
  • restart: always: Indica a Docker que reinicie automáticamente este contenedor si se detiene por algún error, asegurando la disponibilidad de la base de datos.

El Servicio de WordPress (wordpress)

Este bloque define el contenedor principal con la aplicación de WordPress.

  • image: wordpress:latest: Usa la última versión de la imagen oficial de WordPress en Docker Hub. Puedes fijar una versión específica si lo necesitas (ej. wordpress:6.4).
  • depends_on: - db: Le indica a Docker que no inicie este contenedor hasta que el contenedor db esté completamente levantado y listo. Esto previene errores de conexión.
  • ports: -"8000:80": Mapea el puerto 8000 de tu ordenador (el anfitrión) al puerto 80 del contenedor (donde escucha el servidor web Apache). Podrás acceder a tu web en http://localhost:8000.
  • volumes: - ./wordpress:/var/www/html: La magia del desarrollo local ocurre aquí. Mapea la carpeta wordpress de tu proyecto a la carpeta raíz del servidor web dentro del contenedor. Cualquier cambio que hagas en tus archivos locales (temas, plugins) se reflejará al instante en el sitio.
  • environment: Define las variables de entorno que WordPress usará para conectarse a la base de datos. Fíjate que WORDPRESS_DB_HOST es db, el nombre de nuestro servicio de base de datos. Docker se encarga de la resolución de nombres en su red interna.

Volúmenes: Persistencia de Datos para tu Base de Datos y Ficheros

Los volúmenes son la clave para que tus datos no se pierdan. Es fundamental entender la diferencia entre los dos tipos que usamos:

  • Volumen Nombrado (db_data): Es un volumen gestionado enteramente por Docker. Es la forma recomendada de persistir datos de servicios como bases de datos, ya que es más eficiente y seguro.
  • Bind Mount (./wordpress:/var/www/html): Sincroniza una carpeta de tu ordenador directamente con una carpeta dentro del contenedor. Es perfecto para el desarrollo de código (temas, plugins), ya que te permite usar tu editor de código favorito en tu máquina local y ver los cambios al instante.

Levantando el Entorno con un Solo Comando

Con el archivo docker-compose.yml guardado, vuelve a tu terminal (asegúrate de estar en la raíz del proyecto mi-proyecto-wp/) y ejecuta:

docker-compose up -d

La primera vez que ejecutes este comando, Docker comenzará a descargar las imágenes de MySQL, WordPress y Adminer. Este proceso puede tardar unos minutos dependiendo de tu conexión a internet. Una vez finalizado, creará la red, los volúmenes y los contenedores, y los iniciará. El flag -d (de detached) hace que todo se ejecute en segundo plano, liberando tu terminal.

¡Y ya está! Abre tu navegador y visita http://localhost:8000 para comenzar la famosa instalación de WordPress en 5 minutos.

Comandos Esenciales de Docker Compose para Gestionar tu Entorno

Una vez que tu entorno está funcionando, necesitarás unos pocos comandos para controlarlo en tu día a día. Son muy intuitivos y potentes.

Iniciar los Contenedores (docker-compose up -d)

Este es el comando que ya has usado. up levanta los servicios definidos en tu docker-compose.yml. Si los contenedores ya existen, simplemente los inicia. Si no, los crea. El flag -d es tu amigo para trabajar cómodamente.

Detener y Eliminar los Contenedores (docker-compose down)

Cuando termines de trabajar, este comando detiene y elimina los contenedores, así como la red que se creó para ellos. ¡No te preocupes! Tus datos están a salvo en los volúmenes. Si quieres eliminar también el volumen de la base de datos para empezar completamente de cero, puedes usar el comando docker-compose down -v.

Ver el Estado de tus Servicios (docker-compose ps)

Este comando te muestra una lista de los contenedores que forman parte de tu proyecto, su estado (si están corriendo o no) y los puertos que están utilizando. Es muy útil para una comprobación rápida.

Acceder a la Terminal de un Contenedor (docker-compose exec)

A veces necesitarás «entrar» en un contenedor para ejecutar un comando, como si estuvieras conectado por SSH a un servidor. Esto es extremadamente útil para usar herramientas como WP-CLI. Por ejemplo, para acceder a la terminal bash del contenedor de WordPress:

docker-compose exec wordpress bash

Una vez dentro, estás en un entorno Linux donde puedes ejecutar cualquier comando de shell o, por ejemplo, listar los plugins con wp plugin list.

Con los comandos básicos dominados, podemos optimizar nuestro flujo de trabajo con algunas buenas prácticas.

Flujo de Trabajo y Prácticas Recomendadas

Montar el entorno es solo el principio. Un verdadero flujo profesional implica sacar el máximo partido a la herramienta con las mejores prácticas de la industria.

Cómo Acceder a tu Base de Datos con Adminer o TablePlus

Gracias al servicio adminer que incluimos en el docker-compose.yml, puedes gestionar tu base de datos fácilmente desde el navegador. Simplemente visita http://localhost:8080. Para iniciar sesión, utiliza las siguientes credenciales:

  • Servidor: El nombre del servicio de la base de datos: db
  • Usuario: wordpress_user
  • Contraseña: password_wordpress
  • Base de datos: wordpress

Si prefieres usar un cliente de escritorio más potente como TablePlus, DBeaver o Sequel Ace, la configuración es similar. Necesitarás usar 127.0.0.1 o localhost como host, el puerto 3306 (si no está ocupado) y las mismas credenciales. Para que esto funcione, deberás exponer el puerto de la base de datos añadiendo ports: ["3306:3306"] al servicio db en tu docker-compose.yml.

Gestiona Diferentes Versiones de PHP y MySQL por Proyecto

Esta es una de las grandes ventajas de Docker. ¿Un cliente te pide revisar un sitio antiguo que requiere PHP 7.4? Simplemente cambia la línea image: wordpress:latest por una etiqueta específica como image: wordpress:5.9-php7.4-apache. Detén y levanta de nuevo el entorno con docker-compose down && docker-compose up -d y ya tendrás la versión que necesitas, sin afectar en absoluto al resto de tus proyectos.

Compartir tu Entorno de Docker con Otros Desarrolladores

Imagina que un nuevo desarrollador se une a tu equipo o que colaboras con otro freelancer. El proceso de onboarding es increíblemente simple:

  1. Dale acceso al repositorio de Git del proyecto.
  2. Pídele que lo clone en su máquina.
  3. Dile que ejecute un único comando: docker-compose up -d.

En cuestión de minutos, tendrá una réplica exacta de tu entorno de desarrollo local, con la misma versión de PHP, MySQL y WordPress, garantizando que todos trabajan sobre una base idéntica.

Aunque este flujo es muy robusto, a veces pueden surgir problemas. Veamos cómo solucionar los más comunes.

Solución a Errores Comunes al Configurar WordPress con Docker

Incluso con la mejor configuración, a veces las cosas no salen como esperamos. Aquí tienes soluciones a los problemas más frecuentes.

Conflictos de Puertos (ERROR: Port is already allocated)

Este error aparece si ya tienes otro servicio (quizás otro proyecto de Docker o un MAMP que olvidaste apagar) usando el puerto que intentas asignar. Por ejemplo, el puerto 8000 o 8080.

La solución es simple: cambia el puerto en tu docker-compose.yml. Edita la línea de ports en el servicio que da el error:

# Antes
ports:
  - "8000:80"

# Después (por ejemplo, al puerto 8001)
ports:
  - "8001:80"

Guarda el archivo y vuelve a ejecutar docker-compose up -d. Ahora tu sitio estará en http://localhost:8001.

Problemas de Permisos con los Volúmenes

Especialmente en sistemas operativos Linux, puedes encontrarte con que WordPress no puede escribir en la carpeta wp-content (para instalar plugins, temas o subir imágenes), mostrando un error de permisos. Esto se debe a que el ID de usuario dentro del contenedor (normalmente www-data con ID 33) no coincide con el ID de tu usuario local.

Una solución rápida, aunque no la más segura para producción, es cambiar los permisos de tu carpeta local de WordPress:

# Otorgar permisos de escritura al propietario, grupo y otros
sudo chmod -R 777 wordpress/

Advertencia: Asignar permisos 777 es muy permisivo y no se recomienda en producción, pero suele ser una solución aceptable y rápida para un entorno de desarrollo local. Una solución más avanzada implicaría configurar el usuario dentro de tu contenedor.

El Contenedor de la Base de Datos no se Inicia Correctamente

Si al acceder a tu sitio WordPress te encuentras con un «Error al establecer una conexión con la base de datos», lo más probable es que el contenedor db no haya arrancado bien o el contenedor de WordPress no pueda conectar con él. Para investigar, puedes ver los logs específicos de ese contenedor:

docker-compose logs db

Revisa los logs en busca de mensajes de error. A menudo, el problema se debe a contraseñas incorrectas en las variables de entorno, problemas con el volumen de datos si está corrupto, o falta de recursos en tu máquina.

Preguntas Frecuentes (FAQ)

Aquí resolvemos algunas dudas comunes para que termines de convencerte del poder de Docker.

¿Qué diferencias hay entre usar Docker y Local by Flywheel?

Local (ahora LocalWP) es una fantástica herramienta que, de hecho, utiliza Docker y otras tecnologías de virtualización por debajo. Ofrece una interfaz gráfica muy pulida y fácil de usar, lo que la hace perfecta si no quieres tocar la línea de comandos. Sin embargo, aprender a usar Docker directamente te da un control mucho más granular y es una habilidad transferible a cualquier otro tipo de desarrollo web, no solo WordPress. Docker te permite construir configuraciones complejas (ej. con Redis, Elasticsearch, etc.) que Local no soporta de forma nativa.

¿Es más lento desarrollar con Docker?

En sistemas macOS y Windows, la E/S (lectura/escritura) de archivos entre el sistema anfitrión y los contenedores (específicamente con los bind mounts) puede tener una pequeña sobrecarga de rendimiento. Sin embargo, las versiones recientes de Docker Desktop con tecnologías como VirtioFS han mejorado muchísimo en este aspecto. Para la mayoría de los proyectos de WordPress, la diferencia es imperceptible en el día a día, y los beneficios en consistencia y portabilidad superan con creces cualquier posible desventaja.

¿Cómo puedo instalar plugins y temas en mi WordPress local?

Exactamente igual que siempre. Gracias al volumen que hemos configurado (./wordpress:/var/www/html), la carpeta wordpress de tu proyecto está sincronizada en tiempo real con la del contenedor. Puedes:

  • Instalar plugins y temas desde el propio panel de administración de WordPress.
  • Descomprimir un tema o plugin directamente en las carpetas wp-content/themes o wp-content/plugins de tu proyecto local usando tu explorador de archivos. Los cambios se reflejarán inmediatamente.
¿Puedo usar WP-CLI con esta configuración de Docker?

¡Por supuesto! Y es una de las mayores ventajas de este flujo de trabajo. Usando el comando docker-compose exec puedes ejecutar cualquier comando de WP-CLI directamente en tu instalación. Es la forma más profesional y eficiente de gestionar WordPress. Por ejemplo, para instalar y activar el plugin «Classic Editor»:

docker-compose exec wordpress wp plugin install classic-editor --activate

Dominar esta combinación de wordpress en local con docker y WP-CLI te convertirá en un desarrollador mucho más rápido y productivo.

¿Cómo manejo HTTPS/SSL en mi entorno local de Docker?

Configurar SSL localmente puede ser complejo. Una solución popular es añadir un nuevo servicio en tu docker-compose.yml que actúe como un proxy inverso, como Nginx o Traefik. Estos pueden configurarse para usar certificados autofirmados y redirigir el tráfico al contenedor de WordPress. Esto replica de forma más fidedigna un entorno de producción y evita problemas de contenido mixto.

Tu Evolución como Desarrollador WordPress

Abandonar las limitaciones de MAMP o XAMPP para adoptar Docker no es solo un cambio de herramienta, sino una evolución fundamental en tu flujo de trabajo. A lo largo de esta guía, hemos desmitificado el proceso, demostrando que, con un único archivo docker-compose.yml y un par de comandos, es posible levantar un entorno de WordPress local totalmente aislado, consistente y profesional. Hemos pasado de la incertidumbre del «en mi ordenador funciona» a la certeza de un sistema replicable y escalable.

El verdadero valor de integrar Docker radica en la eficiencia y la tranquilidad que aporta. Se traduce en menos horas perdidas solucionando problemas de configuración, en una colaboración más ágil y en la seguridad de que tu desarrollo se asemeja al máximo al entorno de producción final. Pero esto es solo el comienzo. Dominar Docker abre la puerta a conceptos más avanzados que definen el futuro del desarrollo web:

  • Integración con Dev Containers: Herramientas como Dev Containers de Visual Studio Code utilizan esta misma base para crear entornos de desarrollo completos y reproducibles directamente dentro de tu editor de código.
  • CI/CD (Integración y Despliegue Continuo): Tu configuración de Docker puede ser la base para automatizar pruebas y despliegues. Herramientas como GitHub Actions o GitLab CI pueden usar tus mismos archivos para construir y testear tu aplicación en cada commit.
  • Arquitecturas Headless: Docker simplifica enormemente la gestión de arquitecturas complejas como WordPress Headless, permitiéndote ejecutar el backend de WordPress en un contenedor y tu aplicación frontend (React, Vue, Svelte) en otro, comunicándose a través de una red interna.

La pregunta ya no es si merece la pena aprender a usar WordPress en local con Docker, sino cuánto tiempo más vas a permitir que los viejos métodos frenen tu productividad. Has dado el primer paso para convertirte en un desarrollador más rápido, fiable y preparado para los desafíos del futuro.


Clemente Moraleda - Programador Web
Clemente Moraleda

Soy desarrollador y Programador WordPress con más de 15 años de experiencia creando todo tipo de sitios web, desde blogs personales y páginas corporativas hasta plataformas complejas totalmente a medida. A lo largo de mi carrera, he tenido la oportunidad de trabajar en proyectos de diferentes sectores, lo que me ha permitido desarrollar una gran capacidad de adaptación y ofrecer soluciones eficaces, personalizadas y escalables para cada cliente.

Otros artículos que tambien pueden interesarte: