Introdução
Neste laboratório, você aprenderá como gerenciar redes de contêineres de forma eficaz usando o comando docker network connect. Você explorará como conectar um contêiner em execução a uma rede existente, conectar um contêiner a uma rede durante sua inicialização, especificar um endereço IP estático para um contêiner em uma rede e criar aliases de rede para contêineres, facilitando a comunicação.
Através de exercícios práticos, você obterá experiência prática na manipulação de configurações de rede de contêineres, permitindo que você construa aplicações Dockerizadas mais robustas e interconectadas.
Conectar um contêiner em execução a uma rede
Nesta etapa, você aprenderá como conectar um contêiner Docker em execução a uma rede existente. Isso é útil quando você tem um contêiner que já está em execução e precisa que ele se comunique com outros contêineres ou serviços em uma rede específica.
Primeiro, vamos criar uma nova rede que usaremos para esta demonstração. Criaremos uma rede bridge chamada my-network.
docker network create my-network
Você deve ver uma saída semelhante a esta, indicando que a rede foi criada com sucesso:
<network_id>
Agora, vamos executar um contêiner simples que não está inicialmente conectado a my-network. Executaremos um contêiner alpine em modo detached (-d) e o nomearemos my-container.
docker run -d --name my-container alpine sleep infinity
A saída será o ID do contêiner:
<container_id>
Para verificar se o contêiner está em execução e não conectado a my-network, você pode inspecionar as configurações de rede do contêiner.
docker inspect my-container --format '{{json .NetworkSettings.Networks}}'
A saída mostrará a rede bridge padrão, mas não my-network:
{
"bridge": {
"IPAMData": null,
"IPAddress": "<ip_address>",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "<mac_address>",
"DriverOpts": null
}
}
Agora, vamos conectar o my-container em execução à my-network usando o comando docker network connect.
docker network connect my-network my-container
Não haverá saída se o comando for bem-sucedido.
Para verificar se o contêiner agora está conectado a my-network, inspecione as configurações de rede do contêiner novamente.
docker inspect my-container --format '{{json .NetworkSettings.Networks}}'
Desta vez, a saída deve mostrar tanto a rede bridge padrão quanto my-network:
{
"bridge": {
"IPAMData": null,
"IPAddress": "<ip_address>",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "<mac_address>",
"DriverOpts": null
},
"my-network": {
"IPAMData": null,
"IPAddress": "<ip_address>",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "<mac_address>",
"DriverOpts": null
}
}
Finalmente, vamos limpar o contêiner e a rede que criamos.
docker stop my-container
docker rm my-container
docker network rm my-network
Conectar um contêiner a uma rede ao iniciar
Nesta etapa, você aprenderá como conectar um contêiner Docker a uma rede específica quando você o inicia. Esta é a maneira mais comum de garantir que seus contêineres estejam na rede correta desde o início.
Primeiro, vamos criar uma nova rede chamada app-network que usaremos.
docker network create app-network
Você deve ver uma saída semelhante a esta, indicando que a rede foi criada com sucesso:
<network_id>
Agora, executaremos um contêiner nginx simples e o conectaremos à app-network diretamente ao iniciá-lo. Usamos a flag --network seguida pelo nome da rede. Também o executaremos em modo detached (-d) e o nomearemos web-server.
docker run -d --name web-server --network app-network nginx
A saída será o ID do contêiner:
<container_id>
Para verificar se o contêiner está conectado a app-network, você pode inspecionar as configurações de rede do contêiner.
docker inspect web-server --format '{{json .NetworkSettings.Networks}}'
A saída deve mostrar que o contêiner está conectado a app-network:
{
"app-network": {
"IPAMData": null,
"IPAddress": "<ip_address>",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "<mac_address>",
"DriverOpts": null
}
}
Observe que, desta vez, o contêiner está conectado apenas a app-network e não à rede bridge padrão, porque especificamos a rede durante o comando docker run.
Finalmente, vamos limpar o contêiner e a rede.
docker stop web-server
docker rm web-server
docker network rm app-network
Especificar o endereço IP para um contêiner em uma rede
Nesta etapa, você aprenderá como atribuir um endereço IP estático específico a um contêiner ao conectá-lo a uma rede. Por padrão, o Docker atribui endereços IP dinamicamente da sub-rede da rede. No entanto, em alguns casos, você pode precisar que um contêiner tenha um endereço IP previsível.
Primeiro, vamos criar uma nova rede com uma sub-rede especificada. Criaremos uma rede bridge chamada static-net com a sub-rede 172.20.0.0/16.
docker network create --subnet 172.20.0.0/16 static-net
Você deve ver uma saída semelhante a esta, indicando que a rede foi criada com sucesso:
<network_id>
Agora, executaremos um contêiner alpine e o conectaremos ao static-net, especificando um endereço IP estático usando a flag --ip. Atribuiremos o endereço IP 172.20.0.10. Executaremos em modo detached (-d) e o nomearemos static-ip-container.
docker run -d --name static-ip-container --network static-net --ip 172.20.0.10 alpine sleep infinity
A saída será o ID do contêiner:
<container_id>
Para verificar se o contêiner possui o endereço IP estático atribuído em static-net, inspecione as configurações de rede do contêiner.
docker inspect static-ip-container --format '{{json .NetworkSettings.Networks}}'
A saída deve mostrar o contêiner conectado a static-net com o endereço IP especificado:
{
"static-net": {
"IPAMData": null,
"IPAddress": "172.20.0.10",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "<mac_address>",
"DriverOpts": null
}
}
Finalmente, vamos limpar o contêiner e a rede.
docker stop static-ip-container
docker rm static-ip-container
docker network rm static-net
Criar aliases de rede para um contêiner
Nesta etapa, você aprenderá como criar aliases de rede para um contêiner. Aliases de rede fornecem nomes alternativos que outros contêineres na mesma rede podem usar para resolver e se conectar ao contêiner. Isso é útil para a descoberta de serviços dentro de uma rede Docker.
Primeiro, vamos criar uma nova rede chamada alias-network.
docker network create alias-network
Você deve ver uma saída semelhante a esta, indicando que a rede foi criada com sucesso:
<network_id>
Agora, executaremos um contêiner nginx e o conectaremos ao alias-network, atribuindo um alias de rede usando a flag --network-alias. Atribuiremos o alias web. Executaremos em modo detached (-d) e o nomearemos alias-container.
docker run -d --name alias-container --network alias-network --network-alias web nginx
A saída será o ID do contêiner:
<container_id>
Para verificar se o contêiner possui o alias de rede, inspecione as configurações de rede do contêiner.
docker inspect alias-container --format '{{json .NetworkSettings.Networks}}'
A saída deve mostrar o contêiner conectado a alias-network e listar o alias de rede:
{
"alias-network": {
"IPAMData": null,
"IPAddress": "<ip_address>",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "<mac_address>",
"Aliases": ["web", "alias-container"],
"DriverOpts": null
}
}
Observe a parte "Aliases":["web","alias-container"] na saída. O Docker adiciona automaticamente o nome do contêiner como um alias também.
Agora, vamos executar outro contêiner na mesma rede e tentar pingar o alias-container usando seu alias de rede web. Executaremos um contêiner alpine interativamente (-it) em alias-network.
docker run -it --rm --network alias-network alpine ping -c 3 web
Você deve ver uma saída indicando pings bem-sucedidos para o alias-container usando o alias web:
PING web (<ip_address>): 56 data bytes
64 bytes from <ip_address>: seq=0 ttl=64 time=0.xxx ms
64 bytes from <ip_address>: seq=1 ttl=64 time=0.xxx ms
64 bytes from <ip_address>: seq=2 ttl=64 time=0.xxx ms
--- web ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.xxx/0.xxx/0.xxx/0.xxx ms
Isso demonstra que os contêineres na mesma rede podem resolver e se comunicar uns com os outros usando aliases de rede.
Finalmente, vamos limpar os contêineres e a rede.
docker stop alias-container
docker rm alias-container
docker network rm alias-network
Resumo
Neste laboratório, você aprendeu como gerenciar redes de contêineres Docker usando o comando docker network connect. Você praticou a conexão de um contêiner em execução a uma rede existente, demonstrando como adicionar dinamicamente conectividade de rede a um contêiner após ele ter sido iniciado.
Além disso, você explorou como conectar um contêiner a uma rede específica no momento de sua criação, especificar um endereço IP estático para um contêiner em uma rede e criar aliases de rede para fornecer nomes alternativos para um contêiner dentro de uma rede, aprimorando a capacidade de descoberta e comunicação entre contêineres.



