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.
Estou tentanto fazer um projeto no estou utilizando o Windows com Docker e Docker Compose com Postgres mais nao estou conseguindo alguem pode ajudar.
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/
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).