Vai al contenuto principale

Creare un container Docker

Poiché Devin ha accesso a un terminale e può configurare ed eseguire software sul proprio server, creare un container Docker rientra pienamente nelle sue capacità. La nostra applicazione di esempio è un progetto Go con MongoDB come database. Questa sessione è la versione, realizzata da Devin, di una pull request che uno sviluppatore reale ha aperto per un progetto open source. Segui l’esecuzione in tempo reale qui.

Iniziare da una GitHub Issue

Partiamo dall’issue originale su GitHub:
Devin
Successivamente, possiamo scrivere un semplice prompt per Devin basato su ciò che questa issue richiede. Gli chiediamo di leggere l’issue GitHub qui sopra per ulteriore contesto e gli forniamo anche un nostro riepilogo della soluzione proposta e di ciò che vogliamo che Devin produca.
Devin

Analisi della codebase

Devin inizia con una fase di analisi in cui legge la nostra issue GitHub collegata e scansiona il codice e i file di configurazione reali del progetto per individuare le dipendenze necessarie.
Devin
Al termine dell’analisi, Devin procede a installare Docker sulla propria macchina locale e quindi a creare il nostro Dockerfile iniziale, docker-compose.yml e .dockerignore, in modo da poter iniziare a testare la configurazione del container. Configura anche il nostro file .env in modo che l’applicazione possa essere eseguita utilizzando il backend del container appena configurato.
Devin

Test del container

Devin passa quindi a testare ogni container, iniziando dal nostro server MongoDB e poi proseguendo con il nostro ambiente Go. Una volta che i container sono attivi e funzionanti, Devin passa a testare l’applicazione vera e propria. Dando un’occhiata alla cronologia dei comandi di Devin posso vedere che ha trovato la nostra definizione Swagger dell’API e l’ha caricata nel Browser integrato per vedere come funziona l’API di backend.
Devin
Devin ha poi preparato una richiesta curl per verificare che l’API di backend sia in esecuzione e restituisca risultati conformi alle specifiche di progettazione.
Devin

Debugging

Poiché riceviamo un errore Connection refused, Devin passa immediatamente al debugging e alla correzione della configurazione Docker. Questo è uno schema ricorrente in cui Devin può autocorreggere gli errori man mano che procede in una sessione. Devin corregge rapidamente il problema di configurazione, riavvia il container Docker e riepiloga il lavoro completato per noi.
Devin
Quando confrontiamo il lavoro di Devin con la PR sul progetto reale, emergono alcune differenze e miglioramenti significativi:
  • Devin configura un file docker-compose.yml in aggiunta al nostro Dockerfile. Questo ci fornisce impostazioni di orchestrazione più specifiche, come la definizione della nostra rete, la configurazione dei volumi e le dipendenze tra i vari servizi.
  • Devin modifica il processo di build da go mod tidy a un metodo che consente di mettere in cache alcune dipendenze nella nostra build Docker.
  • Devin crea un binario Go staticamente linkato anziché dinamicamente collegato, il che dovrebbe rendere la nostra build Docker più leggera.
  • Devin configura i certificati CA per HTTPS e ci consente di usare un file .env per la configurazione anziché passare direttamente le variabili d’ambiente.
  • E soprattutto, Devin aggiunge un servizio MongoDB nella nostra configurazione Docker, che nella PR del progetto non è presente. Questa infatti presume che lo sviluppatore abbia già un’istanza MongoDB separata in esecuzione.
Devin
In 13 minuti, Devin ha creato con successo il nostro container Docker per il backend di questo progetto seguendo le best practice, lo ha testato e ha scritto un riepilogo completo del lavoro svolto. Prova oggi stesso un prompt di containerizzazione sul tuo codice registrandoti a un account Devin per il tuo team tramite il sito di iscrizione.