Instala Docker sin miedo (¡sólo copia y pega!)

Robot punk instalando Docker en servidor Ubuntu con comandos de terminal 2025

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

  1. ¿Qué es Docker realmente?
  2. ¿Por qué deberías usar Docker?
  3. Conceptos esenciales antes de empezar
  4. Instalación en 3 comandos
  5. Verificación y primer contenedor
  6. Troubleshooting: errores comunes
  7. Mejores prácticas y seguridad
  8. Casos de uso reales
  9. 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?

  1. Actualiza el índice de paquetes de tu sistema
  2. Instala dependencias necesarias (ca-certificates, curl, gnupg)
  3. Añade el repositorio oficial de Docker
  4. Instala Docker Engine y Docker Compose
  5. Configura el servicio para que arranque automáticamente
  6. 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?

  1. Docker busca la imagen hello-world localmente
  2. Como no la encuentra, la descarga de Docker Hub (el repositorio oficial)
  3. Crea un contenedor a partir de esa imagen
  4. Ejecuta el contenedor, que imprime un mensaje de bienvenida
  5. 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

🚀 Proyectos para practicar

  1. Monta tu propio n8n para automatizacionesGuía completa aquí
  2. Crea un laboratorio de homelab – Servicios autohospedados (Nextcloud, Jellyfin, etc.)
  3. Aprende Docker Compose – Esencial para proyectos multi-contenedor
  4. Dockeriza tu propia aplicación – Crea un Dockerfile desde cero
  5. Explora orquestación con Kubernetes – El siguiente nivel después de Docker

🔗 Artículos relacionados en El Diario IA

💡 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

Por ziru

El Diario IA
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.