Docker - redes e volumes na prática
1. Retomando: de imagens bem construídas a containers que conversam entre si Os artigos anteriores desta série cobriram como criar imagens eficientes e rodar containers isolados. Mas uma aplicação real raramente é um único container: normalmente há uma API, um banco de dados, um cache, talvez uma fila de mensagens — cada um em seu próprio container, precisando se comunicar. E containers, por…
Containers são unidades de aplicação que podem trabalhar em conjunto, mas a comunicação e persistência de dados dentro deles podem ser desafiadoras. Para resolver esses problemas, Docker oferece duas principais funcionalidades: redes (communication between containers) e volumes (persistência de dados).
Por padrão, cada container possui seu próprio namespace de rede, isolado dos demais e do host. Isso significa que dois containers rodados independentemente não conseguem se encontrar automaticamente. Para permitir a comunicação entre containers, é necessário criar uma rede e conectar os containers desejados a ela. Isso é feito usando o comando `docker network create` para criar uma rede, e `docker run` com o parâmetro `--network` para conectar um container a uma rede específica.
Uma rede definida pelo usuário permite que os containers comuniquem-se usando nomes, em vez de IPs fixos. Isso é útil para aplicações containerizadas que utilizam strings de conexão, pois os desenvolvedores podem referenciar os serviços por nome em vez de IPs. Para gerenciar redes, é possível listar redes com `docker network ls`, visualizar detalhes de uma rede específica com `docker network inspect`, conectar ou desconectar containers de uma rede com `docker network connect` e `docker network disconnect`, respectivamente.
Os volumes são usados para persistir dados além da vida de um container. Por padrão, tudo que um processo escreve dentro de um container é destruído quando o container é removido. Para resolver esse problema, é possível criar volumes usando o comando `docker volume create`. Os volumes existem fora do ciclo de vida de qualquer container específico, permitindo que os dados sejam preservados mesmo quando o container é removido.
Para gerenciar volumes, é possível listar volumes com `docker volume ls`, inspecionar um volume específico com `docker volume inspect`, remover um volume com `docker volume rm` e remover todos os volumes não usados com `docker volume prune`.
Uma configuração típica envolve criar uma rede e um volume, e depois criar os containers da API e do banco de dados, conectando-os à rede e montando o volume para o container do banco de dados. Isso garante que a API e o banco de dados possam se comunicar e que os dados sejam persistentes, mesmo quando os containers são reinicializados.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.