Ir al contenido

Conceptos 03 - Docker como plataforma

Docker estandariza el empaquetado, la distribución y la ejecución de aplicaciones mediante contenedores. Esta ficha presenta qué es Docker, qué no es, y cómo se organiza internamente su arquitectura.

  • 4 conceptos
  • 3 elementos interactivos
  • Autoevaluación final

Concepto 1 de 4

Qué es Docker

Plataforma open source que permite ejecutar una misma aplicación de forma consistente entre entornos de desarrollo, pruebas y producción.

  1. Función 1Empaquetado
  2. Función 2Distribución
  3. Función 3Ejecución

Docker estandariza la unidad de despliegue en software mediante el contenedor. Encapsula la aplicación con sus dependencias y configuración necesaria, mitigando el problema clásico de “en mi máquina funciona”.

Compara la misma aplicación desplegada en tres entornos, sin contenedor y con contenedor.

Desarrollo

  • Node.js 20.11
  • OpenSSL 3.0
  • Configuración local

✓ Funciona

Pruebas

  • Node.js 18.19
  • OpenSSL 3.0
  • Variables a mano

✗ Falla

Producción

  • Node.js 16.20
  • OpenSSL 1.1
  • Configuración antigua

✗ Falla

Cada entorno instala sus propias versiones. La aplicación funciona en la máquina del desarrollador, pero falla en pruebas y producción.

Versiones ilustrativas.

Propósito

Consistencia entre entornos

Mecanismo

Contenedores con aislamiento a nivel de kernel

Licencia

Open source (componentes Moby)

Concepto 2 de 4

Docker no es sinónimo de contenedor

Docker es una implementación del modelo de contenedores, no la única. La interoperabilidad existe gracias a estándares abiertos.

Contenedor

Concepto general. Un proceso o conjunto de procesos aislados que comparten el kernel del host.

Docker

Una plataforma específica que implementa ese concepto. Estandariza la unidad de despliegue apoyándose en OCI, sin depender de los detalles internos con los que la aplicación fue construida.

Concepto 3 de 4

OCI y la interoperabilidad

La Open Container Initiative define los estándares que permiten que imágenes y runtimes de distintas herramientas sean compatibles entre sí.

  1. EstándarOCI
  2. EspecificaciónFormato de imágenes
  1. EstándarOCI
  2. EspecificaciónRuntime de ejecución

Combina una herramienta de construcción con una de ejecución. La imagen OCI viaja de una a otra sin cambios.

Construcción

Ejecución

✓ Compatible

Docker construye con BuildKit y produce una imagen compatible con OCI.

containerd descarga la imagen del registro, la desempaqueta y delega en runc la creación del contenedor.

Combinaciones probadas: 1 de 6 · todas compatibles

Concepto 4 de 4

Arquitectura de Docker Engine

Los componentes internos que colaboran para construir y ejecutar contenedores, organizados por capas de responsabilidad.

Explora cada componente o sigue el recorrido de una orden. docker run atraviesa la pila de ejecución; docker build se desvía hacia BuildKit.

Ejecución

Construcción

Docker CLI

Interfaz de línea de comandos utilizada por el desarrollador. Envía instrucciones al daemon mediante la API.

Docker CLI

Interfaz de línea de comandos utilizada por el desarrollador. Envía instrucciones al daemon mediante la API. Comando docker.

Docker Engine / Daemon

Expone la API y orquesta las operaciones principales. Gestiona builds, ejecuciones, pull/push, redes y volúmenes. Proceso dockerd.

containerd

Gestiona el ciclo de vida de los contenedores. Se encarga de descargar imágenes, crear snapshots y delegar la ejecución al runtime.

Runtime OCI (runc)

Crea el contenedor a nivel de kernel utilizando namespaces, cgroups y mounts. Es el componente más cercano al sistema operativo.

BuildKit

Motor de construcción de imágenes. Opera en paralelo con el flujo de ejecución. Optimiza mediante caché eficiente y paralelismo de etapas.

Autoevaluación

Comprueba lo que aprendiste

Cuatro preguntas rápidas para verificar las ideas clave de la lectura. Cada respuesta incluye una explicación.

  1. 1¿Cuál fue el aporte principal de Docker al modelo de contenedores?
  2. 2¿Por qué una imagen construida con Buildah puede ejecutarse con Docker?
  3. 3Al ejecutar docker run, ¿qué componente crea el contenedor a nivel de kernel con namespaces, cgroups y mounts?
  4. 4¿Por qué BuildKit se representa separado de la cadena dockerd → containerd → runc?

0/4 respuestas correctas