Docker - alandrade21/docsCompartilhados GitHub Wiki


Conceitos

Imagem é um conjunto de binários que compõem uma aplicação.

Container é uma instância de uma imagem rodando como um processo.

Registry é um repositório de imagens. Docker Hub é o registry da própria Docker.

Listando Containers

docker version retorna a versão do CLI e do engine e outros componentes.

docker info retorna informações detalhadas sobre o setup.

docker container ls lista todos os containers rodando. Mesma coisa de docker ps. Para listar todos os containers existentes, adiciona a opção -a.

docker container logs <nome> mostra o log gerado para o container cujo nome foi especificado. Geralmente esse container está rodando em background.

docker container top <nome> mostra os processos rodando dentro do container.

docker container inspect retorna um json com toda config do container.

docker container stats mostra dados de performance dos containers.

docker container port <nome> mostra todos os mapeamentos de rede.

docker system df mostra o uso de espaço em disco de todos os componentes criados pelo docker.

Start & Stop

docker container run --publish 80:80 --detach --name webhost nginx cria e roda um novo container.

A opção publish publica uma porta interna (segundo 80) e roteia todo tráfego de uma porta do host (primeiro 80) para a porta publicada. (host:container).

A opção detach libera o console e faz o container rodar em background. Essa opção retorna um id único para o container.

A opção name recebe um nome para o container que deve ser único.

nginx é o nome da imagem que será rodada.

docker container start <opções> roda um container existente.

docker container stop <início da id> para um container.

Rede

docker network ls lista todas as redes criadas. Bridge (ou docker0) é a sub-rede docker padrão.

Todos os containers conectados a uma mesma sub-rede conseguem conversar uns com os outros.

Faixa de IP padrão da bridge é 172.17.0.0/16. Mas é um anti-pattern buscar containers por IP. A alocação é dinâmica demais.

Docker automaticamente cria um DNS com o nome do container (mas não na rede bridge). Por isso é preferível criar uma nova sub-rede para seus containers.

A rede host é a rede da máquina base. Ligar um container na rede base é um problema de segurança.

A rede none é equivalente a remover a placa de rede de um container.

docker network inspect <rede> mostra todas as configs de uma rede e os containers conectados.

docker network create <nome> cria uma nova sub-rede.

Para conectar um container numa rede usa a opção --network <nome> nos comandos que rodam o container.

docker network connect e docker network disconnect conectam e desconectam duas redes.

Manutenção

docker system prune apaga tudo que não está sendo usado.

docker image prune apaga todas as imagens não utilizadas.

docker volume prune apaga todos os volumes não utilizados.

Volumes

Containers são imutáveis e efêmeros. Dados persistentes não devem estar dentro do file system do container.

Um volume é um local fora do container enxergado pelo container como parte de seu sistema de arquivos.

Quando a imagem escreve dados em algum lugar, esse lugar é indicado no docker file em uma entrada VOLUME.

Quando essas imagens são rodadas, eles volumes são mapeados automaticamente para diretórios criados dentro de /var/lib/docker (que é o local padrão do docker no linux), e identificar qual volume é de qual container (ou imagem) é bem difícil.

Para facilitar esse processo, cria-se volumes nomeados na subida do container, colocando a opção -v <nome-volume>:<caminho indicado na entrada VOLUME da imagem>.

Outra maneira é, ao invés de um nome, coloca um full path: -v /home/<user>/meu/caminho:/path/container.

⚠️ **GitHub.com Fallback** ⚠️