21/10/2023

Docker - Networking

Existem 3 tipos de rede por defeito no Docker: Bridge, None e Host.

Bridge - docker run ubuntu

O Docker cria esta rede privada interna por defeito no anfitrião (host, máquina virtual ou computador físico onde está a correr o Docker) e todos os containers obtêm um IP interno normalmente na gama 172.17.x.x. Os containers ligam-se uns aos outros usando esta rede interna.

Para as redes externas se ligarem a estes containers é preciso mapear portos de rede entre si (anfitrião:80 <-->container:8080).


None - docker run ubuntu --network=none

Os containers estão desligados de qualquer rede estando completamente isolados.


Host - docker run ubuntu --network=host

Outra forma de redes externas obterem acesso aos containers é associar o container à rede do anfitrião quebrando-se desta forma o isolamento que existe entre o anfitrião e o container. Assim, qualquer aplicação a correr no container num porto qualquer fica imediatamente exposto ao exterior no mesmo porto.


Por defeito o Docker cria uma rede interna para os containers comunicarem entre si na gama 172.17.x.x. É possível criar outra rede interna, noutra gama, com o seguinte comando:

$ docker network create --driver bridge --subnet 10.10.0.0/16 custom-isolated-network


DNS

Os containers conseguem comunicar entre si usando o seu nome que por sua vez é um nome DNS no servidor de nomes embebido no Docker.

Quando queremos que uma aplicação num container, aceda a outra noutro container, no mesmo Docker Host, podemos usar o IP interno (por exemplo: 172.17.0.3 <--> 172.17.0.8). Mas a forma mais correta é usar o nome do container, uma vez que ao reiniciar o container, este pode não assumir o mesmo IP.

O servidor DNS embebido no Docker é executado com o IP 127.0.0.11.


0 comentários: