1. Introdução
O Docker Compose é uma ferramenta que nos permite definir e executar aplicativos Docker multi-container com facilidade. Com ele, podemos criar, executar e gerenciar aplicativos Docker de maneira fácil e eficiente. O PostgreSQL, por sua vez, é um dos bancos de dados relacionais mais populares do mundo. Ele oferece confiabilidade, escalabilidade e segurança, além de uma ampla variedade de recursos para gerenciamento de dados.
2. Instalação do Docker e Docker Compose
Antes de iniciar a configuração do PostgreSQL, é necessário ter o Docker e o Docker Compose instalados na máquina host. Ambos são necessários para criar e gerenciar o container PostgreSQL que armazenará os dados. Verifique a documentação do Docker e do Docker Compose para obter instruções de instalação específicas para o seu sistema operacional.
Se estiver utilizando o Ubuntu 22.04 voce pode seguir as instruções neste outro post, onde eu explico detalhadamente como realizar a instalação do Docker e Docker Compose.
3. Configuração do arquivo docker-compose.yml
O arquivo docker-compose.yml
é o arquivo de configuração principal do Docker Compose. Ele define todos os serviços que serão executados e suas configurações. Para configurar o serviço PostgreSQL, abra um editor de texto e crie um arquivo chamado docker-compose.yml
. Em seguida, adicione o seguinte código:
version: '3.9'
services:
postgresql:
container_name: postgresql-dev
image: postgres:15-alpine
restart: always
user: postgres
volumes:
- pgdata:/var/lib/postgresql/data
command:
- 'postgres'
# persist logs inside /var/lib/postgresql/data/log
# - '-c'
# - 'logging_collector=on'
# log all statement execution
- '-c'
- 'log_statement=all'
environment:
- LC_ALL=C.UTF-8
- POSTGRES_USER=$POSTGRES_USER
- POSTGRES_PASSWORD=$POSTGRES_PASSWORD
- POSTGRES_DB=$POSTGRES_DB
logging:
options:
max-size: 10m
max-file: '3'
ports:
- '15432:5432'
networks:
- postgres-dev
pgadmin:
container_name: pgadmin-dev
image: dpage/pgadmin4
restart: unless-stopped
volumes:
- pgadmin:/var/lib/pgadmin
environment:
PGADMIN_DEFAULT_EMAIL: $PGADMIN_DEFAULT_EMAIL
PGADMIN_DEFAULT_PASSWORD: $PGADMIN_DEFAULT_PASSWORD
PGADMIN_CONFIG_SERVER_MODE: 'False'
ports:
- 5050:80
networks:
- postgres-dev
volumes:
pgdata:
driver: local
driver_opts:
o: bind
type: none
device: /home/dukefs/docker-volumes/postgresql/dev/data
pgadmin:
driver: local
driver_opts:
o: bind
type: none
device: /home/dukefs/docker-volumes/pgadmin/dev
networks:
postgres-dev:
driver: bridge
Neste arquivo, definimos um serviço chamado postgresql
que utiliza a imagem oficial do PostgreSQL. O serviço é reiniciado sempre que o Docker é iniciado e configurado com um usuário, senha e banco de dados personalizados. Por fim, definimos um volume para persistir os dados do PostgreSQL na pasta /var/lib/postgresql/data
mapeado fisicamente para a máquina host definido pelo volume pgdata
.
Perceba que criamos um segundo serviço chamado pgadmin
, que é um serviço de gerenciamento de dados para o PostgreSQL. Este serviço que iremos utilizar para testar a conexão com o PostgreSQL mais à frente.
4. Criação dos serviços PostgreSQL e PgAdmin com Docker Compose
Agora que o arquivo docker-compose.yml
está configurado, podemos criar os serviços com o seguinte comando:
$ docker compose up -d
Este comando irá baixar as imagens necessárias, criar um container para cada serviço com base na imagem e iniciar os serviços.
5. Configuração de variáveis de ambiente para o serviço PostgreSQL
É importante definir variáveis de ambiente para configurar os serviços que possam utilizar de dados sensíveis como as senhas do PostgreSQL e do PgAdmin. Para fazer isso, vamos criar uma pasta chamada config
ao lado do nosso arquivo docker-compose.yml
.
$ mkdir config
Agora dentro da pasta config
vamos criar o arquivo .env.dev
com as variáveis de ambiente. Abra o arquivo .env.dev
e adicione as seguintes variáveis:
POSTGRES_USER=dukescode
POSTGRES_PASSWORD=1234567890
POSTGRES_DB=dukescode
PGADMIN_DEFAULT_EMAIL=admin@dukescode.com
PGADMIN_DEFAULT_PASSWORD=dukescode
DICA: Lembre-se de sempre utilizar senhas fortes mesmo para ambientes de desenvolvimento.
Agora para utilizamos as variáveis de ambiente definidas durante a criaçãos dos serviços basta executar o seguinte comando:
$ docker compose --env-file ./config/.env.dev up -d
6. Persistência de dados usando volumes Docker
Para garantir a persistência dos dados do PostgreSQL, definimos o volume pgdata
no arquivo docker-compose.yml
. Este volume
esta criando um mapeamento entre a pasta /var/lib/postgresql/data
do container com a pasta /home/dukefs/docker-volumes/postgresql/dev/data
do host.
Dessa forma, todos os dados do PostgreSQL são salvos na máquina host onde podemos definir nossa política de backup, esse mapeamento também garante que os dados serão mantidos mesmo que o container seja reiniciado ou removido.
7. Exposição do serviço PostgreSQL para outras aplicações
Por padrão, o serviço PostgreSQL é executado na porta 5432
. Para acessar o banco de dados a partir de outras aplicações, é necessário expor essa porta. Fizemos isso ao adicionar a seguinte linha ao arquivo docker-compose.yml
:
.
.
.
ports:
- '15432:5432'
.
.
.
Esta linha expõe a porta 5432
do container PostgreSQL para a porta 15432
da máquina host.
8. Teste da configuração do PostgreSQL com Docker Compose
Para testar se o serviço PostgreSQL está funcionando corretamente, abra o navegador e acesse a url do PgAdmin em http://localhost:5050
.
Você verá a tela a seguir.
imagem 1 - home do pgadmin
Agora vamos selecionar Add New Server e preencher o Name da connection na aba General.
imagem 2 - nome da conexão
Em seguida vamos selecionar a aba Connection e preencher as informações de conexão conforme informado no arquivo .env.dev
e clicar em Save.
imagem 3 - detalhes da conexão
Ao preencher todas as informações corretamente, você tera acesso aos dados de estatísticas do servidor PostgreSQL conforme a seguir.
imagem 4 - estatísticas do servidor postgresql
Conclusão e possíveis próximos passos
Neste artigo, aprendemos como configurar o PostgreSQL com persistência de dados usando Docker Compose. Com a configuração correta do arquivo docker-compose.yml
, podemos criar um ambiente PostgreSQL completo com persistência de dados em questão de minutos. A partir daqui, é possível explorar recursos adicionais do PostgreSQL, como backups, replicação, segurança avançada, entre outros.
Para finalizar, é importante ressaltar que a configuração de um ambiente de produção seguro e escalável envolve muitos outros fatores além do que foi abordado neste artigo. Recomendamos que você aprofunde seus conhecimentos em Docker e PostgreSQL antes de utilizar em ambientes de produção.
E é isso por hoje, pessoal!
Chegamos ao final de mais um artigo, espero que tenha sido útil e que você tenha aprendido algo novo.
Caso tenha alguma dúvida, comentário ou tenha encontrado algum erro, por favor, envie-me um email. Ficarei feliz em ouvir de você.
Se desejar receber novos artigos diretamente em seu e-mail, por favor, assine a nossa Newsletter. E se você já é um assinante, muito obrigado!
Aproveito e deixo um convite para nos conectarmos no Twitter e LinkedIn.
👋 Obrigado por ler até o final e até o próximo artigo !!!