Instala Docker sin miedo: Guía completa desde cero (2025)
Tiempo de lectura estimado: 12 minutos
Si alguna vez has intentado instalar una aplicación en un servidor y has acabado en un infierno de dependencias, versiones incompatibles y el clásico «en mi máquina funciona», Docker es la solución que estabas buscando.
Esta guía te llevará desde cero conocimiento hasta tener Docker funcionando en tu sistema, entendiendo qué es, por qué importa, y cómo usarlo. Y sí, la instalación es literalmente copiar y pegar tres comandos.
💡 ¿Para quién es esta guía?
Para cualquiera que quiera automatizar servicios, montar laboratorios de pruebas, o simplemente entender qué demonios es eso de «contenedores» que todos mencionan. No necesitas experiencia previa.
📋 Índice de contenidos
- ¿Qué es Docker realmente?
- ¿Por qué deberías usar Docker?
- Conceptos esenciales antes de empezar
- Instalación en 3 comandos
- Verificación y primer contenedor
- Troubleshooting: errores comunes
- Mejores prácticas y seguridad
- Casos de uso reales
- Próximos pasos
1. ¿Qué es Docker realmente?
Imagina que tienes que mudarte de ciudad con todas tus cosas. Puedes hacerlo de dos formas:
- Opción A (la tradicional): Meter todo suelto en el camión. Cada cosa por separado. En el nuevo sitio, tienes que recordar dónde va cada objeto, reorganizarlo todo, y esperar que no se haya roto nada.
- Opción B (Docker): Meter todo en contenedores estándar. Cada contenedor está etiquetado, es autónomo, y puedes moverlo a cualquier sitio sin preocuparte de qué hay dentro.
Docker hace exactamente eso, pero con aplicaciones.
En términos técnicos
Docker es una plataforma que empaqueta una aplicación y todas sus dependencias (librerías, archivos de configuración, etc.) en un contenedor. Este contenedor se puede ejecutar en cualquier sistema que tenga Docker instalado, sin importar el sistema operativo subyacente.
Docker vs Máquinas Virtuales
Mucha gente confunde Docker con virtualización. Aquí la diferencia clave:
Característica | Máquina Virtual (VM) | Contenedor Docker |
---|---|---|
Tamaño | GBs (incluye SO completo) | MBs (solo la app y dependencias) |
Velocidad de inicio | Minutos | Segundos (a veces milisegundos) |
Aislamiento | Total (hardware virtualizado) | A nivel de proceso (comparte kernel) |
Rendimiento | Menor (capa de virtualización) | Casi nativo |
Uso de recursos | Alto | Bajo |
En resumen: Las VMs emulan hardware completo. Docker comparte el kernel del sistema host, pero aísla los procesos. Es más ligero, más rápido, y perfecto para microservicios.
2. ¿Por qué deberías usar Docker?
🔄 Portabilidad total
Ese clásico problema de «funciona en mi máquina pero no en producción» desaparece. Si funciona en tu contenedor Docker, funcionará en cualquier sitio donde corras ese contenedor.
⚡ Entornos de desarrollo idénticos
Todo el equipo trabaja con exactamente las mismas versiones de todo. Nada de «yo tengo Python 3.9 y tú 3.11, por eso no te funciona».
🚀 Despliegues instantáneos
Pasar de desarrollo a producción es literalmente hacer docker push
y docker pull
. Sin configurar servidores manualmente.
🧪 Laboratorios temporales
¿Quieres probar PostgreSQL 15 sin instalarlo en tu sistema? docker run postgres:15
. ¿Ya no lo necesitas? docker rm
. Tu sistema queda limpio.
💾 Eficiencia de recursos
Puedes correr docenas de contenedores en un servidor que apenas soportaría 3-4 VMs.
🔧 Casos de uso reales
- Desarrolladores: Entornos de desarrollo consistentes
- DevOps: CI/CD pipelines y orquestación de servicios
- Sysadmins: Laboratorios de pruebas y servicios aislados
- Homelabs: Servicios autohospedados (n8n, SwarmUI, servidores de media, etc.)
3. Conceptos esenciales antes de empezar
Antes de instalar, entiende estos 4 conceptos clave:
🖼️ Imagen (Image)
Qué es: Una plantilla de solo lectura que contiene todo lo necesario para ejecutar una aplicación.
Analogía: Es como una receta de cocina. Define qué ingredientes necesitas y cómo prepararlos.
Ejemplo: nginx:latest
, postgres:15
, python:3.11
📦 Contenedor (Container)
Qué es: Una instancia en ejecución de una imagen.
Analogía: Si la imagen es la receta, el contenedor es el plato que cocinaste siguiendo esa receta.
Importante: Puedes tener múltiples contenedores de la misma imagen corriendo simultáneamente.
🏗️ Dockerfile
Qué es: Un archivo de texto con instrucciones para construir una imagen personalizada.
Ejemplo simple:
FROM python:3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Esto crea una imagen con Python 3.11, instala dependencias, y ejecuta tu app.
🔗 Docker Compose
Qué es: Una herramienta para definir y ejecutar aplicaciones multi-contenedor.
Caso de uso: Tu app necesita una base de datos, un servidor web, y Redis. Con Compose defines los 3 servicios en un archivo YAML y los levantas todos con docker compose up
.
Ejemplo de docker-compose.yml
:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secretpassword
4. Instalación en 3 comandos
Llegó el momento. Vamos a instalar Docker y Docker Compose en Linux (Ubuntu/Debian/similares) de la forma más sencilla posible.
🎯 Requisitos previos
- Un sistema Linux (Ubuntu 20.04+, Debian 11+, u otra distro compatible)
- Acceso sudo/root
- Conexión a internet
⚠️ Nota sobre Windows/Mac: Docker Desktop existe para estos sistemas, pero la instalación es diferente. Esta guía se enfoca en servidores Linux.
📥 Paso 1: Descargar el script de instalación
He preparado un script que instala Docker y Docker Compose automáticamente, configurando todo correctamente.
curl -O https://raw.githubusercontent.com/ziruelen/learningaiagents/main/install_docker_with_compose.sh
¿Qué hace curl -O
? Descarga el archivo del script desde GitHub y lo guarda en tu directorio actual.
🔓 Paso 2: Dar permisos de ejecución
chmod +x install_docker_with_compose.sh
¿Qué hace chmod +x
? Convierte el archivo descargado en ejecutable. Es como decirle al sistema «este archivo puede ejecutarse como un programa».
▶️ Paso 3: Ejecutar el script
sudo ./install_docker_with_compose.sh
¿Qué hace este script?
- Actualiza el índice de paquetes de tu sistema
- Instala dependencias necesarias (ca-certificates, curl, gnupg)
- Añade el repositorio oficial de Docker
- Instala Docker Engine y Docker Compose
- Configura el servicio para que arranque automáticamente
- Añade tu usuario al grupo
docker
(para no necesitar sudo siempre)
El proceso tarda 2-5 minutos dependiendo de tu conexión.
🔄 Paso 4 (importante): Aplicar cambios de grupo
Para que los cambios de permisos surtan efecto sin reiniciar:
newgrp docker
O simplemente cierra y vuelve a abrir tu sesión de terminal.
5. Verificación y primer contenedor
✅ Verificar que Docker se instaló correctamente
docker --version
Deberías ver algo como: Docker version 24.0.7, build afdd53b
✅ Verificar Docker Compose
docker compose version
Deberías ver: Docker Compose version v2.23.0
(o superior)
🐳 Ejecutar tu primer contenedor
El momento de la verdad. Vamos a ejecutar el contenedor «Hello World» de Docker:
docker run hello-world
¿Qué pasa cuando ejecutas esto?
- Docker busca la imagen
hello-world
localmente - Como no la encuentra, la descarga de Docker Hub (el repositorio oficial)
- Crea un contenedor a partir de esa imagen
- Ejecuta el contenedor, que imprime un mensaje de bienvenida
- El contenedor se detiene automáticamente (porque su único trabajo era imprimir el mensaje)
Si ves el mensaje de bienvenida con el logo de Docker, ¡todo funciona perfectamente! 🎉
🎯 Primer contenedor útil: Un servidor web en 5 segundos
Vamos a levantar un servidor web Nginx real:
docker run -d -p 8080:80 --name mi-nginx nginx:latest
Explicación de cada parámetro:
-d
: Ejecuta en segundo plano (detached mode)-p 8080:80
: Mapea el puerto 80 del contenedor al puerto 8080 de tu máquina--name mi-nginx
: Asigna un nombre al contenedor (en lugar de uno aleatorio)nginx:latest
: La imagen a usar
Ahora abre tu navegador y ve a http://localhost:8080
¿Ves la página de bienvenida de Nginx? ¡Acabas de desplegar un servidor web en 5 segundos!
🧹 Limpiar después de la prueba
docker stop mi-nginx
docker rm mi-nginx
Esto detiene y elimina el contenedor. Tu sistema queda limpio como si nunca lo hubieras instalado.
6. Troubleshooting: errores comunes
❌ Error: «permission denied» al ejecutar docker
Causa: Tu usuario no está en el grupo docker
.
Solución:
sudo usermod -aG docker $USER
newgrp docker
O reinicia tu sesión.
❌ Error: «Cannot connect to the Docker daemon»
Causa: El servicio de Docker no está corriendo.
Solución:
sudo systemctl start docker
sudo systemctl enable docker # Para que arranque automáticamente
❌ Error: «Port already in use»
Causa: Otro servicio ya está usando ese puerto.
Solución: Usa otro puerto en el mapeo, por ejemplo -p 8081:80
en lugar de -p 8080:80
.
❌ Error: «No space left on device»
Causa: Docker acumula imágenes y contenedores viejos.
Solución: Limpia recursos no usados:
# Ver espacio usado
docker system df
# Limpiar todo lo que no se esté usando
docker system prune -a
❌ Docker funciona con sudo pero no sin él
Causa: Permisos del grupo docker no aplicados.
Solución definitiva:
sudo groupadd docker # Por si acaso no existe
sudo usermod -aG docker $USER
newgrp docker
# O cierra sesión y vuelve a entrar
7. Mejores prácticas y seguridad
🔐 Seguridad básica
No ejecutes contenedores como root innecesariamente
Muchas imágenes oficiales ya corren con usuarios no-root. Verifica siempre los Dockerfiles.
Usa imágenes oficiales o de fuentes confiables
Las imágenes de Docker Hub marcadas como «Official» o «Verified» son más seguras. Evita imágenes de usuarios desconocidos.
Mantén tus imágenes actualizadas
docker pull nginx:latest # Actualiza a la última versión
Limita recursos de contenedores
docker run -d --memory="512m" --cpus="1.0" nginx
Esto evita que un contenedor consuma todos los recursos del sistema.
💾 Gestión de datos: Volúmenes
Problema: Los datos dentro de un contenedor se pierden cuando lo eliminas.
Solución: Usa volúmenes para persistir datos:
docker run -d -v mi-volumen:/data postgres:15
Los datos en /data
dentro del contenedor se guardan en el volumen mi-volumen
, que sobrevive aunque elimines el contenedor.
🧹 Limpieza regular
Docker puede acumular GBs de imágenes y contenedores no usados. Limpia periódicamente:
# Ver qué está ocupando espacio
docker system df
# Eliminar contenedores detenidos
docker container prune
# Eliminar imágenes sin usar
docker image prune
# Limpieza completa (cuidado: elimina todo lo no usado)
docker system prune -a --volumes
📝 Usa Docker Compose para proyectos multi-contenedor
En lugar de comandos largos, define tu stack en un archivo YAML:
version: '3.8'
services:
app:
image: mi-app:latest
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:15
volumes:
- db-data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: secreto
volumes:
db-data:
Luego solo haces docker compose up -d
y todo arranca.
8. Casos de uso reales
🤖 Automatización con n8n
n8n es una plataforma de automatización que funciona perfecto en Docker:
docker run -d --name n8n \
-p 5678:5678 \
-v ~/.n8n:/home/node/.n8n \
n8nio/n8n
Accede a http://localhost:5678
y ya tienes n8n corriendo.
👉 Más detalles en nuestra Guía Completa de n8n v2
🎨 Generación de imágenes con Stable Diffusion
Puedes correr Stable Diffusion localmente con Docker (si tienes GPU):
docker run -d --gpus all -p 7801:7801 swarmui/swarmui
👉 Ver Cómo instalar SwarmUI
💾 Bases de datos de desarrollo
Necesitas probar con PostgreSQL sin instalarlo en tu sistema:
docker run -d --name postgres-dev \
-e POSTGRES_PASSWORD=dev123 \
-p 5432:5432 \
postgres:15
Cuando termines: docker stop postgres-dev && docker rm postgres-dev
🌐 Servidor web estático
Sirve un sitio estático en segundos:
docker run -d -p 80:80 \
-v /ruta/a/tu/sitio:/usr/share/nginx/html:ro \
nginx:alpine
🔧 Stack de desarrollo completo
Con Docker Compose puedes tener un entorno completo (frontend + backend + DB + Redis) en un solo comando:
version: '3.8'
services:
frontend:
image: node:18-alpine
working_dir: /app
volumes:
- ./frontend:/app
command: npm run dev
ports:
- "3000:3000"
backend:
image: python:3.11-slim
working_dir: /app
volumes:
- ./backend:/app
command: python app.py
ports:
- "5000:5000"
depends_on:
- db
- redis
db:
image: postgres:15
environment:
POSTGRES_DB: myapp
POSTGRES_PASSWORD: dev123
volumes:
- db-data:/var/lib/postgresql/data
redis:
image: redis:alpine
volumes:
db-data:
Guarda esto como docker-compose.yml
y ejecuta docker compose up
. Todo tu stack arranca.
9. Próximos pasos
Ya tienes Docker funcionando. ¿Y ahora qué?
📚 Aprende más sobre Docker
- Documentación oficial: docs.docker.com
- Docker Hub: hub.docker.com – Repositorio de imágenes
- Play with Docker: labs.play-with-docker.com – Laboratorio online gratuito
🚀 Proyectos para practicar
- Monta tu propio n8n para automatizaciones – Guía completa aquí
- Crea un laboratorio de homelab – Servicios autohospedados (Nextcloud, Jellyfin, etc.)
- Aprende Docker Compose – Esencial para proyectos multi-contenedor
- Dockeriza tu propia aplicación – Crea un Dockerfile desde cero
- Explora orquestación con Kubernetes – El siguiente nivel después de Docker
🔗 Artículos relacionados en El Diario IA
- Guía Completa de n8n v2 – Automatiza workflows con Docker
- Instalar SwarmUI con Docker – Genera imágenes con IA
- Automatización web con Browserless – Todo corre en contenedores
💡 Comandos esenciales para el día a día
# Ver contenedores en ejecución
docker ps
# Ver todos los contenedores (incluso detenidos)
docker ps -a
# Ver imágenes descargadas
docker images
# Ver logs de un contenedor
docker logs nombre-contenedor
# Ejecutar comando dentro de un contenedor
docker exec -it nombre-contenedor bash
# Detener todos los contenedores
docker stop $(docker ps -q)
# Ver uso de recursos
docker stats
# Inspeccionar un contenedor
docker inspect nombre-contenedor
🎯 Conclusión
Docker ha democratizado el despliegue de aplicaciones. Lo que antes requería días de configuración ahora son 3 comandos y unos minutos.
Recapitulando lo que has aprendido:
- ✅ Qué es Docker y en qué se diferencia de VMs
- ✅ Por qué Docker es esencial en desarrollo moderno
- ✅ Conceptos clave: imágenes, contenedores, volúmenes, Compose
- ✅ Instalación completa de Docker y Docker Compose
- ✅ Verificación y ejecución de tu primer contenedor
- ✅ Troubleshooting de errores comunes
- ✅ Mejores prácticas de seguridad
- ✅ Casos de uso reales y prácticos
Ahora tienes las herramientas. El siguiente paso es usarlas.
Si tienes dudas o quieres compartir qué has montado con Docker, déjanos un comentario. En El Diario IA seguimos publicando guías sobre automatización, IA, y tecnología en general.
¡Feliz containerización! 🐳
❓ Preguntas Frecuentes (FAQ)
¿Qué diferencia hay entre Docker y una máquina virtual?
Las VMs virtualizan hardware completo (incluido el sistema operativo), ocupando GBs y tardando minutos en arrancar. Docker comparte el kernel del host y solo empaqueta la aplicación + dependencias, ocupando MBs y arrancando en segundos. Docker es mucho más ligero y eficiente para aplicaciones.
¿Puedo instalar Docker en Windows o Mac?
Sí, con Docker Desktop. Funciona usando WSL2 (Windows Subsystem for Linux) en Windows o una VM ligera en Mac. Esta guía se enfoca en Linux (servidores), pero Docker Desktop es fácil de instalar siguiendo su documentación oficial en docs.docker.com.
¿Por qué necesito añadir mi usuario al grupo docker?
Por defecto, Docker requiere permisos root (sudo). Añadir tu usuario al grupo docker te permite ejecutar comandos sin sudo cada vez. Es más cómodo para desarrollo, pero ojo: cualquier usuario en el grupo docker tiene acceso root equivalente, así que solo hazlo en tu máquina personal o de desarrollo.
¿Cuánto espacio en disco ocupa Docker?
Docker puede crecer mucho si no lo limpias. Cada imagen ocupa entre 50MB y 2GB según la aplicación. Con el tiempo acumulas imágenes viejas, contenedores detenidos y volúmenes no usados. Usa docker system df
para ver el uso y docker system prune
regularmente para limpiar.
¿Qué es Docker Compose y para qué sirve?
Docker Compose define aplicaciones multi-contenedor en un archivo YAML. En lugar de ejecutar 5 comandos docker run largos para levantar tu app + base de datos + redis + nginx, defines todo en docker-compose.yml y lo levantas con un solo docker compose up
. Es esencial para proyectos reales.
¿Los contenedores Docker pierden datos cuando los elimino?
Sí, por defecto todo lo que está dentro del contenedor se pierde al eliminarlo. Por eso usas volúmenes (-v mi-volumen:/data
) para persistir datos importantes como bases de datos, archivos de configuración o uploads. Los volúmenes sobreviven aunque elimines el contenedor.
¿Docker es seguro para usar en producción?
Sí, si sigues buenas prácticas: usa imágenes oficiales o verificadas, no corras contenedores como root, limita recursos (CPU/RAM), mantén imágenes actualizadas y usa redes aisladas. Docker es estándar en producción (Netflix, Spotify, PayPal lo usan), pero la seguridad depende de cómo lo configures.
¿Qué hago si docker run falla con «Cannot connect to Docker daemon»?
Significa que el servicio Docker no está corriendo. Solución: sudo systemctl start docker
para iniciarlo. Si quieres que arranque automáticamente al reiniciar: sudo systemctl enable docker
. Verifica que funciona con docker --version
.
Última actualización: Octubre 2025