Contenedores (Docker)
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 VM virtualiza hardware: trae su propio sistema operativo, pesada.
- El contenedor virtualiza el sistema operativo: ligero y de arranque veloz.
- Muchos contenedores caben donde cabría una VM.
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
- Receta que declara cómo construir la imagen.
- Cada instrucción suele añadir una capa.
- Escribirlo ordenado maximiza el uso de caché.
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.

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
- La imagen es inmutable; los datos vivos van en volúmenes.
- Separar estado permite reemplazar el contenedor sin perder información.
- Un contenedor sin volumen es desechable.
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
- Imágenes pequeñas: solo lo necesario.
- No guardar secretos dentro de la imagen.
- Etiquetar versiones con claridad.
Errores frecuentes
- Confiar en el «funciona en mi máquina» en vez de fijar dependencias dentro de la imagen.
- Guardar secretos dentro de la imagen, donde quedan expuestos a quien la extraiga.
- Arrastrar todo el sistema operativo en una imagen enorme cuando bastarían capas mínimas.
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.
- redactar un Dockerfile que fije la base y las dependencias
- construir la imagen por capas aprovechando la caché
- probar localmente que el contenedor arranca igual
- publicar la imagen versionada en un registro
- 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
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?