Docker para desarrollo local: guía completa paso a paso

desarrollo local con Docker

📅 Publicado el 6 de noviembre, 2026 · Por Equipo RedServicio

Trabajar en local con Docker es ya, para muchos equipos, la opción por defecto. Y tiene sentido: te da entornos reproducibles, rápidos y coherentes entre tu máquina y producción. Se acabó instalar PHP, MySQL o Nginx directamente sobre tu sistema operativo (y con ellos, ese clásico «funciona en mi ordenador pero no en el servidor»). Aquí vas a encontrar, paso a paso, cómo montar tu primer entorno con contenedores: desde la instalación hasta un docker-compose.yml funcional con PHP, MySQL y Nginx.

¿Por qué usar Docker para el desarrollo local de tus proyectos web?

Piensa en el escenario típico. Tienes tres proyectos abiertos a la vez y cada uno pide una versión distinta de PHP (7.4, 8.1, 8.3), quizá otra de MySQL, o una configuración concreta de Xdebug. Si lo instalas todo en tu equipo, los conflictos llegan tarde o temprano: ficheros de configuración que se pisan, dependencias incompatibles, un mantenimiento engorroso. Docker evita ese desastre aislando cada proyecto en contenedores ligeros con sus propias dependencias.

¿Qué ganas con esto? Bastante:

  • Reproducibilidad: el mismo entorno funciona igual en Windows, Mac y Linux, y lo compartes con tu equipo con un solo archivo.
  • Aislamiento total: cada proyecto lleva su versión de PHP, su base de datos y su servidor web, sin interferencias entre ellos.
  • Proximidad a producción: si tu hosting (como el de RedServicio.net) ejecuta la misma pila tecnológica, pasar de local a producción es prácticamente transparente.
  • Limpieza: al cerrar un proyecto, borras sus contenedores y tu sistema queda tal cual estaba.
  • Onboarding exprés: un compañero nuevo ejecuta docker compose up y en dos minutos tiene el proyecto andando.

Consejo: si todavía no combinas control de versiones con Docker, empieza ya. Sube tu docker-compose.yml al repositorio y mete los volúmenes de datos en .gitignore.

Requisitos previos e instalación de Docker en Windows, Mac y Linux

Necesitas un equipo con al menos 4 GB de RAM (8 GB mejor) y la virtualización activada en la BIOS/UEFI. Lo más sencillo: instalar Docker Desktop, que trae Docker Engine, Docker Compose y una interfaz gráfica.

Instalación según tu sistema operativo

  • Windows: descarga Docker Desktop desde docker.com. Hace falta Windows 10/11 de 64 bits con WSL 2 activado. Ejecuta wsl –install en PowerShell como administrador, reinicia y luego instala Docker Desktop marcando «Use WSL 2 based engine».
  • Mac: elige el instalador para Apple Silicon (M1/M2/M3) o Intel según tu procesador. Arrastra la app a Aplicaciones, ábrela y concede los permisos que te pida.
  • Linux (Ubuntu/Debian): instala Docker Engine desde los repositorios oficiales de Docker para recibir actualizaciones automáticas:

Los comandos esenciales:

sudo apt-get update && sudo apt-get install ca-certificates curl && sudo install -m 0755 -d /etc/apt/keyrings && curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

Después añades el repositorio con add-apt-repository e instalas con sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin. Un detalle que muchos olvidan: añade tu usuario al grupo docker con sudo usermod -aG docker $USER, así no tendrás que escribir sudo en cada comando.

Comprueba que todo va bien con docker –version y docker compose version. Si ambos te devuelven un número de versión, puedes seguir adelante.

Crear tu primer docker-compose.yml: PHP, MySQL y Nginx paso a paso

Aquí está el corazón del entorno: el archivo docker-compose.yml, donde defines los servicios (contenedores) que formarán tu aplicación. Crea una carpeta para el proyecto, por ejemplo mi-web/, y dentro un docker-compose.yml con esta estructura:

  1. Servicio web (Nginx): escucha en el puerto 80 de tu máquina y sirve los ficheros del directorio local ./src.
  2. Servicio php (PHP-FPM 8.2): procesa el código PHP y habla con Nginx a través de la red interna.
  3. Servicio db (MySQL 8): guarda los datos en un volumen persistente, de modo que no se pierdan al apagar los contenedores.

Un ejemplo funcional, comentado:

services: web (image: nginx:alpine, ports: 8080:80, volumes: ./src:/var/www/html y ./nginx.conf:/etc/nginx/conf.d/default.conf), php (image: php:8.2-fpm, volumes: ./src:/var/www/html) y db (image: mysql:8.0, environment: MYSQL_ROOT_PASSWORD, MYSQL_DATABASE y MYSQL_USER, volumes: db_data:/var/lib/mysql).

Tres detalles que conviene entender bien:

  • Volúmenes: la sintaxis ./src:/var/www/html monta tu carpeta local dentro del contenedor. Editas el código en tu editor favorito, recargas el navegador y ahí están los cambios. Sin reconstruir nada.
  • Redes: Docker Compose crea una red interna automáticamente; desde PHP te conectas a MySQL usando el host db (el nombre del servicio), no localhost.
  • Puertos: 8080:80 publica el puerto 80 del contenedor en el 8080 de tu equipo, evitando conflictos con otros servicios.

