Aplicativo simples de to-do-list, onde a pessoa cadastrar o títudo da terefa, descrição da tarefa, a data postada e a data final para concluir a tarefa.
Esse aplicativo é uma simples versão de uma API usando o Spring-boot java versão 17, ele é apenas a versão back-end do sistema, pois o intuito desse aplicativo é a dockerização e a implatanção no kubernets usando o helm e o kind e o banco de dados da Postgresql.
Já como é uma API usando apenas o back-end, para testar as requisições é necessário as seguintes ferramentas.
Ferramentas necessárias:
Requisições disponíveis são as GET
, POST
, DELETE
, PATH
O código funciona com 4 classes e mais main, a classe.
Task.java
é o mapeamento da minha tabela do meu banco de dados postgres.
TaskController.java
é a classe responsável pelo mapeamento das requisições na API.
TaskService.java
é a classe responsável pelo os dados a serem gravados no banco de dados.
TaskRepository.java
essa interface fornece uma série de métodos úteis para realizar operações comuns de CRUD (Create, Read, Update, Delete) no banco de dados para a entidade Task.
FROM openjdk:17
Puxa a imagem do java 17 do dockerhub
VOLUME /tmp
É um volume criado para os dados persistirem no banco de dados
EXPOSE 8080
Informa que a aplicação vai estar escutando na porta 8080
RUN mkdir -p /app
Cria um diretório dentro do sistema de arquivos do contêiner
APP target/to-do-list-0.0.1-SNAPSHOT.jar
adiciona o .jar da aplicação no diretório criado /app e depois é renomeado o .jar para app.jar
ENTRYPOINT[...]
É o ponto de entrada padrão para o contêiner executando os seguintes comandos.
java
Iniciar a JVM-Djava.security.egd=file:/dev/./urandom
Configura a propriedade de segurança da JVM para usar.-Dspring.profiles.active=container
Configura a propriedade de perfil para iniciar com o contêiner.-jar /app/app.jar
Executa a aplicação atravéz do docker.
Este serviço define um contêiner para o banco de dados PostgreSQL.
image: postgres:latest
Usa a imagem oficial do PostgreSQL na versão mais recente.
network_mode: bridge:
Define o modo de rede como bridge.
container_name: postgres:
Define o nome do contêiner como "postgres".
volumes: - postgres-data:/var/lib/postgresql/data:
Cria um volume chamado "postgres-data" para persistir os dados do PostgreSQL.
expose: - 5432:
Exponha a porta 5432 internamente.
ports: - 5432:5432:
Mapeia a porta 5432 do host para a porta 5432 do contêiner, permitindo a conexão externa ao banco de dados.
environment: [...]:
Configura variáveis de ambiente para a instância do PostgreSQL, como senha, usuário e banco de dados.
restart: unless-stopped:
Garante que o contêiner seja reiniciado, a menos que seja explicitamente parado.
Este serviço define um contêiner para a sua aplicação "dev-ops".
image: dev-ops:latest:
Usa a imagem "dev-ops" na versão mais recente.
network_mode: bridge:
Define o modo de rede como bridge.
container_name: dev-ops:
Define o nome do contêiner como "dev-ops".
expose: - 8080:
Exponha a porta 8080 internamente.
ports: - 8080:8080:
Mapeia a porta 8080 do host para a porta 8080 do contêiner.
restart: unless-stopped:
Garante que o contêiner seja reiniciado, a menos que seja explicitamente parado.
depends_on: - postgres:
Define uma dependência em relação ao serviço "postgres", garantindo que o banco de dados esteja disponível antes de iniciar este serviço.
links: - postgres:
Cria um link para o serviço "postgres", permitindo que o serviço "dev-ops" se comunique com o serviço do PostgreSQL usando o nome do contêiner "postgres".
Volumnes:
Define um volume para o contêiner
postgres-data:
É usado pelo serviço Postgres para a persistência dos dados.
docker build -t gabrielnathan/dev-ops:v9 .
docker push gabrielnathan/dev-ops:v9
docker-compose up -d
- Configuração do application.properties
Foi adicionados apenas 2 arquivos a mais na pasta que foi criado usando o comando do helm e algumas configurações no values.yaml, Chart.yaml e no deployment.yaml.
config-map.yaml
Separa as configurações do pod e dos componentes, o que ajuda a manter as cargas de trabalho portáteis.
secrect.yaml
Evita que você tenha de incluir dados confidenciais no seu código
deployment.yaml
Configurações
Values.yaml
Configurações adicionadas no final do arquivo
Chart.yaml
Adiciona a depência do postgres no arquivo
helm install dev-ops ./dev-ops
$POD_NAME = kubectl get pods --namespace default -l "app.kubernetes.io/name=dev-ops,app.kubernetes.io/instance=dev-ops" -o jsonpath="{.items[0].metadata.name}"
$CONTAINER_PORT = kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}"
kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT
No arquivo application.properties
nao esquecer de colocar a informação do serviço que está implantado com o Postgres
Exemplo: