Guía avanzada para instalar Drupal con Docker: todas las opciones paso a paso

Por Nacho Morato, 28 Mayo, 2025

La instalación de Drupal utilizando Docker se ha convertido en una de las tendencias más sólidas en el mundo del desarrollo web moderno, ya que responde a la creciente demanda de entornos fácilmente replicables, portables y escalables. Gracias a los contenedores, es posible evitar los problemas derivados de la configuración manual de servidores complejos, de modo que tanto profesionales como personas que están dando sus primeros pasos en Drupal pueden poner en marcha entornos de desarrollo y producción de forma mucho más eficiente.

En este artículo te acompaño paso a paso en el proceso de instalación de Drupal con Docker, abordando tanto los distintos métodos (DDEV, Docker4Drupal, Docker Compose manual...) como las ventajas de cada uno, los requisitos previos, la configuración detallada, resolución de problemas habituales y consejos para trabajar con las versiones más modernas de Drupal. Vas a encontrar aquí toda la información esencial y práctica recogida de la experiencia de los principales recursos que dominan los resultados de búsqueda y enriquecida con trucos y matices que suelen marcar la diferencia en un entorno real. Prepárate porque saldrás con las ideas muy claras y listo para lanzarte a construir tus propios sitios Drupal de la manera más profesional posible.

¿Por qué usar Docker para montar Drupal?

Docker se ha convertido en la solución estándar para gestionar entornos de desarrollo y producción gracias a su capacidad para aislar servicios y replicarlos fácilmente en cualquier máquina o servidor. Olvídate de los clásicos problemas de "en mi ordenador funciona". Con Docker, toda la infraestructura de tu proyecto se define en ficheros y se levanta idéntica en cualquier sistema operativo compatible. Esto es especialmente útil para Drupal, un CMS que, por su robustez y modularidad, puede ser complejo de instalar y configurar manualmente. Algunos motivos clave para apostar por Docker en proyectos Drupal:

  • Facilita el desarrollo colaborativo: todo el equipo usa el mismo entorno, eliminando diferencias que pueden generar errores difíciles de rastrear.
  • Acelera la puesta en marcha: puedes tener tu Drupal listo en minutos, sin instalaciones manuales ni configuraciones laboriosas.
  • Permite escalar y mantener fácilmente: con ficheros de configuración como docker-compose.yml, sumar nuevos servicios (cache, mailhog, etc.) es cuestión de añadir unas pocas líneas.
  • Ideal para pruebas automatizadas y despliegues continua integration/continuous deployment (CI/CD): los mismos contenedores sirvan para testear, revisar y finalmente desplegar en producción.

Requisitos previos antes de empezar

Antes de lanzarte a instalar Drupal con Docker, necesitas asegurarte de que tu sistema cuenta con las herramientas básicas instaladas. Dependiendo de tu sistema operativo (Linux, Windows o Mac) los pasos pueden variar ligeramente, aunque el objetivo es siempre el mismo.

  • Docker: la pieza fundamental. Descárgalo desde la web oficial de Docker e instálalo. Asegúrate de tenerlo correctamente configurado y funcionando (puedes comprobarlo ejecutando docker --version). En Linux, puede requerir añadir tu usuario al grupo Docker para evitar usar sudo constantemente.
  • Docker Compose: aunque hay formas de usar Docker puro, la mayoría de los stacks modernos de Drupal se apoyan en Compose para definir varios servicios fácilmente. En las últimas versiones de Docker Desktop ya viene integrado como plugin. Compruébalo ejecutando docker compose version o docker-compose --version.
  • Composer: aunque no imprescindible para algunos métodos, sí es muy recomendable usar Composer para gestionar dependencias de Drupal y sus módulos modernos. Descárgalo desde aquí.
  • Git: en la mayoría de flujos necesitas clonar repositorios (como Docker4Drupal o el propio código de Drupal). Lo puedes instalar desde el gestor de paquetes de tu sistema o desde aquí.
  • Editor de texto/IDE: para modificar ficheros de configuración recomienda usar editores como Visual Studio Code, Sublime Text, Atom o uno de los IDEs específicos como PhpStorm.

Opciones populares para instalar Drupal con Docker

Como casi siempre en open source, existen varias formas de instalar Drupal sobre Docker. Te explico las más recomendadas según tu perfil y necesidades.

Docker4Drupal

