
Dev Containers: Introducción a los contenedores de desarrollo + .NET
Cuando desarrollamos aplicaciones en cualquier stack tecnológico, es común que los equipos de desarrollo tengan que lidiar con la configuración del entorno de desarrollo, instalación de SDKs, runtimes, dependencias de librerías y herramientas. Cuando no hay instrumentos faciliten esta labor, la tarea puede resultar sumamente frustrante. Imagina que no existen los siguientes documentos:
- Documentación de onboarding técnico, sin pasos para instalar un ambiente de desarrollo.
- Documentación de mapeo dependencias y librerías.
- Documentación de configuración de herramientas y utilidades.
Cuando esta documentación no existe los nuevos colaboradores del equipo deben recurrir al líder técnico, al arquitecto o al miembro con más antigüedad en el equipo. Me viene a la mente la tan recordada frase: “Si la documentación no existe, es porque yo soy la documentación”, y aunque paresca gracioso este escenario refleja grandes problemas de organización y gobierno.
Pero incluso aunque se tenga al experto del equipo, muchas veces pasa que hay muchos pasos para configurar el entorno de desarrollo y la memoria de este colaborador puede fallar aca es cuando se suele aparecer la frase: “Que raro en mi máquina si funciona” o “En mi máquina si compila”.
Imagina ahora una gran empresa o un mega corporativo con muchas aplicaciones con diferentes stacks y multiples equipos, cada aplicación es un propio mundo y tiene sus propios requerimientos, es en ese escenario donde los equipos de gobierno tienen una gran labor y pueden llegar a sentirse de esta manera:

Para solucionar este tipo de escenarios es que nace la iniciativa Dev Containers, iniciada por Microsoft e impulsada por grandes empresas tecnológicas como GitHub, Docker y JetBrains.
¿Qué es Dev Containers?
Dev Containers es un conjunto de especificaciones y herramientas que permiten definir entornos de desarrollo reproducibles. Se mateariliza mediante un archivo llamado devcontainer.json
que contiene todas las definiciones necesarias para el ambiente y aplicación con la que se va a trabajar. Este archivo es leido o interpretado por el cliente Dev Containers
quien se conecta a container runtime para levantar un contenedor de desarrollo con todas las dependencias y herramientas necesarias para trabajar en la aplicación, a esto se le conoce también como:
“Entorno de desarrollo como código” o en inglés “Development Environment as Code”.
El cliente más estandarizado es Visual Studio Code, pero la especificación es abierta y lo implementan plataformas como los IDEs de Jetbrains y GitHub Codespaces. El container runtime suele ser Docker, pero también existen otras opciones como Podman y Containerd. De forma amigable se puede entender como la siguiente imagen:

Este post no busca profundizar en toda la especificación y cada una de sus propiedades, pero sí se dará un ejemplo para el ecosistema de .NET, para conocer y comprender toda la especificación puedes visitar la documentación oficial de Dev Containers.
Dev Containers 💜 .NET
En realidad Dev Containers es una especificación agnóstica de la plataforma y lenguaje de programación, puede trabajar con .NET, Java, Python, Node.js, etc. Pero en este post nos centraremos en el ecosistema de .NET. Como no entraré en detalle de toda la especificación muestro la siguiente imagen de referencia:

Requisitos previos
- Tener instalado Docker en tu máquina: Puede ser con Docker Desktop, Podmand o WSL2 con Docker Engine en Windows
- Tener instalado Visual Studio Code y la extensión Dev Containers
Dejo el enlace de repositorio de ejemplo a fin de que se pueda descargar y ejecutar los siguientes pasos:
- Abrir la carpeta del repositorio de ejemplo en Visual Studio Code
- Inmediatamente, aparece una notificación “Reopen in Container”, hacer click en “Reopen in Container”, si esta notificación no aparece se puede abrir el comando de paleta y buscar “Dev Containers: Reopen in Container”
- Si haces click en “Show Logs” puedes ver el proceso de build del contenedor de desarrollo
- Ahora ya estás dentro del contenedor de desarrollo. Una prueba interesante para .NET es abrir la terminal y ejecutar el comando
dotnet --infopara ver que el SDK de .NET está instalado y listo para usar. Esto cobra más valor si no tiene instalado ninguna versión del SDK de .NET en tu máquina, ya que el contenedor de desarrollo tiene todo lo necesario para trabajar con .NET.
El log de progreso debe ser parecido al siguiente:

¿Por qué Dev Containers en la era de la IA?
Dev Containers de forma implícita ofrece “aislamiento”, quiere decir que lo que sucede dentro del contenedor no afecta al anfitrión, este aislamiento tiene mucho valor desde la perspectiva de seguridad y en la era de la IA cobra mucho valor, ya que patrones como el harness engineering muchas veces se valen de tools como scripts en Python para enriquecer la capacidad de los agentes, cuando estos agentes ejecuten estos scripts dentro del contenedor, no afectará al anfitrión, lo cual mitiga enormemente el riesgo de efectos indeseados por código no verificado.
Sígueme en Linkedin para estar al tanto de mis publicaciones y novedades