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
nightly
para 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
8080
do host para a porta3000
do container; - Define a dependência no serviço
db
; - Utiliza um arquivo
.env
para 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
5432
do host para a porta5432
do 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.