- Santiago's Newsletter
- Posts
- ¿Qué es Docker y cómo funciona?
¿Qué es Docker y cómo funciona?
Docker es una plataforma de código abierto diseñada para automatizar la implementación, ejecución y gestión de aplicaciones dentro de contenedores.
Un contenedor es una instancia ligera y portátil que incluye todo lo necesario para ejecutar una aplicación: su código, dependencias, bibliotecas y configuraciones.
A diferencia de las máquinas virtuales, los contenedores no incluyen un sistema operativo completo, lo que los hace más eficientes en términos de recursos y más fáciles de trasladar entre diferentes entornos.
Funcionamiento de Docker
Tal y como se muestra en la imagen proporcionada, Docker sigue un flujo de trabajo específico, que se puede desglosar de la siguiente manera:
Docker Client: El usuario interactúa con Docker a través del cliente de Docker, donde ejecuta comandos como
docker build
,docker push
,docker pull
ydocker run
.Estos comandos son enviados al demonio (servicio) de Docker, que gestiona todas las operaciones en segundo plano.
docker build: Construye una imagen a partir de un archivo llamado
Dockerfile
.docker push: Envía una imagen creada al Docker Registry, que puede ser el registro público de Docker Hub o un registro privado.
docker pull: Descarga una imagen desde el Docker Registry a tu máquina local.
docker run: Lanza un contenedor basado en una imagen descargada.
Docker Host y Daemon: El Docker Host es donde Docker está instalado, y contiene el Docker Daemon, que se encarga de la gestión de contenedores.
El daemon es quien realiza todas las acciones relacionadas con los contenedores, como la creación, ejecución y eliminación de estos, así como la gestión de imágenes.
Imágenes: Una imagen es una plantilla que contiene todo lo necesario para que una aplicación funcione: el código de la aplicación, las bibliotecas y dependencias, y las configuraciones necesarias.
Las imágenes no hacen nada por sí solas, son solo una base estática que describe cómo debe ser el entorno donde se ejecutará una aplicación.
Ejemplo práctico: Imagina que tienes una receta para hacer una pizza. La receta (imagen) te dice qué ingredientes necesitas y cómo prepararlos, pero no es la pizza en sí, es solo la guía.
Esto se traslada al ámbito de la informática de manera muy similar. Por ejemplo, una imagen de MySQL contiene todo lo necesario para que funcione una base de datos MySQL: la configuración del servidor, las bibliotecas necesarias y el propio MySQL.
En Docker, puedes encontrar imágenes listas para usar en registros públicos como Docker Hub (ej. imágenes de NGINX, MongoDB, etc.), o puedes crear tus propias imágenes personalizadas utilizando un archivo de configuración llamado
Dockerfile
.Contenedores: Un contenedor es una instancia en ejecución de una imagen. Es decir, cuando Docker ejecuta una imagen, crea un contenedor, que es una "copia viva" de la imagen.
El contenedor es donde realmente "vive" y se ejecuta tu aplicación.
Ejemplo práctico: Siguiendo con el ejemplo de la pizza, el contenedor sería la pizza lista, cocinada y servida. Puedes hacer varias pizzas (contenedores) con la misma receta (imagen), y cada una puede tener pequeños cambios (por ejemplo, una con más queso, otra con menos salsa). Sin embargo, la receta original (imagen) permanece igual.
Trasladado al ámbito de la informática, cuando ejecutas una imagen de MySQL con Docker, se crea un contenedor que lanza la base de datos MySQL en tu sistema, permitiéndote conectarte a ella y almacenar datos.
Si necesitas varias bases de datos, puedes crear múltiples contenedores a partir de la misma imagen de MySQL. Cada contenedor sería una base de datos independiente, pero todas se basan en la misma imagen.
Docker Registry: Es un almacén donde se alojan las imágenes. Docker Hub es el registro más común y es público, aunque también es posible tener registros privados.
Diferencias entre Docker y las máquinas virtuales
Arquitectura:
Docker utiliza contenedores que comparten el mismo kernel del sistema operativo host, por lo que no necesitan incluir un sistema operativo completo en cada instancia.
Las máquinas virtuales (VMs), por otro lado, virtualizan el hardware completo, lo que requiere ejecutar un sistema operativo completo en cada VM, además del sistema operativo host.
Uso de recursos:
Docker es más eficiente porque utiliza menos recursos ya que no emula hardware ni requiere múltiples sistemas operativos.
Las VMs suelen consumir más recursos porque cada una debe ejecutar un sistema operativo completo, además del hipervisor que gestiona las VMs.
Velocidad de inicio:
Los contenedores en Docker pueden iniciarse en cuestión de segundos, ya que solo requieren cargar la aplicación y sus dependencias.
Las VMs pueden tardar varios minutos en iniciar, ya que requieren cargar todo el sistema operativo.
Portabilidad:
Docker es muy portátil; los contenedores pueden ejecutarse de la misma manera en diferentes entornos (desarrollo, pruebas, producción) sin importar el sistema operativo subyacente.
Las VMs también son portátiles, pero requieren más espacio y son menos fáciles de mover entre entornos debido a la mayor cantidad de recursos que utilizan.
¿Dónde se utiliza Docker?
Docker ha revolucionado la manera en que se desarrollan, despliegan y gestionan las aplicaciones al ofrecer contenedores ligeros y portátiles.
Gracias a su eficiencia en el uso de recursos y a su capacidad para integrarse con herramientas de desarrollo y operaciones, Docker se ha convertido en una solución ideal para entornos de desarrollo modernos.
Docker también ha ganado terreno en campos como la ciberseguridad, donde los contenedores permiten aislar entornos, probar vulnerabilidades y simular ataques de manera controlada, todo sin comprometer el sistema principal.
Incluso en el campo de la inteligencia artificial y el machine learning, Docker facilita la creación de entornos reproducibles para entrenar modelos, ya que permite empaquetar las herramientas y dependencias específicas necesarias para ejecutar procesos de aprendizaje automático sin problemas de compatibilidad.
Si estás interesado en aprender más sobre Ciberseguridad Defensiva y/o Hacking Ético, échale un ojo a mis cursos: https://engineer.education/
