CodeGym /Cursos /Docker SELF /Montagem de volumes e redes

Montagem de volumes e redes

Docker SELF
Nível 16 , Lição 1
Disponível

7.1 Montagem de Volumes

Montar volumes e redes no Docker Compose permite criar aplicações multicontêiner flexíveis e eficientes. Os volumes são usados para armazenar dados que precisam ser mantidos fora dos contêineres, enquanto as redes permitem a comunicação entre eles. Nesta aula, a gente vai explorar em detalhes como usar volumes e redes no Docker Compose.

Os volumes no Docker permitem que você armazene dados fora dos contêineres, garantindo sua disponibilidade mesmo depois que os contêineres forem parados ou deletados. Isso é particularmente útil para armazenar dados de bancos de dados, arquivos de log e outros dados que precisam ser persistentes.

Tipos de Volumes:

  • Volumes Nomeados (Named Volumes): são gerenciados pelo Docker e armazenados em um diretório especial no host.
  • Volumes Vinculados (Bind Mounts): são montados no contêiner a partir de um diretório específico no host.

Definição de Volumes no Docker Compose

Exemplo de Volumes Nomeados

Neste exemplo, foi criado um volume nomeado chamado postgres-data, que é montado no diretório /var/lib/postgresql/data dentro do contêiner db.

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  postgres-data:

Exemplo de Volumes Vinculados

Neste exemplo, os diretórios e arquivos locais nginx.conf e html são montados no contêiner web como volumes vinculados.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/usr/share/nginx/html
<

7.2 Montagem de redes

Redes no Docker Compose permitem que os containers interajam uns com os outros. Cada container pode ser conectado a uma ou mais redes, o que garante isolamento e controle de tráfego.

Tipos de redes:

  • Redes bridge (Bridge): por padrão, os containers se conectam a uma rede bridge, que permite interação entre eles no mesmo host.
  • Redes overlay (Overlay): usadas para interação entre containers executados em hosts diferentes dentro de um cluster Docker Swarm.
  • Plugins de rede (Network Plugins): permitem usar drivers de terceiros para configurações mais complexas.

Exemplo de criação e uso de redes personalizadas

Neste exemplo, são criadas duas redes personalizadas: front-end e back-end. O serviço app está conectado a ambas as redes, o serviço web somente a front-end, e o serviço db somente a back-end.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    networks:
      - front-end

  app:
    image: myapp:latest
    networks:
      - front-end
      - back-end

  db:
    image: postgres:latest
    networks:
      - back-end

networks:
  front-end:
  back-end:

Dicas práticas:

  1. Uso de volumes nomeados: volumes nomeados são gerenciados pelo Docker e oferecem facilidade no uso e na gestão de dados. Esses volumes podem ser conectados a vários serviços ao mesmo tempo. Por exemplo, o serviço de backend grava logs, enquanto o serviço de monitoramento analisa esses logs e notifica quando erros de nível error são detectados.
  2. Separação de redes: usar várias redes permite isolar diferentes partes da aplicação e controlar a interação delas.
  3. Armazenamento de arquivos de configuração: use volumes bind para montar arquivos de configuração, o que facilita a alteração de configurações sem reconstruir as imagens.
  4. Segurança das redes: restrinja o acesso às redes, permitindo que apenas os containers necessários interajam, o que aumenta a segurança da aplicação.

7.3 Exemplos de uso de volumes e redes

Exemplos de uso de volumes e redes no Docker Compose:

Exemplo 1: Aplicação com servidor web e banco de dados

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/usr/share/nginx/html
    networks:
      - webnet

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - webnet

volumes:
  db-data:

networks:
  webnet:

Nesse exemplo:

  • O servidor web nginx e o banco de dados PostgreSQL estão conectados a uma única rede webnet, permitindo que interajam. Caso exista apenas uma rede, ela não precisa ser especificada — será criada uma rede padrão.
  • Os dados do banco de dados são armazenados em um volume nomeado db-data, garantindo que sejam preservados durante reinicializações dos containers.

Exemplo 2: Aplicação com múltiplos níveis

Yaml

version: '3.8'

services:
  frontend:
    image: myfrontend:latest
    networks:
      - front-tier
      - back-tier

  backend:
    image: mybackend:latest
    networks:
      - back-tier
    volumes:
      - backend-data:/var/lib/backend

  database:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - back-tier

volumes:
  backend-data:
  db-data:

networks:
  front-tier:
  back-tier:

Nesse exemplo:

  • Foram criadas duas redes: front-tier e back-tier.
  • O serviço frontend está conectado a ambas as redes, permitindo que ele interaja tanto com o backend quanto com clientes externos.
  • Os serviços backend e database estão conectados apenas à rede back-tier, garantindo isolamento e interação entre eles.
  • Os dados dos serviços backend e database são armazenados em volumes nomeados separados backend-data e db-data.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION