Resumen
En este episodio se presenta Docker y su utilidad para el desarrollo de productos analíticos en ciencia de datos. Se explica la diferencia entre repetibilidad, replicabilidad, reproducibilidad y reusabilidad, y por qué lo reproducible es clave al traspasar proyectos entre desarrolladores y equipos de producción. Se describen los componentes principales (imágenes, contenedores, Dockerfile y registros como Docker Hub), el uso de Docker Compose, alternativas como máquinas virtuales, Singularity y Kubernetes, y consideraciones de seguridad y de tamaño de las imágenes. Se muestra en vivo cómo bajar imágenes, mapear puertos, detener, iniciar y borrar contenedores, y cómo desarrollar dentro de un contenedor con la extensión Dev Containers de Visual Studio Code. La conclusión principal es que Docker es una buena herramienta para trabajar en equipo con desarrollo reproducible, y que para un data scientist basta con dominar un contenedor en un solo computador, sin necesidad de Kubernetes.
Capítulos
- 00:00Intro. Qué es Docker y su importancia en el mundo del DSDocker permite empaquetar código, sistema operativo y dependencias en un contenedor reutilizable, lo que da reproducibilidad a los productos analíticos. Se explica que importa sobre todo en el trabajo, donde el código depende de librerías, versiones, sistema operativo y hardware (GPU/CPU), y que quien desarrolla y quien productiviza suelen ser personas distintas.
- 04:44Repetibilidad, replicabilidad, reproducibilidad y reusabilidadSe distingue repetir (mismo experimento, mismo laboratorio), replicar (otro laboratorio), reproducir (mismo experimento con otro setup) y reusar (experimento distinto para un uso similar). Se busca lograr reproducibilidad para traspasar proyectos y llevarlos a producción.
- 05:53Componentes principales y detalle de cómo funciona dockerLas imágenes son "fotos" de un ambiente con sistema operativo y programas instalados; los contenedores son instancias de esas imágenes; el Dockerfile es el script que genera la imagen. Se menciona Docker Hub y los registros de AWS, Google y Azure (en Docker Hub el repositorio privado es de pago), y la posibilidad de redes entre contenedores con IP propia. Se cuenta la experiencia de abrir en Visual Studio Code un contenedor dejado por un excompañero para probar su código.
- 16:14Docker composeDocker Compose guarda en un archivo YAML la configuración de inicio (imagen, volúmenes, variables de ambiente, puertos), evitando comandos larguísimos y permitiendo versionarlo en git. Se muestra un ejemplo con una base de datos MySQL 5.7 y una herramienta open source de dibujo con puertos y carpeta mapeados, además de una implementación de YOLOv7 en Docker. Se recomiendan los videos de NetworkChuck para aprender, y se plantea usar contenedores como herramienta de desarrollo o para ejecutar código, con imágenes de Jupyter y Rocker (RStudio) ya disponibles. Se detalla cómo instalar Docker en Windows, Linux y Mac, el requisito de compartir kernel, el tamaño de imágenes (hello-world 13 kB, python casi 1 GB, alpine unos 50 MB), el comando `docker pull` con tags y la precaución de descargar solo imágenes oficiales. También se discute ciberseguridad: vulnerabilidades en imágenes oficiales y riesgo según si el uso es interno o público.
- 40:48MemesMemes sobre tipos de dolor de cabeza (leer código ajeno), rutas absolutas en máquinas de compañeros y el clásico "funciona en mi máquina, entonces mandemos tu máquina a producción". Se explica que Docker nació para resolver el problema de que todo funciona en local pero se rompe en producción, y que construir una imagen puede fallar por firewalls o dependencias caídas, pero una imagen ya construida queda congelada y sigue funcionando. Se comenta que Docker funciona mejor en Linux que en Windows.
- 46:52Alternativas de DockerSe mencionan Singularity (usada en bioestadística y computación de alto rendimiento), VirtualBox y Kubernetes. Las máquinas virtuales permiten otro kernel pero son más pesadas y reservan RAM; Kubernetes gestiona contenedores en un clúster con escalado, es complejo y poco necesario para un data scientist. Se habla también de microservicios (backend y frontend en contenedores separados) y de que para productos analíticos simples basta un solo Docker en un computador.
- 55:11Cómo instalar DockerSe indica buscar la guía de instalación según el sistema operativo; en el ejemplo se usa Ubuntu sobre Windows (WSL). Se baja la imagen hello-world, se lista con `docker image ls` y se ejecuta; luego se comienza a bajar una imagen de Jupyter de unos 2 GB.
- 57:00Exposición de puertos y Docker NetworkSe explica qué son la IP y los puertos (22 para SSH, 80 para HTTP, 443 para HTTPS) y por qué hay que mapear los puertos del contenedor a los de la máquina para acceder a servicios como RStudio o Jupyter. Se aclara que cada contenedor puede usar internamente el mismo puerto pero mapearlo a puertos distintos del host (por ejemplo 8000, 8001), y que el orden es primero host y luego contenedor.
- 01:03:22Ejemplo de creación de un dockerSe ejecuta la imagen de Jupyter mapeando el puerto 10000 del host al 8000 del contenedor, y se muestran `docker ps`, `docker stop`, `docker start` y la eliminación de contenedores. Se advierte que al borrar un contenedor se pierde lo hecho dentro, salvo que se guarde con `docker commit` como nueva imagen. Luego se explica el uso de las extensiones de Docker y Dev Containers en Visual Studio Code para abrir un contenedor y desarrollar dentro con depurador, autocompletado y versiones ya configuradas, haciendo commits a git y subiendo la imagen al repositorio.
- 01:16:56CierreSe concluye que Docker es una buena herramienta para el desarrollo reproducible en equipo, que existen muchas imágenes útiles para explorar (como Jupyter con Python) y que mapear puertos es fundamental. Se destaca la extensión de VS Code para desarrollar dentro de una imagen; un participante comenta que en Mac muchas cosas no funcionan.