Executando verificação de segurança...
2

Como faço configuração do Docker compose com PostgresSQL

Estou tentanto fazer um projeto no estou utilizando o Windows com Docker e Docker Compose com Postgres mais nao estou conseguindo alguem pode ajudar.

Carregando publicação patrocinada...
2

Via windows eu não sei exatamente se roda todas as imagens (acredito que sim). Mas no macOS constumo utilizar via docker run mesmo para desenvolvimento.

docker run -d \                   
        --name postgres \
        -p 5432:5432 \
        -v ~/apps/postgres:/var/lib/postgresql/data \
        -e POSTGRES_PASSWORD=docker \
        -e POSTGRES_USER=docker \
        -e POSTGRES_DB=expenses_tracker \
         postgres:14-alpine

--name = nome que você quer identificar quando rodar o docker ps ou docker ps -a.
-p = porta a primeira é do container a segunda é a que sua máquina vai identificar.
-v = é onde você quer salvar dentro do container as informações (volumes).
-e = variáveis de ambiente, que no caso do postgress existe essas entre muitas outras.
postgres:14-alpine é a imagem que eu escolhi, geralmente as que possuem alpine são menores, mas entrega praticamente 100% do que é preciso.

Já no docker compose geralmente utilizado isso

version: '3.8'
services:
  db:
    image: postgres:14-alpine # imagem a ser utilizada
    restart: always # reinicia automáticamente quando acontece algum erro
    environment: # o -e do docker run supracitado
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    ports:
      - '5432:5432'
    volumes: 
      - db:/var/lib/postgresql/data
volumes:
  db:
    driver: local

Neste site você consegue ter mais informações: https://geshan.com.np/blog/2021/12/docker-postgres/

1

Pedro, no repositório do TabNews usamos Postgres com Docker Compose. O repositório ainda está no modo privado, mas caso queira o convite, acesse esse link.

Em paralelo, nosso docker-compose.development.yml possui o conteúdo abaixo e levanta dois serviços, o PostgresSQL de desenvolvimento (que puxa variáveis de ambiente do arquivo .env e um serviço de email utilizando o MailCatcher (que não tem nada a ver com sua dúvida).

version: '2.4'
services:
  postgres_dev:
    container_name: 'postgres-dev'
    image: 'postgres:14.1-alpine'
    env_file:
      - ../.env
    ports:
      - '54320:5432'
    volumes:
      - postgres_data:/data/postgres
    restart: unless-stopped
  mailcatcher:
    container_name: mailcatcher
    image: sj26/mailcatcher
    expose:
      - 1025
      - 1080
    ports:
      - 1025:1025
      - 1080:1080
volumes:
  postgres_data:

E o arquivo .env define várias variáveis de ambiente, principalmente as que o Container Docker do PostgresSQL utiliza (são as que começam por POSTGRES_):

POSTGRES_USER=local_user
POSTGRES_PASSWORD=local_password
POSTGRES_DB=tabnews
POSTGRES_HOST=localhost
POSTGRES_PORT=54320
DATABASE_URL=postgres://local_user:local_password@localhost:54320/tabnews
WEBSERVER_HOST=localhost
WEBSERVER_PORT=3000
EMAIL_SMTP_HOST=localhost
EMAIL_SMTP_PORT=1025
EMAIL_HTTP_HOST=localhost
EMAIL_HTTP_PORT=1080
EMAIL_USER=
EMAIL_PASSWORD=

E para rodar, utilizamos esse comando:

docker-compose -f infra/docker-compose.development.yml up -d

A flag -f define o endereço customizado do arquivo .yml e a flag -d roda o serviço em modo detached (sem prender a linha de comando).