Docker4Drupal es uno de los stacks más extendidos y sencillos de usar para poner en marcha un entorno Drupal completo sobre Docker. Desarrollado y mantenido por Wodby, proporciona configuraciones listas para usar con gran variedad de servicios que suelen acompañar a Drupal: MariaDB, PostgreSQL, Apache/Nginx, PHP de varias versiones, Mailhog, Redis, Varnish, Solr, ElasticSearch, Portainer, Traefik y más. Es ideal tanto para desarrolladores principiantes como para expertos que buscan personalizar el entorno a fondo.

  • Ventajas: fácil de arrancar, bien documentado, soporta Drupal 8, 9 y 10, incluye servicios clave para desarrollo profesional (composer, drush, cron, proxies, mailhog...)
  • Desventajas: tamaño considerable de los contenedores, menos orientado a producción pura (aunque se puede adaptar), no tan optimizado como stacks minimalistas.

DDEV

DDEV es una herramienta de desarrollo local basada en Docker que simplifica la configuración y el ciclo de vida de proyectos web en PHP, incluyendo Drupal. Es especialmente potente para quienes suelen trabajar en varios proyectos a la vez y necesitan aislarlos al máximo, permitiendo cambiar de versiones de PHP, bases de datos y otros servicios con gran facilidad.

  • Ventajas: gestión avanzada de proyectos, muy fácil de actualizar, commands propios para tareas frecuentes, integra composer y drush nativamente, ideal para flujos colaborativos e integración continua.
  • Desventajas: puede ser algo más "opaco" para usuarios noveles que buscan entender todo lo que ocurre bajo el capó, menos customizable que Docker puro.

Instalación manual usando Docker Compose

Para quienes prefieren tener un control absoluto sobre cada servicio y aprender realmente qué hace cada componente, es posible montar manualmente tus ficheros docker-compose.yml y configurar cada contenedor paso a paso. Esta opción es la más "de base", ideal para entornos de producción donde quieres optimizar cada servicio, o como aprendizaje profundo.

  • Ventajas: máxima personalización, ideal para aprender cómo funciona cada pieza del stack, válido para integración en sistemas más grandes.
  • Desventajas: más laborioso, propenso a errores si no eres cuidadoso, requiere dominar bien Docker y Yaml.

Ejemplo completo: Instalando Drupal 10 con Docker4Drupal

Vamos a repasar cómo realizar una instalación estándar de Drupal 10 usando Docker4Drupal, desde cero y con todos los detalles importantes para un entorno local profesional. Este método es el más popular actualmente y sirve tanto para aprendizaje como para desarrollar proyectos reales.

Paso 1: Instalación previa de Docker y Docker Compose

En sistemas Ubuntu (o similares), ejecuta en el terminal:

  • Actualizar repositorios y añadir claves:
  • sudo apt-get update
  • sudo apt-get install ca-certificates curl gnupg
  • sudo install -m 0755 -d /etc/apt/keyrings
  • curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  • echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • sudo apt-get update

Después, instala Docker y Docker Compose:

  • sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • Puedes verificar la instalación ejecutando: sudo docker run hello-world
  • Para comprobar Compose como plugin: docker compose version

Paso 2: Crear la carpeta de tu proyecto y clonar docker4drupal

  • Crea una carpeta para tu proyecto, por ejemplo: mkdir drupal10_proyecto && cd drupal10_proyecto
  • Clona el repositorio oficial: git clone https://github.com/wodby/docker4drupal.git
  • Entra en la carpeta clonada: cd docker4drupal

Paso 3: Configuración de variables en .env

El archivo .env es crucial: define el nombre del proyecto, la URL local en la que se expondrá Drupal bajo Docker, el puerto de escucha, las credenciales de la base de datos, etc. Modifica los valores más relevantes (ejemplo):

  • PROJECT_NAME=drupal10proyecto
  • PROJECT_BASE_URL=midrupal.docker.localhost
  • PROJECT_PORT=8000
  • DRUPAL_TAG=10-php8.1

Nota: asegúrate de que el puerto elegido no coincide con otros programas (Apache, Tomcat, etc.) para evitar conflictos.

Paso 4: Acceso sencillo al "codebase" (código fuente)

Por defecto, Docker4Drupal monta el código fuente de Drupal en un volumen gestionado por Docker, lo que dificulta editarlo sin complicaciones. Para mantener el código en tu carpeta del host, modifica docker-compose.override.yml comentando/descomentando las líneas bajo la clave codebase en los servicios PHP, crond y nginx.

