Saltar al contenido principal

Creació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:
Devin
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.
Devin

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.
Devin
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.
Devin

Probando el contenedor

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.
Devin
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.
Devin

Depuración

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.
Devin
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.
Devin
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.