Banco de Dados

3 jan, 2019

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

Publicidade

Assim como diversas outras tecnologias relacionais, o PostgreSQL também oferece a possibilidade de criação e execução de instâncias por meio de containers Docker.

Esse tipo de prática viabiliza a montagem com velocidade de ambientes de Desenvolvimento e Testes, além de permitir a execução lado a lado de diferentes versões de um SGBD.

O que talvez diferencie o PostgreSQL de outras soluções, está na possibilidade de execução de sua ferramenta gráfica de administração a partir de um container. O pgAdmin 4 conta com uma imagem Docker baseada em Linux, e que pode ser baixada gratuitamente, facilitando assim a sua instalação e utilização em ambientes Windows, Linux e macOS.

Neste artigo, demonstrarei os passos necessários para a execução do PostgreSQL e do pgAdmin 4 através de containers. Caso tenha interesse em outros conteúdos sobre Docker, além de tecnologias como Docker Compose e Kubernetes, acesse também o seguinte artigo:

Obtendo as imagens necessárias

As imagens oficiais do PostgreSQL e do pgAdmin 4 se encontram no Docker Hub, podendo ser baixadas através do comando docker pull (ou ainda no momento da criação dos containers correspondentes, caso não se tenha efetuado o download das imagens em questão):

docker pull postgres

docker pull dpage/pgadmin4

A seguir, estão listadas essas imagens na máquina Linux (Ubuntu Desktop 18.04) que utilizei para os testes descritos neste artigo:

Criando uma network para execução dos containers

Networks (redes) englobando containers que possuam alguma relação entre si constituem mais uma das estruturas disponibilizadas pelo Docker. A fim de tornar possível o uso integrado de uma instância do PostgreSQL com o pgAdmin 4, será criada uma rede chamada postgres-network, com isto acontecendo através da seguinte instrução:

docker run --name teste-postgres --network=postgres-network -e "POSTGRES_PASSWORD=Postgres2018!" -p 5432:5432 -v /home/renatogroffe/Desenvolvimento/PostgreSQL:/var/lib/postgresql/data -d postgres

Ao executar o comando docker network ls, deverá aparecer então a rede postgres-network:

Criando um container para executar uma instância do PostgreSQL

O comando a seguir criará um novo container do PostgreSQL:

docker run --name teste-postgres --network=postgres-network -e "POSTGRES_PASSWORD=Postgres2018!" -p 5432:5432 -v /home/renatogroffe/Desenvolvimento/PostgreSQL:/var/lib/postgresql/data -d postgres

Em que:

  • O atributo name especifica o nome do container a ser gerado (teste-postgres)
  • Para o atributo network, foi definido o valor da rede criada na seção anterior (postgres-network)
  • No atributo POSTGRES_PASSWORD, foi indicada a senha do administrador (para o usuário default postgres)
  • O atributo -p indica a porta (5432) em que se dará a comunicação com o PostgreSQL, a qual será mapeada para a porta default (5432) deste SGBD dentro do container
  • Através do atributo -v, foi criado um volume, especificando assim o diretório no Ubuntu Desktop, em que serão gravados os arquivos de dados (/home/renatogroffe/Desenvolvimento/PostgreSQL)
  • Quanto ao atributo -d, este parâmetro determina que o container em questão será executado como um serviço em background
  • Temos indicada ainda a imagem utilizada como base para a geração do container (postgres)

Na próxima imagem é possível observar que o container com a instância do PostgreSQL está ativo (através da execução do comando docker ps):

No caminho /home/renatogroffe/Desenvolvimento/PostgreSQL do Ubuntu Desktop, estarão os arquivos de dados vinculados a esta instância (o diretório PostgreSQL será criado caso ainda não exista):

Criando um container para execução do pgAdmin 4

A instrução a seguir procederá com a geração do container para execução do pgAdmin 4:

docker run --name teste-pgadmin --network=postgres-network -p 15432:80 -e "PGADMIN_DEFAULT_EMAIL=renatogroff@yahoo.com.br" -e "PGADMIN_DEFAULT_PASSWORD=PgAdmin2018!" -d dpage/pgadmin4

Em que:

  • O atributo name indica o nome do container a ser criado (teste-pgadmin)
  • No atributo network foi atribuído o nome da rede utilizada na comunicação entre a instância do PostgreSQL e o pgAdmin (postgres-network)
  • O atributo -p especifica a porta (15432) em que acontecerá a comunicação com o pgAdmin 4, a qual será mapeada para a porta default (80) desta aplicação Web
  • No atributo PGADMIN_DEFAULT_EMAIL foi informado o e-mail de acesso ao pgAdmin
  • No atributo PGADMIN_DEFAULT_PASSWORD foi indicada ainda a senha de acesso ao pgAdmin 4
  • Temos especificada também a imagem empregada na geração do container (dpage/pgadmin4)
  • O comando docker ps listará este novo container havendo sucesso na criação do mesmo

Testes

Acessando a URL http://localhost:15432 aparecerá a tela para login no pgAdmin 4:

Observação: para aqueles que ficaram curiosos, esta versão do pgAdmin foi desenvolvida utilizando Python e JavaScript.

Efetuada a autenticação, teremos então o painel principal, com as funcionalidades que permitirão o gerenciamento de servidores e bases de dados:

Solicitando a inclusão de um novo servidor no pgAdmin 4:

Será necessário informar os parâmetros para conexão, conforme indicado na imagem a seguir.

Na aba General informar a identificação (Name) da conexão, bem como uma descrição da mesma (Comments):

Já na aba Connection, preencher as seguintes configurações:

  • Em Host name/address, informar o nome do container que corresponde à instância do PostgreSQL (teste-postgres)
  • Em Port, definir o valor 5432 (porta indicada para acesso ao container quando da sua criação)
  • No atributo Username será informado o usuário default do PostgreSQL (postgres), bem como a senha correspondente em Password (Postgres2018!).

Ao concluir esse processo, estaremos finalmente acessando a instância do PostgreSQL criada na seção anterior:

Referências