Introdução
Docker é uma plataforma poderosa para construir, implantar e executar aplicações num ambiente de contentores. Compreender como gerir e testar a comunicação entre contentores Docker é crucial para a construção de aplicações robustas e escaláveis. Este tutorial irá guiá-lo através do processo de criação de uma rede Docker personalizada e de teste da comunicação entre contentores na mesma rede.
Compreendendo as Redes Docker
Docker fornece um sistema de rede embutido que permite que os contentores comuniquem entre si e com o mundo exterior. Docker suporta vários tipos de redes, incluindo:
Rede Bridge
O tipo de rede padrão no Docker é a rede bridge. Quando inicia um novo contendor, ele é automaticamente conectado à rede bridge padrão, a menos que especifique uma rede diferente. Os contentores na mesma rede bridge podem comunicar entre si usando os seus nomes de contendor ou endereços IP.
graph LR
A[Host] -- Rede Bridge --> B[Contendor 1]
A[Host] -- Rede Bridge --> C[Contendor 2]
B[Contendor 1] -- Rede Bridge --> C[Contendor 2]
Rede Host
A rede host permite que um contendor utilize diretamente a pilha de rede do host, contornando a rede Docker. Isto pode ser útil para aplicações sensíveis ao desempenho ou quando precisa de aceder a recursos de rede específicos do host.
Rede Overlay
A rede overlay é usada para conectar vários daemons Docker, permitindo que os serviços swarm comuniquem entre si. As redes overlay são normalmente usadas num ambiente Docker Swarm.
Rede Personalizada
Além das redes padrão, pode criar suas próprias redes personalizadas. As redes personalizadas permitem isolar contentores uns dos outros e controlar como eles comunicam. Isto é útil para construir aplicações multi-nível mais complexas.
graph LR
A[Host] -- Rede Personalizada --> B[Contendor 1]
A[Host] -- Rede Personalizada --> C[Contendor 2]
B[Contendor 1] -- Rede Personalizada --> C[Contendor 2]
Compreender as capacidades de rede do Docker é crucial para construir e gerir aplicações em contentores. Na próxima secção, exploraremos como criar uma rede personalizada e testar a comunicação entre contentores nessa rede.
Criando uma Rede Personalizada
Para criar uma rede personalizada no Docker, pode usar o comando docker network create. Este comando permite especificar o driver de rede, a sub-rede e outras opções de configuração.
Criar uma Rede Bridge Personalizada
Vamos criar uma rede bridge personalizada chamada my-network:
docker network create my-network
Pode verificar a criação da rede usando o comando docker network ls:
NETWORK ID NAME DRIVER SCOPE
a1b2c3d4e5f6 my-network bridge local
Conectar Contentores à Rede Personalizada
Agora, vamos iniciar dois contentores e conectá-los à rede personalizada my-network:
## Iniciar o contendor 1
docker run -d --name container1 --network my-network ubuntu:22.04 sleep infinity
## Iniciar o contendor 2
docker run -d --name container2 --network my-network ubuntu:22.04 sleep infinity
Pode inspecionar a rede e ver os contentores conectados usando o comando docker network inspect:
[
{
"Name": "my-network",
"Id": "a1b2c3d4e5f6",
"Created": "2023-04-18T12:34:56.789Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"container1_id": {
"Name": "container1",
"EndpointID": "container1_endpoint_id",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
},
"container2_id": {
"Name": "container2",
"EndpointID": "container2_endpoint_id",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
Agora que criámos uma rede personalizada e conectamos os contentores a ela, podemos testar a comunicação entre os contentores na próxima secção.
Testing Container Communication
Now that we have created a custom network and connected containers to it, we can test the communication between the containers.
Ping Between Containers
Let's start by pinging one container from the other:
## Enter the first container
docker exec -it container1 bash
## Ping the second container by name
ping -c 4 container2
The output should show that the containers can communicate with each other using their container names:
PING container2 (172.18.0.3) 56(84) bytes of data.
64 bytes from container2.my-network (172.18.0.3): icmp_seq=1 ttl=64 time=0.065 ms
64 bytes from container2.my-network (172.18.0.3): icmp_seq=2 ttl=64 time=0.057 ms
64 bytes from container2.my-network (172.18.0.3): icmp_seq=3 ttl=64 time=0.057 ms
64 bytes from container2.my-network (172.18.0.3): icmp_seq=4 ttl=64 time=0.057 ms
--- container2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3ms
rtt min/avg/max/mdev = 0.057/0.059/0.065/0.003 ms
Test TCP Communication
You can also test TCP communication between the containers. For example, you can run a simple HTTP server in one container and access it from the other container:
## Start a simple HTTP server in container1
docker exec -it container1 bash
python3 -m http.server 8000
## In another terminal, access the HTTP server from container2
docker exec -it container2 bash
curl http://container1:8000
The output in the second terminal should show the contents of the HTTP server running in the first container.
By testing the communication between containers on the same custom network, you can ensure that your containerized application components can properly interact with each other, which is essential for building and deploying complex, multi-service applications.
Resumo
Neste tutorial do Docker, aprenderá a criar uma rede personalizada, lançar contentores nessa rede e verificar a comunicação entre eles. No final deste guia, terá o conhecimento e as competências para testar a conectividade entre os seus contentores Docker, garantindo que as suas aplicações podem interagir sem problemas entre si dentro da mesma rede personalizada.



