Skip to content

1. ¿Qué es un contenedor?

Temas del programa: 4.1.1

Un contenedor es un entorno de ejecución aislado para uno o varios procesos que utilizan un conjunto definido de archivos y dependencias

En el caso habitual de contenedores Linux

  • Los procesos se ejecutan utilizando el kernel Linux disponible en su entorno de ejecución
  • El aislamiento se implementa mediante mecanismos del sistema operativo
  • Los archivos necesarios para ejecutar la aplicación se proporcionan mediante una imagen y sus capas
APLICACIÓN
┌────────────┼────────────┐
▼ ▼ ▼
Frontend API PostgreSQL
contenedor contenedor contenedor

Cada componente puede tener su propio ciclo de vida y configuración

Separar componentes es una decisión de arquitectura y no una obligación para todas las aplicaciones

Imagina una mudanza

ANTES
Ropa
Libros
Herramientas
Documentos
Todo mezclado
DESPUÉS
Caja 1 → libros
Caja 2 → herramientas
Caja 3 → documentos

Cada caja organiza los elementos que deben trasladarse juntos

Los contenedores ayudan a empaquetar y ejecutar software con sus archivos necesarios

Una caja es un objeto físico

Un contenedor es un entorno de ejecución que el sistema operativo administra

Aplicación
│
▼
Proceso aislado
│
▼
Sistema operativo

La analogía ayuda a comprender la idea de organización y aislamiento pero no describe el funcionamiento interno

Máquina virtual

Virtualiza hardware

Ejecuta un sistema operativo invitado con su propio kernel

Contenedor Linux

Aísla procesos

Comparte el kernel de su entorno Linux

┌───────────────────────────────┐
│ Aplicación │
├───────────────────────────────┤
│ Bibliotecas y dependencias │
├───────────────────────────────┤
│ Sistema operativo invitado │
├───────────────────────────────┤
│ Kernel del sistema invitado │
└───────────────────────────────┘
│
▼
Hipervisor
│
▼
Hardware
┌───────────────────────────────┐
│ Aplicación │
├───────────────────────────────┤
│ Bibliotecas y dependencias │
├───────────────────────────────┤
│ Archivos de la imagen │
└───────────────────────────────┘
│
▼
Runtime de contenedores
│
▼
┌───────────────────────────────┐
│ Kernel Linux compartido │
└───────────────────────────────┘
│
▼
Hardware
CaracterísticaMáquina virtualContenedor Linux
Unidad principalSistema operativo virtualizadoProcesos aislados
KernelKernel propio del invitadoComparte el kernel de su entorno
ArchivosSistema operativo completoArchivos de la imagen
InicioArranca un sistema operativoInicia los procesos configurados
SobrecargaGeneralmente mayorGeneralmente menor
AislamientoFrontera de virtualizaciónAislamiento a nivel de sistema operativo

La sobrecarga y el nivel de aislamiento dependen de la implementación y la configuración

¿Los contenedores siempre utilizan Linux?

Section titled “¿Los contenedores siempre utilizan Linux?”

No necesariamente

Existen contenedores Linux y contenedores Windows con diferentes requisitos

En este bloque estudiaremos principalmente contenedores Linux porque son la base de muchos entornos modernos de desarrollo y despliegue

Contenedores
│
├── Contenedores Linux
│
└── Contenedores Windows

No se debe confundir el sistema operativo de tu computadora con el sistema operativo del entorno donde se ejecuta el contenedor

Una computadora Windows o macOS no proporciona de forma nativa el kernel Linux que necesitan los contenedores Linux

Por eso las herramientas habituales utilizan un entorno Linux

Windows o macOS
│
▼
Entorno Linux
│
▼
Motor de contenedores
│
▼
Contenedores Linux

En Windows se utiliza comúnmente WSL 2 con Docker Desktop

En macOS Docker Desktop utiliza una máquina virtual Linux administrada por la herramienta

Imagen de una aplicación
├── Archivos del programa
├── Bibliotecas necesarias
├── Dependencias
├── Certificados requeridos
├── Archivos de configuración predeterminados
└── Instrucciones de ejecución

Una imagen no tiene que contener todos los elementos de una computadora

Por ejemplo no necesita incluir un escritorio gráfico si ejecutará una API web

¿Qué no resuelven los contenedores automáticamente?

Section titled “¿Qué no resuelven los contenedores automáticamente?”

Los contenedores no garantizan por sí solos

  • Que el código sea correcto
  • Que la aplicación sea segura
  • Que existan respaldos
  • Que los datos sean persistentes
  • Que el sistema soporte miles de usuarios
  • Que todos los equipos tengan idéntico rendimiento
  • Que un despliegue sea de alta disponibilidad

Este tema se practica en el Laboratorio 1 — Primeros contenedores.

Continúa con 2. Docker es la herramienta.