04.03.2025

Como executar um contêiner Docker com PostgreSQL?

Quando se trabalha com vários serviços, surge frequentemente a questão de que a execução de aplicações pode afetar o funcionamento umas das outras, o que é especialmente crítico para serviços.

Isso ocorre porque eles fornecem processamento de consultas para clientes, como servidores de banco de dados, servidores de monitoramento de desempenho e outros, que podem ser interrompidos por processos vizinhos com os mesmos privilégios.

Para garantir integridade, disponibilidade e isolamento dos serviços, a tecnologia de containerização começou a ser amplamente utilizada. Neste artigo, veremos como implantar um banco de dados PostgreSQL usando contêineres Docker.

Resumo breve

O Docker é uma plataforma que automatiza a implantação de snapshots do sistema de arquivos predefinidos (imagens) e permite utilizá-los em ambientes isolados – os contêineres.

A virtualização ocorre por meio do kernel do sistema operacional, onde um ambiente totalmente separado de arquivos, rede e processador é criado e atribuído a um novo processo. Isso significa que um processo limitado no Docker, com ambientes anexados, executará todas as tarefas necessárias do serviço de forma isolada.

Instalação e configuração

Vamos começar com as dependências e softwares necessários para o serviço. Caso o Docker ainda não esteja instalado no seu sistema, execute o seguinte comando:

sudo apt install docker

Screenshot 1 — Instalação do Docker

Após a instalação, podemos iniciar o daemon do Docker e verificar seu funcionamento com os comandos abaixo. Em seguida, encontraremos a imagem necessária no repositório:

systemctl start docker && systemctl status docker
sudo docker search postgres

Screenshot 2 — Pesquisa de imagem

É importante instalar a imagem oficial do contêiner, identificável por um selo de verificação no lado direito da listagem.

Para baixar a imagem oficial do servidor de banco de dados PostgreSQL, utilize o seguinte comando:

docker pull postgres

Screenshot 3 — Download da imagem com Docker Pull

Isso fará o download da imagem do repositório remoto para o repositório local, com o qual o motor do Docker trabalhará posteriormente. Para verificar se a imagem foi baixada corretamente, usamos o seguinte comando:

docker image ls

Screenshot 4 — Docker Image

Atenção às permissões do sistema

Como o contêiner compartilha o kernel do sistema operacional do host, algumas funções não serão completamente isoladas. Por exemplo, a criação de processos exige permissões associadas a UID e GID, que podem coincidir com os usuários da máquina host. Isso significa que, ao montar pastas do host no contêiner e criar usuários, é necessário tomar cuidado para evitar conflitos de permissões.

Agora, podemos iniciar o contêiner PostgreSQL com o seguinte comando:

docker run -d \
--name nome-do-container \
--restart unless-stopped \
-e POSTGRES_USER=dbuser \
-e POSTGRES_PASSWORD=sua-senha \
-e POSTGRES_DB=sua-DB \
-p 5432:5432 \
-v nome-do-volume:/var/lib/postgresql/data \
postgres && docker ps

Screenshot 5 — Docker Run

Explicação dos parâmetros usados no comando:

A imagem do contêiner criará automaticamente um usuário e executará o banco de dados PostgreSQL com as configurações fornecidas. Agora, o contêiner (ou o processo restrito) se torna um espaço isolado que aceita chamadas de rede na porta 5432.
Isso significa que o servidor pode ser acessado via conexão de rede a partir de um dispositivo remoto, usando o endereço IP da máquina host e a porta encaminhada. Para verificar se o serviço está disponível, utilize o seguinte comando:

netstat -tulnp

Screenshot 6 — Socket

Conectando-se ao PostgreSQL no contêiner

Também podemos testar a conexão executando o cliente psql dentro do próprio contêiner:

docker exec -it nome-do-container psql -U dbuser -d sua-DB

Screenshot 7 — Connection

Ótimo, a conexão foi estabelecida! Agora podemos gerenciar o servidor de banco de dados, que está isolado do ambiente principal do sistema operacional.

Removendo o contêiner

Se for necessário parar e remover o contêiner e seus dados, execute o seguinte comando:

docker stop name-of-container && docker remove name-of-container && docker image remove postgres && docker volume remove name-of-volume

Screenshot 8 — Remove container

Após essa operação, o contêiner, a imagem e os dados armazenados serão completamente removidos.

Caso seja necessário reinstalar a imagem, o comando docker volume rm nome-do-volume pode ser omitido para preservar os bancos de dados já criados.

Neste artigo, demonstramos um método passo a passo para implantar um ambiente de contêiner utilizando uma imagem de banco de dados PostgreSQL.

Esse método delimita o espaço entre diferentes serviços, garantindo mais segurança, integridade dos dados e evitando conflitos entre dependências no sistema.