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: