PostgreSQL + pgAdmin 4 + Docker Compose: montando rapidamente um ambiente para uso

Renato Groffe
4 min readJan 6, 2019

Em um artigo recente abordei a criação de containers Docker para a execução do pgAdmin 4 e de uma instância do PostgreSQL:

PostgreSQL + Docker: executando uma instância e o pgAdmin 4 a partir de containers

A solução em questão permite, sem sombra de dúvidas, a rápida montagem de um ambiente que dependa das tecnologias de bancos de dados mencionadas (PostgreSQL e pgAdmin 4). Contudo, 3 comandos foram executados neste procedimento a fim de criar as estruturas necessárias: 2 containers, além de uma network que possibilitasse a comunicação entre tais elementos.

E como tornar tudo isto mais fácil ainda, se possível através de um único comando e gerando até mesmo um script reutilizável?

O Docker Compose é a resposta para simplificar esse processo. Sua utilização dependerá primeiramente da criação de um arquivo chamado docker-compose.yml, o qual conterá as configurações para a geração de containers e networks.

Importante destacar que o Docker Compose é um serviço do próprio Docker voltado à criação e execução conjunta dos múltiplos containers de uma solução. Tal capacidade contribui para facilitar o deployment de um projeto em diferentes ambientes.

Na listagem a seguir está o conteúdo do arquivo docker-compose.yml que permitirá a criação do ambiente citado (PostgreSQL + pgAdmin 4). Os testes descritos neste artigo acontecerão no Ubuntu Desktop 18.04:

  • O serviço teste-postgres-compose se refere à instância do PostgreSQL a ser criada para acesso na porta 15432;
  • Já o serviço teste-pgadmin-compose corresponde ao container que permitirá a execução do pgAdmin 4 (imagem dpage/pgadmin4) na porta 16543;
  • Nas seções environment de teste-pgadmin-compose e teste-postgres-compose foram definidas configurações (variáveis de ambientes) necessárias para a geração dos 2 containers;
  • As imagens referenciadas serão baixadas caso ainda não existam no ambiente a partir do qual o Docker Compose foi executado;
  • Foi especificado ainda um volume para teste-postgres-compose, indicando assim o diretório no Ubuntu Desktop em que serão gravados os arquivos de dados (/home/renatogroffe/Desenvolvimento/Docker-Compose/PostgreSQL);
  • Por meio da network postgres-compose-network acontecerá a comunicação entre os containers teste-pgadmin-compose e teste-postgres-compose.

O comando docker-compose up -d procederá com a criação da network e dos containers esperados, efetuando inclusive o download das imagens se as mesmas ainda não existirem na máquina considerada (não foi o caso deste exemplo):

Com a instrução docker network ls podemos confirmar que a rede postgres-compose-network foi criada com sucesso (como ambientepostgresql_postgres-compose-network, resultado da concatenação com o nome do diretório em que se encontra o arquivo docker-compose.yml):

Já o comando docker-compose ps indicará que os containers do PostgreSQL (porta 15432) e do pgAdmin 4 (porta 16543) foram gerados corretamente e se encontram em execução:

Na próxima imagem estão os arquivos e diretórios criados para o volume definido no arquivo docker-compose.yml:

Testando o ambiente

Um teste de acesso via browser ao pgAdmin 4 (http://localhost:16543) exibirá a tela inicial desta solução:

Fornecendo as credenciais de acesso que estavam no arquivo docker-compose.yml aparecerá então o painel de gerenciamento do pgAdmin 4:

Ao criar a conexão para acesso à instância do PostgreSQL levar em conta as seguintes considerações:

  • Em Host name/address informar o nome do container que corresponde à instância do PostgreSQL (teste-postgres-compose);
  • Em Port definir o valor 5432 (porta default de acesso ao container e disponível a partir da rede postgres-compose-network; não informar a porta em que o PostgreSQL foi mapeado no host);
  • No atributo Username será informado o usuário default do PostgreSQL (postgres), bem como a senha correspondente em Password (Postgres2019!).

Na próxima imagem é possível observar que a conexão ao PostgreSQL via pgAdmin 4 ocorreu com sucesso:

E aproveito este espaço para deixar aqui ainda um convite.

Dia 08/01/2019 (terça-feira) às 21h30 — horário de Brasília — teremos o primeiro hangout do ano de 2019 no Canal .NET. Desta vez receberemos o MVP Luiz Carlos Faria, que fará uma apresentação justamente sobre o uso do Portainer como solução de administração e troubleshooting de containers Docker.

Para efetuar a sua inscrição acesse a página do evento no Meetup. A transmissão acontecerá via YouTube, em um link a ser divulgado em breve.

Sign up to discover human stories that deepen your understanding of the world.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker

Responses (12)

Write a response

Hey there, thank you so much for such an easy explanation. I am new to docker and this helped me a lot.

Como não perder a configuração do pgadmin depois do restart no docker? Assim como é feito na base usando volumes pra gavar os dados em uma pasta externa

Muito obrigado pela explicação Renato, muito didático! Estou, infelizmente, tendo o erro abaixo, conseguiria me auxiliar, por favor? Obrigado desde já!
docker compose yaml:
services:
teste-postgres-compose:
image: postgres
environment:
POSTGRES_USER…