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.
javaIniciar a JVM-Djava.security.egd=file:/dev/./urandomConfigura a propriedade de segurança da JVM para usar.-Dspring.profiles.active=containerConfigura a propriedade de perfil para iniciar com o contêiner.-jar /app/app.jarExecuta 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:

