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:
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.
Deixo aqui alguns dos comandos (básico) mais usados no Docker:
$ docker ps
$ docker ps -a
$ docker rm CONTAINER
$ docker rmi IMAGEM
$ docker run ubuntu
# -it disponibiliza uma shell interativa $ docker run -it ubuntu $ docker run -it ubuntu bash
$ docker run -d centos sleep 500
$ docker images
$ docker pull nginx
$ docker run -d ubuntu sleep 500
$ docker exec CONTAINER_ID cat /etc/*release*
$ docker stop $(docker ps -aq)
$ docker rm $(docker ps -aq)
$ docker run -i CONTAINER
# -p mapeia o porto 80 do anfitrião para o 5050 do container nginx $ docker run -p 80:5050 nginx $ docker run -p 3306:3306 mysql
# Executa o container mysql mapeando a dir /var/lib/mysql na dir /dados/mysql do anfitrião(host), de forma a persistir os dados: $ docker run -v /dados/mysql:/var/lib/mysql mysql
# Obter informações do container no formato json: $ docker inspect CONTAINER