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-dataao diretório/var/lib/postgresql/datadentro 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 lspra garantir que a redetask-networkfoi criada. - Usa o comando
docker network inspect task-networkpra checar se todos os containers tão conectados nessa rede.
- Usa o comando
- 3. Verificando os volumes:
- Usa o comando
docker volume lspra garantir que o volumedb-datafoi criado. - Usa o comando
docker volume inspect db-datapra olhar os detalhes do volume.
- Usa o comando
GO TO FULL VERSION