Saltar al contenido principalCreación de un contenedor Docker
Dado que Devin tiene acceso a un terminal y puede configurar y ejecutar software en su propio servidor, configurar un contenedor Docker está perfectamente dentro de sus capacidades.
Nuestra aplicación de ejemplo es un proyecto en Go con MongoDB como almacén de datos. Esta sesión es la versión de Devin de un pull request que un desarrollador real hizo a un proyecto de código abierto. Puedes seguir la ejecución en vivo aquí.
Comenzar con un issue de GitHub
Comenzamos con el issue original de GitHub:
A continuación, podemos escribir un prompt sencillo para Devin en función de lo que solicita este issue. Le indicamos que lea el issue de GitHub anterior para obtener contexto adicional, pero también le damos nuestro propio resumen de la solución propuesta y de lo que queremos que Devin produzca.
Investigando la base de código
Devin comienza con una etapa de investigación en la que lee nuestro issue de GitHub vinculado y escanea el código real y los archivos de configuración del proyecto en busca de las dependencias necesarias.
Una vez que completa su análisis, Devin procede a instalar Docker en su máquina local y luego crea nuestro Dockerfile inicial, docker-compose.yml y .dockerignore para poder comenzar a probar la configuración del contenedor. También configura nuestro archivo .env para que la aplicación pueda ejecutarse con el backend de contenedores recién configurado.
A continuación, Devin prueba cada contenedor, comenzando con nuestro servidor MongoDB y luego continuando con nuestro entorno de Go. Una vez que los contenedores están en funcionamiento, Devin pasa a probar la aplicación en sí. Al leer el Historial de comandos de Devin, puedo ver que encontró nuestra definición de la API de Swagger y la cargó en el navegador integrado para ver cómo funciona la API de backend.
Luego, Devin preparó una solicitud curl para comprobar que la API de backend esté en ejecución y devuelva resultados según su especificación de diseño.
Dado que obtenemos un error de Connection refused, Devin pasa inmediatamente a depurar y corregir la configuración de Docker. Este es un patrón común en el que Devin puede autocorregir errores a medida que avanza en una sesión. Devin corrige rápidamente el problema de configuración, reinicia el contenedor de Docker y resume el trabajo que ha completado para nosotros.
Cuando comparamos el trabajo de Devin con el PR en el proyecto real, vemos algunas diferencias y mejoras importantes:
- Devin configura un archivo docker-compose.yml además de nuestro Dockerfile. Esto nos da algunos ajustes de orquestación más específicos, como definir cómo funciona nuestra red, cómo se configuran nuestros volúmenes y qué servicios dependen entre sí.
- Devin cambia el proceso de compilación de
go mod tidy a un método que nos permite almacenar en caché algunas de las dependencias en nuestra compilación de Docker.
- Devin genera un binario de Go enlazado estáticamente en lugar de uno enlazado dinámicamente, lo que debería ser más liviano para nuestra compilación de Docker.
- Devin configura nuestros certificados CA para HTTPS y nos permite usar un archivo .env para la configuración en lugar de pasar variables de entorno directamente.
- Y, lo más notable, Devin añade un servicio de MongoDB en nuestra configuración de Docker que el PR del proyecto no incluye. En él se asume que el desarrollador ya tiene una instancia de MongoDB separada en ejecución.
En 13 minutos, Devin ha ensamblado correctamente nuestro contenedor de Docker para el backend de este proyecto siguiendo las mejores prácticas, lo ha probado y ha escrito un resumen completo de su trabajo. Prueba hoy tu propio prompt de contenedorización en tu propio código base registrándote para obtener una cuenta de Devin para tu equipo.