Paso 5: Arrancar los contenedores

  • Ejecuta: docker compose up -d
  • Esto descargará las imágenes (la primera vez puede tardar), creará y empezará a ejecutar los contenedores Nginx/Apache, PHP, MariaDB, Drupal, Mailhog, etc.
  • Puedes consultar los contenedores en marcha con: docker ps

Paso 6: Instalar Drupal desde el navegador

  • Accede desde tu navegador a la URL indicada en PROJECT_BASE_URL y el puerto correspondiente: http://midrupal.docker.localhost:8000
  • Verás el instalador típico de Drupal, elige idioma, perfil (estándar o minimal), completa los datos de la base de datos (los tienes en .env, normalmente db: 'drupal', user: 'drupal', pass: 'drupal', host: 'mariadb', port: 3306) y sigue los pasos.
  • Finaliza la instalación creando el usuario administrador y configurando las opciones iniciales.

Paso 7: Alternativa rápida con Drush (instalación automática desde consola)

  • Ejecuta desde el directorio raíz del proyecto: docker exec NOMBRE_DEL_CONTENEDOR_PHP drush si --site-name=TuSitio --account-name=admin --account-pass=admin -y
  • Consulta el nombre del contenedor con docker ps (normalmente algo tipo drupal10proyecto_php).

Paso 8: Gestores de código y volúmenes

Por defecto, el código Drupal está en un volumen docker que puede no ser sencillo de versionar con Git o editar directamente. Si quieres mantener el codebase sincronizado con tu host, asegúrate de mapear correctamente los volúmenes en docker-compose.yml:

  • En el servicio PHP, añade o verifica: - ./:/var/www/html:cached

Así tendrás todos los archivos de Drupal a mano y podrás usar tu editor o IDE preferido.

Paso 9: Comandos Docker útiles para el día a día

  • docker ps: lista los contenedores activos.
  • docker-compose stop: detiene todos los servicios definidos en docker-compose.yml.
  • docker-compose up -d: arranca los servicios en segundo plano.
  • docker exec -it NOMBRE_CONTENEDOR bash: abre una consola del contenedor.
  • docker-compose down: detiene y elimina los contenedores creados.
  • docker-compose logs: consulta los logs de algún servicio.

Montando Drupal con DDEV paso a paso

DDEV aporta una experiencia "casi mágica", facilitando la creación de proyectos Drupal listos en minutos y aislando entornos tan bien que puedes tener varios proyectos en paralelo, cada uno con su PHP, DB, etc. Este método es muy apreciado por equipos colaborativos y quienes buscan rapidez y estandarización sin renunciar a la flexibilidad.

Paso 1: Instalación de DDEV

  • En Ubuntu/Linux: usa Homebrew con brew install drud/ddev/ddev o descarga y ejecuta el script de instalación oficial de DDEV.
  • En Windows/Mac: descarga el instalador desde la web oficial.
  • Comprueba la versión instalada: ddev version

Paso 2: Crear y configurar el nuevo proyecto

  • Crea y accede a la carpeta del proyecto: mkdir drupal_ddev && cd drupal_ddev
  • Inicia la configuración del proyecto: ddev config --project-type=drupal10 --docroot=web --create-docroot
  • DDEV generará una carpeta web/ (raíz típica de Drupal moderno) y todo el árbol de conf necesario.

