DevOps para Datos · Ingeniería de Datos

Contenedores (Docker)

Empaquetar aplicaciones y canalizaciones de datos en contenedores reproducibles con Docker, aislando dependencias.

Contenedores (Docker)

Envuelve todo, corre igual Un contenedor es una caja sellada con todo lo que una aplicación necesita: código, librerías, configuración. Donde vaya la caja, va el ambiente idéntico. Eso mata la deriva de dependencias.

Qué es un contenedor

Una unidad estandarizada de software que empaqueta código y sus dependencias para que corra de forma rápida y fiable de un entorno a otro. Comparte el kernel del anfitrión, sin máquina virtual completa.

Contenedor frente a máquina virtual

La imagen

Una imagen es el molde inmutable: capas de sistema de archivos con el software. De ella nacen contenedores en ejecución, como de un plano nacen casas.

Capas y caché

Las imágenes se construyen en capas apiladas. Docker reutiliza capas en caché, acelerando reconstrucciones y ahorrando espacio al compartir capas entre imágenes.

El Dockerfile

Reproducibilidad

Al fijar dependencias dentro de la imagen, el mismo contenedor corre igual en portátil, servidor o nube. Se acaba la divergencia de entornos.

Aislamiento

Cada contenedor tiene su espacio de procesos y red aislados. Dos aplicaciones con librerías incompatibles pueden coexistir sin pelearse.

Varios contenedores apilados como cajas de transporte, cada uno con un pequeño cubo de aplicación, asentados sobre una fina capa compartida del anfitrión; al lado, una imagen representada como láminas translúcidas superpuestas.
El contenedor empaqueta código y dependencias sobre un kernel compartido; la imagen es un molde inmutable hecho de capas.

Registros de imágenes

Un registro (como un almacén) guarda imágenes versionadas para compartirlas y desplegarlas. Es el equivalente a un repositorio git pero de artefactos ejecutables.

Volúmenes y estado

Para datos e IA

Las canalizaciones y modelos se empaquetan en contenedores para que el entrenamiento y la inferencia corran idénticos en cualquier nodo del clúster.

Buenas prácticas

Errores frecuentes

Ejemplo resuelto: del portátil al servidor sin dramas

Una canalización que corre en el portátil pero falla en el servidor se empaqueta en un Dockerfile: se declara la base, se copian dependencias fijadas y el código. La imagen construida se sube a un registro y el servidor la ejecuta idéntica, acabando la divergencia de entornos.

  1. redactar un Dockerfile que fije la base y las dependencias
  2. construir la imagen por capas aprovechando la caché
  3. probar localmente que el contenedor arranca igual
  4. publicar la imagen versionada en un registro
  5. ejecutar contenedores desde esa imagen en el servidor

¿Para qué sirve en la realidad?

Todo despliegue moderno —microservicios, canalizaciones de datos, servicios de inferencia— se empaqueta en contenedores para que corra idéntico en desarrollo, servidor y nube, eliminando el clásico problema de entornos que no coinciden.

¿Qué ventaja tiene un contenedor frente a una máquina virtual?

Un contenedor en ejecución puede modificarse y esas modificaciones persistir en la imagen de la que nació.

Docker

Molde inmutable del que nacen contenedores
imagen
Receta que construye la imagen
dockerfile
Capas reutilizables de la imagen
cache
Almacén de imágenes versionadas
registro
Donde vive el estado fuera de la imagen
volumen

Ordena el ciclo de vida con Docker:

Escribir
Construir
Publicar
Ejecutar

Contenerización
Empaquetar software con sus dependencias para portabilidad.

Une cada término de Docker con su definición:

Docker

# Contenedores
## Concepto
### unidad de software
### kernel compartido
### más ligero que una VM
## Imagen
### Dockerfile
### capas
### caché
## Distribución
### registro
### etiquetas
### volúmenes
## Ventajas
### reproducibilidad
### aislamiento
### portabilidad

Contenedores de Linux
Mecanismo de aislamiento a nivel de sistema operativo base de los contenedores.

Tu canalización corre en tu portátil pero falla en el servidor. ¿Cómo resolvería un contenedor ese problema y qué capa de la imagen lo causa?