Este repositório contem docker-compose com o Postgres Padrão.
Deixo abaixo outros padrões para Projetos como Apache Airflow, Apache SUperset, e vou adicionando conforme e necessidade.
Então você pode realizar uma cópia do docker-compose.yml para cada projeto, ou se preferiri, iniciar um container com o postgres padrão e gerência você mesmo a criação dos usuários e bases de dados.
Um detalhe para a porta do container, caso opte por criar um docker-compose para cada projeto, você pode omitir a opção ports
, agora caso deseje acessar externamente os dados desse banc o é necessário uma porta diferente para cada container
Um detalhe importante é criar um volume e uma rede para cada postgres de cada aplicação caso deseje.
Abaixo alguns exemplos de configurações
Volumes
Voê pode criar seus volumes com o comando do docker ou informar o nome do volume no docker-compose para que o docker crie um volume anônimo conforme abaixo.
#Volumes anônimos criados pelo Docker no momento em que os serviõs são iniciados
version: '3.5'
service:
.
.
.
.
.
volumes:
postgres-superset:
#Volumes criados Externamnte com o comando "docker volume create nome_do_volume"
version: '3.5'
service:
.
.
.
.
.
volumes:
postgres-superset:
external: true
Redes
Algo importante são as redes do Docker.
Cada container sobe em uma rede privada, então se você deseja ter comunicação entre diversos containers é necessário criar redes externas e adiciona-las no docker-compose de cada serviço.
O Exemplo abaixo mostra uma configuração de redes entre um postgres separado para Apache Superset e o Apache Superset.
#Serviço de um postgres separado para o Apache Superset
version: '3.5'
services:
postgres-superset:
.
.
.
.
networks:
- postgres-superset
networks:
postgres-superset:
external: true
name: postgres-superset
#Serviço do Apache Superset
version: '3.5'
services:
superset:
.
.
.
.
networks:
- postgres-superset
networks:
postgres-superset:
external: true
name: postgres-superset
É importanta adicionar a rede postgres-superset no docker-compose do Apache Superset para que tenha comunicação entre os containers.
As redes são criadas externamento com o comando docker network create nome_da_rede
.
Com esta configuração o Docker é capaz de resolver nomes, transformando o nome do serviço postgres-superset
em um endereço válido dentro do Docker
Postgres para Apache Superset
version: '3.5'
services:
postgres-superset:
image: postgres:14
container_name: postgres-superset
environment:
POSTGRES_USER: superset
POSTGRES_PASSWORD: superset
POSTGRES_DB: superset
volumes:
- postgres-superset:/var/lib/postgresql/data
restart: always
networks:
- postgres-superset
ports:
- 5444:5432
volumes:
postgres-superset:
networks:
postgres-superset:
external: true
name: postgres-superset
Postgres para Apache Airflow
version: '3.5'
services:
postgres-airflow:
image: postgres:14
container_name: postgres-airflow
environment:
POSTGRES_USER: airflow
POSTGRES_PASSWORD: airflow
POSTGRES_DB: airflow
volumes:
- postgres-airflow:/var/lib/postgresql/data
restart: always
networks:
- postgres
ports:
- 5444:5432
volumes:
postgres-airflow:
networks:
postgres-airflow:
external: true
name: postgres-airflow