Paso 3: Arrancar los contenedores

  • Ejecuta: ddev start
  • Esto descarga y levanta los contenedores de PHP, nginx, mariadb y otros servicios (phpmyadmin, mailhog, etc.) de forma personalizada por proyecto.
  • La consola te mostrará las URLs donde acceder al instalador (tipo http://drupal_ddev.ddev.site o http://127.0.0.1:xxxx).

Paso 4: Descargar e instalar Drupal con Composer

  • Usa Composer integrado en DDEV para descargar el core y dependencias: ddev composer create "drupal/recommended-project"
  • También puedes añadir módulos y dependencias con ddev composer require...
  • Accede al navegador usando la URL indicada y sigue los pasos para configurar idioma, perfil, base de datos, usuario y contraseña del sitio, tal como se hace tradicionalmente.
  • Si prefieres, puedes automatizar la instalación con Drush desde consola: ddev exec drush si --account-name=admin --account-pass=admin

Paso 5: Comprobar y corregir permisos de archivos

  • Si durante la instalación ves advertencias sobre permisos en directorios o archivos (como web/sites/default/settings.php), corrige desde la raíz:
  • chmod 555 web/sites/default
  • chmod 444 web/sites/default/settings.php
  • Comprueba con: ls -alhd web/sites/default web/sites/default/settings.php

Paso 6: Comandos útiles en DDEV

  • ddev stop: detiene los contenedores del proyecto actual.
  • ddev list: lista todos los proyectos y su estado.
  • ddev exec: ejecuta comandos en el contenedor principal del proyecto.
  • ddev composer require [paquete]: instala nuevos módulos o dependencias.
  • ddev exec drush en [modulo] -y: habilita un módulo desde consola.

Ventajas clave de DDEV

  • Multi-proyecto: puedes tener varios sitios Drupal cada uno con su versión de PHP, DB, etc. en paralelo.
  • Integración con Composer y Drush out-of-the-box.
  • Ideal para flujos de trabajo colaborativos y entornos cambiantes.
  • Muy fácil de actualizar y mantener al día.

Montaje manual con Docker Compose y Nginx: control total del entorno

Si prefieres construir el stack desde el principio, puedes definir manualmente tu archivo docker-compose.yml y los archivos de configuración para Nginx, PHP, MySQL y Drupal. Aunque más laborioso, este método te da el mayor control y es excelente para entornos de producción o cuando quieres entender cada engranaje.

1. Arquitectura recomendada y definición de servicios

  • Un contenedor para la base de datos (mysql o mariadb)
  • Un contenedor para la aplicación Drupal (basado en drupal:10-phpXX-fpm)
  • Un contenedor para el servidor web (nginx:1.25-alpine por ejemplo)
  • Opcionalmente, otros servicios como certbot (para LetsEncrypt), redis, phpmyadmin, mailhog, varnish, etc.

2. Configuración de Docker Compose (extracto simplificado)

version: "3"
services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: unless-stopped
    env_file: .env
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - internal
  drupal:
    image: drupal:10-fpm-alpine
    container_name: drupal
    depends_on:
      - mysql
    restart: unless-stopped
    volumes:
      - drupal-data:/var/www/html
    networks:
      - internal
      - external
  webserver:
    image: nginx:1.25-alpine
    container_name: webserver
    depends_on:
      - drupal
    restart: unless-stopped
    ports:
      - 80:80
      - 443:443
    volumes:
      - drupal-data:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
      - certbot-etc:/etc/letsencrypt
    networks:
      - external
volumes:
  drupal-data:
  db-data:
  certbot-etc:
networks:
  external:
    driver: bridge
  internal:
    driver: bridge

Este archivo define los contenedores necesarios y los volúmenes que comparten datos entre ellos (código, base de datos, certificados SSL, etc.).

3. Configuración personalizada de Nginx para Drupal

Debes crear un archivo como nginx-conf/nginx.conf con bloques de servidor para HTTP y HTTPS. Ejemplo de bloque HTTPS:

server {
  listen 443 ssl;
  server_name midrupal.com www.midrupal.com;
  root /var/www/html;
  index index.php index.html;
  ssl_certificate /etc/letsencrypt/live/midrupal.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/midrupal.com/privkey.pem;
  add_header X-Frame-Options "SAMEORIGIN" always;
  add_header X-XSS-Protection "1; mode=block" always;
  ...
  location / {
    try_files $uri $uri/ /index.php$is_args$args;
  }
  location ~ \.php$ {
    fastcgi_pass drupal:9000;
    ...
  }
}

Es fundamental actualizar las rutas y nombres de dominio a los de tu proyecto.
También puedes configurar la versión HTTP (puerto 80) solo para redirigir a HTTPS o para validación Let's Encrypt si usas Certbot.

4. Variables de entorno y protección de credenciales

Guarda tus credenciales en un archivo .env fuera del alcance de los repositorios públicos y añádelo a .gitignore y .dockerignore para evitar filtraciones.

5. Arranque del stack y primera instalación de Drupal

  • Primero, ejecuta: docker-compose up -d
  • Luego accede con el navegador a la URL y puerto definidos
  • Sigue el instalador y usa los datos de la base de datos del .env

Gestión de certificados SSL automáticos con Let's Encrypt y renovación cronificada

Para proyectos profesionales, es fundamental tener un entorno seguro y contar con certificados SSL válidos y actualizados. Puedes automatizar la obtención y renovación de certificados con Certbot y cron:

  • Añade un servicio certbot en docker-compose.yml con los comandos adecuados (certonly, --webroot, --email tu@email.com, etc.)
  • Configura un script ssl_renew.sh que haga: cd /ruta/proyecto; docker-compose run certbot renew; docker-compose kill -s SIGHUP webserver
  • Agrega esa tarea a la crontab para ejecutarse semanalmente (por ejemplo, * 2 * * 2 ...)

Así tendrás tus certificados siempre al día sin intervención manual.

Resolución de problemas habituales y buenas prácticas

  • Conflicto de puertos: si tienes Apache u otro servicio usando el 80 o 443, detenlo o cambia los puertos en docker-compose.yml.
  • Volúmenes y persistencia: activa los volúmenes para base de datos y codebase para no perder datos al reiniciar o borrar contenedores.
  • Permisos en Linux: si encuentras errores de permisos, asigna los adecuados a los directorios y archivos clave (settings.php, sites/default/files).
  • Actualización de imágenes: recuerda actualizar periódicamente las imágenes de Docker (docker-compose pull) para evitar vulnerabilidades y mantener compatibilidad.
  • Seguridad de credenciales: nunca compartas ni subas .env a repositorios públicos.
  • Logs y depuración: usa docker-compose logs y docker logs para rastrear errores y problemas de configuración.

Extensión del entorno: servicios extra populares en el mundo Drupal

  • phpMyAdmin: fácil de añadir (descomenta o añade la sección pma en docker-compose.yml) para gestionar la base de datos vía web.
  • Mailhog: gestor de correos "falsos" para pruebas de envío sin salir de tu entorno local.
  • Redis/Memcached: para mejorar el rendimiento y la caché avanzada de Drupal en desarrollo y producción.
  • Solr/ElasticSearch: útiles para búsquedas complejas e indexadas (sitios grandes, catálogos...)
  • Portainer: interfaz web para administrar y monitorizar tus contenedores Docker fácilmente.

Consejos y trucos para trabajar cómodo con Drupal y Docker

  • Usa nombres de proyecto únicos y fáciles de recordar en la configuración (.env, docker-compose.yml, DDEV config...) para evitar colisiones si tienes varios Drupal en tu sistema.
  • Monta el codebase en una carpeta local sincronizada para trabajar con tu editor favorito y versionar cómodamente.
  • Realiza backups periódicos de la base de datos (docker exec NOMBRE_MYSQL_CONTAINER mysqldump ...) y del código, aunque sea desarrollo.
  • Actualiza Composer regularmente para aprovechar las últimas versiones de Drupal y sus dependencias, aplicando: composer update (dentro del contenedor o desde DDEV).
  • Haz uso de la comunidad: los repositorios Docker4Drupal, DDEV y las guías oficiales de Drupal están bien documentados y cuentan con foros activos para resolver dudas.
  • Automatiza tareas con scripts (bash, make, npm...) para flujos repetitivos: reinicio de contenedores, backups, tests, deploy, integraciones, etc.

Preguntas frecuentes y problemas recurrentes

  • ¿Puedo usar Docker4Drupal y DDEV a la vez? Técnicamente sí, pero no es recomendable mezclar stacks en el mismo proyecto. Elige uno y explótalo al máximo antes de pasar a otro.
  • ¿Se puede usar Docker para entornos de producción? Sí, pero requiere endurecimiento de las imágenes, exposición segura de puertos, monitorización, escalado y backups robustos. Para desarrollo, es lo más recomendado por sencillez.
  • ¿Y si quiero usar otra base de datos? La mayoría de stacks soportan tanto MariaDB/MySQL como PostgreSQL. Cambia el contenedor correspondiente y actualiza la configuración en Drupal.
  • ¿Es necesario Composer? No estrictamente, pero para aprovechar el ecosistema moderno de Drupal (módulos, temas, librerías externas) es muy recomendable usar Composer.
  • ¿Cómo activo más servicios? Normalmente solo tienes que descomentar o copiar la sección correspondiente en docker-compose.yml y añadir el volumen o puerto necesario.
  • ¿Qué hago si la instalación se bloquea? Revisa logs, verifica los puertos, permisos y versiones, y recuerda que yaml es muy sensible a espacios/tabulaciones.

Como has podido comprobar a lo largo del artículo, instalar Drupal con Docker abre un abanico de ventajas tanto para desarrolladores solitarios como para equipos grandes, permitiendo replicabilidad y una gestión mucho más eficaz de los entornos y sus dependencias. Que elijas DDEV, Docker4Drupal o un stack manual dependerá de tus preferencias y nivel de control deseado, pero todos los métodos se benefician de la potencia de los contenedores. Recuerda mantenerte al día, consultar la documentación oficial y apoyarte en la comunidad para seguir ampliando tus conocimientos y aprovechar todo el potencial de Drupal en tus proyectos.

Etiquetas

Comentarios