Fala galera tudo bem ? neste exemplo eu vou exemplificar como eu consigo rodar o Postgres no Docker de forma simples e gerenciar pelo Docker Compose.
Este considerando que você tenha o Docker devidamente configurado em seu computador.
Entendendo o arquivo
Estamos utilizando a versão do Docker-Compose 2 para nossa aplicação
Mais abaixo estamos mapeando um volume chamado dados que será onde os dados do Postgres será persistido.
Mais abaixo em image: estou considerando a versão 9.6 do Postgres para nossa aplicação. Veja que dentro da variavéis de ambiente estou setando o valor
POSTGRES_HOST_AUTH_METHOD: "trust" pois é necessário para que nosso container não apresente problemas na inicialização.
Em volumes temos
volumes:
- dados:/var/lib/postgresql/data
- ./scripts:/scripts
- ./scripts/init.sql:/docker-entrypoint-initdb.d/init.sql
onde dados onde ficará os arquivos persistidos do banco de dados será mapeado para dentro da pasta padrão do Postgres dentro do container
Scripts onde ficará nossos scripts sql de inicialização ficará mapeado para dentro de /scripts no container
e o script ./scripts/init.sql é mapeado para dentro de /docker-entrypoint-initdb.d/init.sql. Isto significa que toda vez que nossa container inicializar ele tentará executar este script sql de inicialização.
Executando comandos do Postgres no container através da máquina host
docker-compose exec db psql -U postgres -c '\l'
se pegarmos o comando acima poderemos ver que o comando docker-compose irá executar o comando db psql com o usuário postgress em busca do comando \l que irá listar todas as tabelas criadas na inicialização