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

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

É 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

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

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

Explicação dos parâmetros usados no comando:
- POSTGRES_USER – nome de usuário do banco de dados (conta usada no serviço no SO);
- POSTGRES_PASSWORD – senha da conta do banco de dados;
- POSTGRES_DB – nome do banco de dados;
- -p – redirecionamento de portas do host para o contêiner (host:container);
- -v – criação de um volume virtual para armazenar os dados do serviço.
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

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

Ó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

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.