0.1Para qué sirve Docker: contenedores frente a máquinas virtuales
Lo esencial en 30 segundos
- Docker empaqueta la aplicación Y su entorno en un paquete estándar, el contenedor: se acabó el «en mi máquina funciona».
- El contenedor comparte el núcleo del anfitrión y solo aísla lo necesario: arranque en segundos, peso en megabytes — no es una VM.
- Ejecutamos imágenes versionadas, idénticas en todas partes; a gran escala añadimos un orquestador (Swarm, Kubernetes).
Minicaso hilado — Idir está harto del «en mi máquina funciona» en Argel
Idir, devops junior en Argel, entrega un sitio que funciona en su portátil pero falla en el servidor de pruebas: versión de Node diferente, Redis ausente, variable olvidada. Aplica la parrilla de la sección: el problema viene del entorno, no del código → empaqueta la aplicación Y su entorno en imágenes versionadas (sitio + caché Redis), lanzadas como contenedores. La misma imagen en su portátil, el servidor de pruebas y producción: el mismo comportamiento en todas partes. También anota el límite: para dos contenedores, Docker basta; para decenas de servicios críticos, hará falta un orquestador.
Caso autónomo de esta sección: reaparece en el curso, el esquema, el guion y el reto 48h de la sección 0.1.
1. El problema: «en mi máquina funciona»
Una aplicación depende de su versión de lenguaje, sus bibliotecas, su sistema y su configuración. En el equipo del desarrollador todo funciona, en producción todo falla. Docker responde a este azote embarcando la aplicación Y su entorno en un paquete estándar: el contenedor. Idir retiene la imagen: el código viaja con su maleta, no solo.
2. Contenedor frente a máquina virtual: la verdadera diferencia
Una máquina virtual virtualiza un ordenador entero (sistema invitado + núcleo + recursos reservados): es pesada y lenta de arrancar. Un contenedor comparte el núcleo del anfitrión y solo aísla lo necesario (procesos, archivos, red): arranca en segundos, pesa megabytes y se multiplica fácilmente. Es la herramienta del microservicio, no el sustituto universal del servidor. Idir decide: mismo núcleo y necesidad ligera → contenedor; núcleo diferente o aislamiento fuerte → VM.
3. Dónde se detiene Docker
Docker empaqueta y ejecuta, no orquesta a gran escala (ese es el papel de Swarm o Kubernetes), no supervisa ni sustituye la copia de seguridad ni la seguridad del sistema. Para un equipo, un servidor pequeño o una tubería CI, Docker basta; para decenas de servicios críticos, se pasa a un orquestador. Idir delimita su perímetro: Docker para empaquetar y ejecutar, el orquestador más tarde.
¿Lo sabías? La cantina que viaja
Misma cantina en todas partes, mismo sabor en todas partes.
🔎 Ejemplo concreto — 🔎 Ejemplo concreto — Un sitio que funciona igual en todas partes
Idir entrega un sitio Node 20 con Redis: dos contenedores desde dos imágenes versionadas, sin instalar Node ni Redis en la máquina.
docker run -d -p 3000:3000 --name site mon-app:1.0
docker run -d --name cache redis:7
Lectura: dos contenedores arrancados desde dos imágenes versionadas, sin instalar Node ni Redis en la máquina.
Lección: el portátil, el servidor de pruebas y producción ejecutan exactamente las mismas imágenes.
Vocabulario de la sección
- Contenedor
- Un proceso aislado + su sistema de archivos, arrancado desde una imagen.
Ejemplo sencillo: Idir lanza el contenedor site desde la imagen mon-app:1.0.
Lo que no es: una máquina virtual completa con su núcleo.
Reflejo: ligero, rápido, un rol por contenedor.
- Imagen
- El modelo inmutable y versionado del que nacen los contenedores.
Ejemplo sencillo: Idir fija mon-app:1.0: mismas dependencias en todas las máquinas.
Lo que no es: un contenedor vivo que se modifica.
Reflejo: siempre una etiqueta de versión explícita, nunca latest en producción.
- Docker Engine
- El motor que construye, almacena y ejecuta imágenes y contenedores.
Ejemplo sencillo: Idir verifica que el motor está en marcha antes de lanzar su sitio.
Lo que no es: el simple comando docker tecleado.
Reflejo: motor detenido = ningún contenedor arranca.
- Registro
- El depósito de imágenes versionadas (Docker Hub, GHCR).
Ejemplo sencillo: Idir obtiene redis:7 desde el registro en lugar de instalarlo.
Lo que no es: el disco local de la máquina.
Reflejo: nombrar la imagen con su etiqueta antes de compartirla.
- Mapeo de puertos
- La redirección -p 3000:3000 entre la máquina y el contenedor.
Ejemplo sencillo: Idir alcanza su sitio en el puerto 3000 gracias al mapeo 3000:3000.
Lo que no es: el puerto interno solo, sin exposición.
Reflejo: ¿inalcanzable? verificar el -p primero.
En la práctica — En la práctica — Situar Docker en tu contexto
- Enumera tres programas que instalas con dificultad (versiones, conflictos, docs), como Idir con Node y Redis.
- Para cada uno, di si un contenedor versionado resolvería el problema.
- Detecta un caso donde una VM seguiría siendo preferible (núcleo diferente, aislamiento fuerte).
- Formula en una frase lo que Docker te va a aportar.
Guion paso a paso — delimitar el caso de Idir antes de instalar (3 min)
1) Escribe el dúo de Idir: aplicación + entorno (p. ej. sitio Node 20 + Redis) que diverge entre portátil y servidor. 2) Divide en roles: un contenedor site, un contenedor cache — nunca todo en uno solo. 3) Anota la imagen versionada objetivo por rol (p. ej. mon-app:1.0, redis:7): misma imagen en todas las máquinas. 4) Marca el límite: 2 contenedores → Docker basta; núcleo diferente o aislamiento fuerte → VM; decenas de servicios → orquestador más tarde.
Guarda esta ficha: las secciones 0.2 a 0.4 la transforman en comandos reales.
Modelo copiar-pegar — ¿mi ficha Docker o VM?
Cas : ___ (ex. site Node 20 + Redis d'Idir).
Rôles : [ ] site / [ ] base / [ ] cache → 1 conteneur par rôle.
Images versionnées : ___:___ + ___:___ (jamais latest en production).
Tranchant : [ ] même noyau + léger → conteneur / [ ] noyau différent ou isolement fort → VM.
Échelle : [ ] poste / petit serveur / CI → Docker suffit / [ ] dizaines de services → orchestrateur.
Sitio + caché
Idir entrega su sitio Node 20 con Redis: dos contenedores versionados, cero instalación local de Node o Redis.
Núcleo diferente
Idir debe probar un sistema con un núcleo diferente: conserva una VM, pues el contenedor comparte el núcleo del anfitrión.
Servidor pequeño
Dos o tres servicios en un servidor pequeño: Idir se queda con Docker, sin orquestador.
Tubería CI
Cada compilación reproduce las mismas imágenes versionadas: Idir elimina el «en mi máquina funciona» de la CI.
✓ Buenas prácticas
- Piensa en imagen versionada: nunca «latest» en producción.
- Apunta a un contenedor = un rol (web, base, caché).
- Conoce el límite: la orquestación es el paso siguiente.
✗ Errores frecuentes
- Creer que Docker = una VM ligera (el núcleo se comparte).
- Meter base + app + caché en el mismo contenedor.
- Esperar de Docker la supervisión y la copia de seguridad.
Puntos clave
- Docker empaqueta la app Y su entorno.
- El contenedor comparte el núcleo: ligero y rápido.
- Ejecutamos imágenes versionadas, idénticas en todas partes.
- A gran escala, añadimos un orquestador.
Reto 48h — aplica mañana
Rellena la ficha Docker o VM del modelo sobre UN caso real (el de Idir o el tuyo): roles, imágenes versionadas, decisión contenedor/VM — en una frase, di lo que Docker te va a aportar.
- Puedo explicar en una frase lo que aporta Docker (app + entorno, misma imagen en todas partes).
- Sé decidir contenedor (ligero, mismo núcleo) frente a VM (núcleo diferente, aislamiento fuerte).
- Conozco el límite: orquestación, supervisión y copia de seguridad están fuera de Docker.
Preguntas frecuentes
¿Docker sustituye a una máquina virtual?
No: la VM aísla un sistema completo con su núcleo, el contenedor comparte el del anfitrión. Para núcleos diferentes (Windows frente a Linux) o un aislamiento fuerte, la VM sigue siendo pertinente. Idir mantiene el reflejo: mismo núcleo y necesidad ligera → contenedor; si no → VM.
¿Hay que ser administrador de sistemas para usar Docker?
No: lo básico (run, ps, logs, volúmenes, Compose) se aprende en unas horas. La administración fina (redes, registros, seguridad) viene después, nivel por nivel — exactamente la progresión de esta guía.
¿Qué hace la verdadera fuerza de Docker frente a una instalación clásica?