Entregável 3
Dockerfile¶
O Dockerfile é um script de configuração que contém uma série de instruções para criar uma imagem Docker para a aplicação. A utilização de um Dockerfile permite a automação do processo de construção da imagem, garantindo que a aplicação seja empacotada com todas as suas dependências e pronta para ser executada em qualquer ambiente Docker.
O Dockerfile cria uma imagem Docker leve e eficiente para a aplicação, utilizando a imagem rust:1.75-alpine3.19 como base para o estágio de construção e uma imagem scratch para o estágio de produção.
Estágio de Construção¶
- A imagem base
rust:1.75-alpine3.19é uma versão minimalista que reduz o tamanho do container; - O Rust é configurado para a versão
nightlypara utilizar features específicas dessa versão; - O diretório de trabalho é definido como
/usr/src/tech-challenge; - A dependência
musl-devé instalada para permitir a compilação estática do binário; - O código fonte é copiado para o container e o projeto é construído com
cargo build --release.
Estágio de Produção¶
- A imagem
scratché usada como base, que é uma imagem vazia, para manter o container o mais leve possível; - O binário compilado é copiado do estágio de construção;
- O ponto de entrada é definido para executar o binário;
- A porta
3000é exposta para comunicação com o container.
Docker Compose¶
O Docker Compose define como os serviços Docker devem ser executados e como eles interagem entre si. Com o Docker Compose, podemos definir uma aplicação multi-contêiner de forma declarativa e gerenciar todo o ciclo de vida da aplicação com comandos simples.
Nosso arquivo de configuração docker-compose.yml define dois serviços: app (aplicação) e db (banco de dados).
Serviço de Aplicação¶
- Constrói a imagem da aplicação a partir do Dockerfile descrito anteriormente;
- Reinicia automaticamente sempre que há uma falha;
- Mapeia a porta
8080do host para a porta3000do container; - Define a dependência no serviço
db; - Utiliza um arquivo
.envpara carregar variáveis de ambiente; - Define variáveis de ambiente adicionais para a conexão com o banco de dados e outras configurações.
Serviço de Banco de Dados¶
- Utiliza a imagem
postgres:15.2-alpine; - Reinicia automaticamente sempre que há uma falha;
- Define variáveis de ambiente para a configuração do PostgreSQL;
- Mapeia a porta
5432do host para a porta5432do container.
Tutorial para Execução da Aplicação com Docker¶
1. Clonar o Repositório
Faça o clone do repositório abaixo e entre no diretório do projeto:
git clone git@github.com:postech-5soat-grupo-25/tech_challenge.git
cd tech_challenge
2. Construir a Imagem Docker
Execute make build para construir a imagem Docker da aplicação. Isso também construirá a imagem do banco de dados se necessário.
3. Iniciar a Aplicação
Após a construção, execute make run para iniciar a aplicação. Isso iniciará tanto o serviço da aplicação quanto o serviço do banco de dados.
4. Acessar a Aplicação
Com a aplicação em execução, você pode acessá-la através do localhost:8080 no seu navegador ou utilizando um cliente HTTP. Nessa etapa você pode interagir com a aplicação utilizando os endpoints descritos no Entregável 2 e acessar a Swagger UI disponibilizada.
5. Desligar a Aplicação
Quando terminar, execute make down para desligar a aplicação e remover os containers.