Tenho um CRUD de cliente com 6 atributos cadastrados em um banco postgres, como seria um docker-compose.yml para criar imagem container e ter acesso aos 5 clientes cadastrados no postgres

aplication.properties está:

spring.thymeleaf.mode=html
spring.thymeleaf.cache=false
#server.port=8080

spring.main.banner-mode=off
logging.level.org.springframework=ERROR

spring.datasource.url=jdbc:postgresql://localhost:5432/senai
spring.datasource.username=postgres
spring.datasource.password=sueder
#spring.jpa.show-sql=true
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=update
spring.flyway.baseline-on-migrate = true

docker-compose.yml

version: '3.8'

services:
 senai:
    image: 'petter-senai:latest'
    build:
      context: .
      target: development
    ports:
      - "8080:8080"
    depends_on:
      - database
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://database:5432/senai
      - SPRING_DATASOURCE_USERNAME=postgres
      - SPRING_DATASOURCE_PASSWORD=sueder
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update
    volumes:
     - ./:/app
      
 database:
    image: postgres:10.17
    restart: always
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=sueder
      - POSTGRES_DB=senai
    ports:
      - "5432:5432"
    volumes: 
      - pg-data:/var/lib/postgresql/data
volumes:
  pg-data:

dockerfile

# syntax=docker/dockerfile:1

FROM eclipse-temurin:17-jdk-jammy as base
WORKDIR /app
COPY .mvn/ .mvn
COPY mvnw pom.xml ./
RUN ./mvnw dependency:resolve
COPY src ./src

FROM base as development
CMD ["./mvnw", "spring-boot:run", "-Dspring-boot.run.profiles=postgres", "-Dspring-boot.run.jvmArguments='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000'"]

FROM base as build
RUN ./mvnw package

FROM eclipse-temurin:17-jre-jammy as production
EXPOSE 8080
COPY --from=build /app/target/demo-0.0.1-SNAPSHOT-*.jar /demo-0.0.1-SNAPSHOT.jar
CMD ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/demo-0.0.1-SNAPSHOT.jar"]

Boa noite Tobe, sobre criar a imagem você pode passar seu Dockerfile apontando da seguinte forma:

    build:
      context: ./pasta_raiz_do_seu_dockerfile
      dockerfile: Dockerfile

Sobre a segunda parte da sua pergunta não entendi o que você quer exatamente.

Bom dia Breno_Henrrique !
Obrigado por responder esta questão!
Então, esses arquivos acima, quase conseguem criar o que preciso. Mas o que preciso é, criar a imagem do meu projeto spring, imagem do meu postgres contendo os 5 clientes cadastrados, e disponibilizar, para um outro testar meu CRUD ?
Desde já Obrigado!

Se não me engano não é possível criar uma imagem pelo docker-compose.yml, mas nele é possível apontar o Dockerfile que gera a imagem quando executado pelo docker-compose. Só você passar o dockerfile da forma que mostrei.

Sobre o bd, você já tem ele criado e com esses dados e quer subir o container dele? Ou no momento que executar o docker-compose, você quer criar criar o bd e inserir esses dados?

Olhe se isso lhe ajuda:

Então Breno_Henrrique, esse é o ponto: por exemplo: recebi um teste para executar o qual tenho que desenvolver um CRUD de cliente: construi o sistema, na minha máquina testei e inseri 6 clientes no banco: Ou sejá, na minha máquina funciona, sendo asssim, queria fazer um Dockfile e um docker-compose.yml, para que quando alguém baixar do github, possa executar o porjeto no docker e avaliar o sistema : quanto ao postgres, não sei se é possível criar uma imagem e um container dessa imagem, que ja tenha os 6 clientes cadastrados ? se sim, qual a estratégia para fazer isso?
Obrigado!

Para compartilhar os dados do Postgres em imagens Docker, você precisa criar um volume no docker-compose que vai espelhar os arquivos de dados do banco para um pastar externa, então você vai disponibilizar essa pasta junto com o Dockfile e o docker-compose.yml, assim quando a pessoa der um docker-compose up o container vai ser montado com os dados do seu banco.

Verifique a pagina oficial do Postgres no Docker Hub, para ver como montar o volume de dados.

1 curtida

Obrigado lucashpmelo!
Desisti dessa extratégia, foi mais fácil criar uma tabela e inserir dados através de um arquivo .sql