Crea también un nginx.conf mínimo que apunte el root a /var/www/html y pase los ficheros .php al servicio php:9000 vía FastCGI. Guarda un index.php con <?php phpinfo(); dentro de src/ y levanta todo con docker compose up -d. Abre http://localhost:8080 en el navegador. ¿Ves la página de información de PHP? Entonces tu entorno local con Docker ya está funcionando.

Cómo configurar volúmenes y variables de entorno en tu desarrollo local con Docker

Hay algo que marca la diferencia entre sufrir con Docker y disfrutarlo: que tus cambios en el código se reflejen al instante, sin reconstruir la imagen cada dos minutos. Para eso sirven los volúmenes, que sincronizan un directorio de tu máquina con uno del contenedor.

En tu fichero docker-compose.yml, añade esta sección al servicio web o PHP:

  1. Volumen de código: ./src:/var/www/html monta tu carpeta local de código en el directorio raíz del contenedor. Editas, guardas, recargas. Ya está.
  2. Volúmenes con nombre: para datos de base de datos, usa db_data:/var/lib/mysql. Así la información persiste aunque elimines el contenedor (cosa que harás más veces de las que crees).
  3. Volumen anónimo para dependencias: con Node.js es habitual añadir /app/node_modules. ¿Por qué? Para que el volumen local no sobrescriba las dependencias ya instaladas en la imagen.

Las variables de entorno se gestionan mejor con un fichero .env en la raíz del proyecto. Docker Compose lo lee automáticamente:

  • DATABASE_HOST=db
  • DATABASE_USER=desarrollo
  • DATABASE_PASSWORD=secreto_local
  • APP_ENV=local

Luego, en el servicio, referencia la sección env_file: .env o usa la sintaxis ${DATABASE_USER} directamente. Y una advertencia que viene de ver repos rotos: incluye el .env en tu .gitignore antes de subir credenciales por descuido. Crea también un .env.example documentado que sirva de plantilla al resto del equipo. Son cinco minutos que te ahorran un disgusto.

Buenas prácticas: acelerar tus contenedores y depurar errores comunes

Cuando llevas semanas trabajando en desarrollo local con Docker, empiezas a ver los mismos errores una y otra vez. La buena noticia: casi todos tienen solución rápida.

Errores frecuentes y su solución

  • «Port already in use»: otro servicio ocupa el puerto. Cámbialo en el mapeo (por ejemplo, 8081:80) o localiza al culpable con lsof -i :8080.
  • Contenedor que arranca y se detiene: revisa los logs con docker compose logs -f nombre_servicio. Casi siempre es un fallo de configuración o de variables de entorno. Los logs no mienten.
  • Permisos de archivos en Linux: si el contenedor no puede escribir en los volúmenes, especifica user: «1000:1000» en el servicio para que coincida con tu usuario local.
  • Imágenes desactualizadas: tras cambiar un Dockerfile, ejecuta docker compose up -d –build. Reiniciar no basta. Lo he visto más de una vez: la gente reinicia, no ve cambios, y se frustra.

Consejos para acelerar tu flujo de trabajo

  • Limpia periódicamente recursos huérfanos con docker system prune. Ojo con la opción –volumes: elimina también volúmenes sin usar, y quizá alguno que sí querías.
  • Usa docker compose exec web bash para entrar dentro del contenedor y depurar desde dentro. A veces es la única forma de entender qué pasa.
  • Añade depends_on con condition: service_healthy y healthchecks para que la base de datos esté lista antes de que arranque tu aplicación. Te evita esos fallos raros del primer arranque.
  • En macOS y Windows, limita el número de volúmenes montados con archivos muy numerosos (como node_modules). El sistema de ficheros lo nota, y mucho.
  • Diferencia configuraciones con ficheros de override: docker-compose.override.yml se fusiona automáticamente con el base y es ideal para ajustes exclusivos de local.

Con estos hábitos, tu entorno será rápido, predecible y fácil de mantener a largo plazo. Nada más, nada menos.

Conclusión: lleva tus proyectos al siguiente nivel con Docker

Dominar el desarrollo local con Docker cambia tu forma de trabajar de raíz: entornos reproducibles en minutos, cero sorpresas de «en mi máquina funciona» y un despliegue a producción mucho más fiable, porque desarrollas sobre la misma base tecnológica que usarás en el servidor final. La inversión inicial en aprender Dockerfile y Docker Compose se recupera enseguida, en cada proyecto nuevo.

Eso sí, para que tu aplicación brille en producción necesitas un hosting que esté a la altura. En RedServicio.net encontrarás planes de hosting web optimizados, soporte técnico 24/7 y la infraestructura necesaria para que el paso de tu entorno local a internet sea fluido y sin fricciones.

Si aún no lo has hecho, descarga Docker, replica el entorno de este artículo con tu propio stack y empieza a experimentar. El primer contenedor que levantes será el comienzo de una forma mucho más profesional de desarrollar.

📝

Equipo RedServicio

Artículos escritos y revisados por nuestro equipo técnico especializado en hosting e infraestructura web en España.

¿Listo para un hosting de verdad?

Servidores en España · Soporte 24/7 en español · Migración gratuita

Ver Planes desde 3,95€/mes →

Te puede interesar:

Clisec — Seguridad informática

Página Gratis — Crea tu web gratis

Scroll al inicio