Crea el contenedor Dev perfecto: DNS, certificados y onboarding sin roces
La experiencia soñada para desarrolladores
Piensa en esto: un developer tropieza con tu proyecto open-source, hace clic en "Abrir en Dev Container" y en segundos tiene un entorno de desarrollo listo para usar. Sin scripts de instalación. Sin alertas de certificados. Sin pelear con variables de entorno. Sin errores de puertos ocupados.
Esto es lo que ofrecen los flujos de trabajo con contenedores. Cambian todo. Pero detrás de esa magia hay decisiones técnicas complejas.
Por qué los Dev Containers impulsan la adopción
Facilitar el arranque no es solo comodidad. Es un embudo de conversión. Cuanto menos pasos para pasar de "lo vi" a "lo estoy probando localmente", más colaboradores ganas. Ahí es donde muchos proyectos pierden impulso.
Si tu herramienta simula servicios de Azure como DNS, gestión de claves, service buses o identidad, cada paso manual multiplica el riesgo de abandono.
La arquitectura: tres servicios en una red
La clave está en Docker Compose bien orquestado:
services:
devcontainer: # El espacio de trabajo de VS Code
service-host: # El sidecar principal de la app
dns-resolver: # El truco del DNS wildcard
Cada uno cumple un rol preciso:
- El contenedor de workspace es donde se escribe código y se ejecutan comandos.
- El sidecar de la app lanza los servicios en puertos fijos y predecibles.
- El resolver DNS hace que funcione
*.tudominio.local.
Asignar IPs fijas en una red bridge (172.28.0.0/16) es esencial. Así evitas que cambien al reiniciar contenedores, sobre todo para configurar DNS.
El reto del DNS: por qué es tan complicado
Hacer que el DNS funcione en un contenedor no es simple. Linux maneja la resolución de nombres de forma particular.
El archivo /etc/resolv.conf del contenedor dicta todo. Pero es inestable: Docker lo sobrescribe, el host lo modifica y tus cambios manuales se pierden fácil.
Modificarlo directamente parece buena idea, pero falla rápido. El sistema lo reclama como suyo.
Mejor opción: un sidecar con dnsmasq que:
- Corre en un servicio propio con IP fija en la red de contenedores.
- Resuelve patrones wildcard (
*.tudominio.local.dev). - Usa el DNS del host para lo demás.
- Se configura como nameserver principal vía Docker.
Así colaboras con el sistema, no luchas contra él.
Networking en modo Compose: el truco de los mounts
Con Docker Compose y la extensión Dev Containers de VS Code, el montaje de archivos cambia. El directorio de workspace debe estar accesible, pero Compose lo maneja distinto.
Configura volúmenes así en compose.yml:
services:
devcontainer:
volumes:
- ..:/workspaces/nombre-proyecto:cached
- /var/run/docker.sock:/var/run/docker.sock
El :cached acelera en macOS y Windows, donde las operaciones host-contenedor son lentas. Docker optimiza asumiendo más lecturas que escrituras.
Confianza en certificados: el problema TLS inevitable
Desarrollar con HTTPS exige certificados confiables. Los self-signed generan warnings y rompen llamadas API.
Patrón que funciona:
- Genera un CA local en el build del devcontainer.
- Agrégalo al trust store del contenedor.
- Usa certs firmados por ese CA en el sidecar.
- Comparte el CA vía volumen para que las herramientas lo confíen.
Los developers ni notan el tema. Todo es transparente.
Verificación con health check
Para confirmar que todo va bien:
$ curl https://app.tudominio.local.dev:8899/health
{"status":"healthy","uptime":"2m34s"}
Este comando prueba DNS, red, TLS y el servicio. Si responde, el devcontainer está perfecto.
Por qué invertir en esto para tu proyecto
Cada paso manual que eliminas quita una barrera. Cada config de Compose bien hecha escala a tu equipo y comunidad.
El retorno es inmediato: onboarding rápido, menos "en mi máquina sí funciona" y una señal clara de que priorizas la experiencia developer.
Los detalles técnicos —IPs fijas, sidecars DNS, chains de certs, mounts— son solo medios. El premio es el arranque sin fricciones.
Cómo empezar
Para un devcontainer con app compleja, sigue estos pilares:
- Docker Compose con red bridge e IPs fijas.
- Olvídate de depender solo de
/etc/resolv.conf. - Sidecar dedicado para dominios wildcard.
- Certs locales generados y confiables automáticamente.
- Pruebas end-to-end con requests por hostname.
La complejidad está al inicio. Una vez listo, beneficia a todos los developers para siempre.