¿Qué es Docker?
Docker es una plataforma de software que te permite crear, probar y desplegar aplicaciones rápidamente. Lo hace empaquetando el software en unidades estandarizadas llamadas contenedores.
El problema eterno en la programación solía ser: "En mi máquina sí funciona". Un proyecto corría perfecto en la laptop del desarrollador (Windows), pero cuando se subía al servidor de producción (Linux), o la versión de Node.js era distinta a la esperada, o faltaba una variable de entorno, y la aplicación colapsaba.
Docker solucionó esto.
Contenedores vs Máquinas Virtuales (VMs)
Para entender la genialidad de Docker, debemos compararlo con la tecnología anterior: Las Máquinas Virtuales (como VirtualBox o VMWare).
La era de las Máquinas Virtuales
Antes, si querías aislar tres aplicaciones diferentes en un solo servidor físico, creabas tres Máquinas Virtuales. Cada VM requiere su propio Sistema Operativo Huésped completo (Guest OS) (ej. un Windows entero de 20GB o un Ubuntu de 2GB). Esto consumía muchísima memoria RAM, demasiado disco duro, y tardaban minutos en encender.
La era de los Contenedores
Los contenedores cambian las reglas del juego. No incluyen un sistema operativo completo. En su lugar, todos los contenedores "comparten" el núcleo (Kernel) del sistema operativo de la computadora que los ejecuta.
Ventajas de los Contenedores Docker:
- Ultra ligeros: Pesan Megabytes en lugar de Gigabytes.
- Rápidos: Encienden en milisegundos en lugar de minutos (porque no tienen que iniciar un sistema operativo, solo un proceso).
- Portabilidad absoluta: Si un contenedor corre en tu laptop, se garantiza al 100% que correrá exactamente igual en los servidores de AWS, Google Cloud o el de tu compañero.
El Ecosistema Docker: Core Concepts
Para hablar "Docker", debes conocer estas tres palabras:
- Dockerfile: Es el "código fuente" o la receta. Es un simple archivo de texto con instrucciones escalonadas sobre cómo construir el entorno (ej: "Instala Ubuntu, luego instala Python 3, luego copia mis archivos, y finalmente ejecuta mi web").
- Imagen (Image): Es el resultado de "cocinar" el Dockerfile. Es un paquete estático, de solo lectura, con tu aplicación y sus dependencias adentro. Piensa en la imagen como un CD de instalación o un molde.
- Contenedor (Container): Es una instancia "viva" de una Imagen. Si la imagen es el CD, el contenedor es el juego ejecutándose en la memoria RAM y procesador. Puedes ejecutar 50 contenedores idénticos a partir de 1 sola Imagen.