5.1 Configurando Redes
Bora dar uma olhada detalhada em como configurar redes e volumes para nossa aplicação com múltiplos containers. Isso vai garantir a interação correta entre os serviços e o armazenamento duradouro dos dados.
Redes Docker permitem que os containers se comuniquem entre si. Na nossa aplicação, vamos usar a rede bridge
pra conectar o frontend, o backend e o banco de dados.
Criando a rede
Já definimos a rede task-network
no arquivo docker-compose.yml
:
networks:
task-network:
driver: bridge
Onde:
- task-network: nome da rede que será usada para a interação entre os containers.
- driver:
bridge
: tipo da rede. A redebridge
é padrão pra comunicação entre containers num único host.
Conectando os serviços à rede
Conectamos todos os serviços a essa rede no arquivo docker-compose.yml
. Bora verificar se cada serviço tá conectado certinho:
Exemplo para o frontend:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
Exemplo para o backend:
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
Exemplo para o banco de dados:
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
5.2 Configurando volumes
Os volumes do Docker permitem salvar os dados dos containers no sistema host, garantindo seu armazenamento permanente. No nosso aplicativo, vamos usar um volume para armazenar os dados do banco de dados PostgreSQL.
Criando o volume
Já definimos o volume db-data
no arquivo compose.yaml
:
volumes:
db-data:
Onde:
-
db-data
: nome do volume que será usado para armazenar os dados do banco de dados PostgreSQL.
Conectando o volume ao serviço de banco de dados
Conectamos o volume db-data
ao serviço de banco de dados no arquivo docker-compose.yml
. Certifique-se de que isso foi feito corretamente:
Exemplo para o banco de dados:
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
Onde:
-
volumes
: define quais volumes serão conectados ao container. -
db-data:/var/lib/postgresql/data
: conecta o volumedb-data
ao diretório/var/lib/postgresql/data
dentro do container. Esse diretório é usado pelo PostgreSQL para armazenar os dados.
5.3 Arquivo completo compose.yaml
Pra deixar claro e completo, aqui tá o arquivo completo compose.yaml
, incluindo as configs de redes e volumes:
version: '3'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
networks:
task-network:
driver: bridge
volumes:
db-data:
Verificando as configs de redes e volumes
Depois de configurar as redes e os volumes, garante que tá tudo certo e funcionando direitinho:
- 1. Subindo os containers:
Terminal
docker compose up
- 2. Verificando a rede:
- Usa o comando
docker network ls
pra garantir que a redetask-network
foi criada. - Usa o comando
docker network inspect task-network
pra checar se todos os containers tão conectados nessa rede.
- Usa o comando
- 3. Verificando os volumes:
- Usa o comando
docker volume ls
pra garantir que o volumedb-data
foi criado. - Usa o comando
docker volume inspect db-data
pra olhar os detalhes do volume.
- Usa o comando
GO TO FULL VERSION