Pular para o conteúdo principal

Criando um Container Docker

Como o Devin tem acesso a um terminal e pode configurar e executar software em seu próprio servidor, criar um container Docker está totalmente dentro das suas capacidades. Nossa aplicação de exemplo é um projeto em Go com MongoDB como armazenamento de dados. Esta sessão é a versão do Devin de um pull request que um desenvolvedor real fez para um projeto open source. Acompanhe a execução ao vivo aqui.

Comece com uma issue do GitHub

Começamos com a issue original do GitHub:
Devin
Em seguida, podemos escrever um prompt simples para o Devin com base no que essa issue está pedindo. Pedimos que ele leia a issue do GitHub acima para obter mais contexto, mas também damos nosso próprio resumo da solução proposta e do que queremos que o Devin produza.
Devin

Investigando a base de código

Devin começa com uma etapa de investigação em que lê nossa issue vinculada no GitHub e analisa o código e os arquivos de configuração do projeto em busca das dependências necessárias.
Devin
Após concluir a análise, Devin procede à instalação do Docker em sua máquina local e, em seguida, cria nosso Dockerfile inicial, docker-compose.yml e .dockerignore para começar a testar a configuração do contêiner. Ele também configura nosso arquivo .env para que a aplicação possa ser executada com o back-end em contêiner recém-configurado.
Devin

Testando o container

Devin então passa a testar cada container, começando pelo nosso servidor MongoDB e depois seguindo para o nosso ambiente Go. Assim que os containers estão em execução, Devin passa a testar o próprio aplicativo. Ao ler o Histórico de Comandos do Devin, vejo que ele encontrou nossa definição de API Swagger e a carregou no Browser integrado para entender como a API de backend funciona.
Devin
Em seguida, Devin montou uma requisição curl para testar se a API de backend está em execução e retornando resultados conforme sua especificação de design.
Devin

Depuração

Como recebemos um erro de Connection refused, Devin imediatamente inicia a depuração e correção da configuração do Docker. Esse é um padrão comum em que Devin consegue se autocorrigir à medida que avança em uma sessão. Devin corrige rapidamente o problema de configuração, reinicia o contêiner Docker e resume o trabalho concluído para nós.
Devin
Quando comparamos o trabalho do Devin com o PR do projeto real, há algumas diferenças e melhorias importantes:
  • Devin configura um arquivo docker-compose.yml além do nosso Dockerfile. Isso nos dá configurações de orquestração mais específicas, como definir como nossa rede funciona, como nossos volumes são configurados e de quais serviços outros serviços dependem.
  • Devin altera o processo de build de go mod tidy para um método que nos permite armazenar em cache algumas das dependências no nosso build Docker.
  • Devin gera um binário Go estaticamente ligado em vez de dinamicamente ligado, o que deve deixar nosso build Docker mais leve.
  • Devin configura nossos certificados de CA para HTTPS e nos permite usar um arquivo .env para configuração em vez de passar variáveis de ambiente diretamente.
  • E, principalmente, Devin adiciona um serviço MongoDB na nossa configuração Docker, algo que o PR do projeto não faz. Ele assume que o desenvolvedor já tem uma instância separada de MongoDB em execução.
Devin
Em 13 minutos, Devin configurou com sucesso nosso contêiner Docker para o backend deste projeto usando boas práticas, testou-o e escreveu um resumo abrangente do seu trabalho. Experimente hoje o seu próprio prompt de conteinerização na sua base de código se inscrevendo para uma conta Devin para sua equipe.