Docker

Este é essencialmente um “TLDR” da documentação oficial1. A ideia é fazer com que o leitor tenha uma ideia básica do funcionamento e dos conceitos chave de Docker.

O que é Docker?

“Docker é uma plataforma aberta para desenvolver, transportar e executar aplicações. Docker permite separar aplicações de sua infraestrutura, o que viabiliza entregar software mais rápido. Com Docker é possível gerenciar a infraestrutura do mesmo jeito que se gerenciam as aplicações. Ao tirar vantagem das metodologias de transporte, teste e implantação de código do Docker é possível reduzir significativamente o atraso ente escrever código e executar ele em produção.”

Resumindo a sopa de palavras:

Docker permite criar “caixinhas” que contém tudo o que é necessário para executar a aplicação, o que deixa esse software independente do sistema em que ele deve executar.

Como Docker funciona?

Docker Engine

Docker vs. Máquina Virtual

Resumindo conceitos importantes

Contêiner

  • Containers são pacotes de software leves, autônomos e executáveis que incluem tudo o que é necessário para executar um software, incluindo o código, ferramentas do sistema, bibliotecas do sistema e configurações.
  • Eles isolam o software de seu ambiente, garantindo que ele seja executado consistentemente, independentemente de onde seja implantado.
  • Os contêineres utilizam o kernel do sistema operacional hospedeiro e compartilham recursos com outros contêineres, tornando-os eficientes e portáteis.
  • É criado com base em uma imagem;

Imagem

  • Imagens são templates, somente leitura, que contém as instruções para criar um contêiner Docker.
  • Elas encapsulam o código do aplicativo junto com suas dependências, bibliotecas e ambiente de execução.
  • Uma imagem é criada utilizando um arquivo chamado Dockerfile, um arquivo de texto que especifica as etapas necessárias para construir um contêiner.
  • As imagens do Docker podem ser criadas a partir do zero ou podem ser baseadas em imagens existentes disponíveis no Docker Hub ou em outros registries

Registry

  • Registries são repositórios onde as imagens Docker são armazenadas e distribuídas.
  • O registry mais popular é o DockerHub2. Ele é público e o padrão para imagens Docker, onde os usuários podem encontrar e compartilhar imagens de contêineres.
  • Organizações também podem configurar registries privados para armazenar imagens próprias dentro de sua infraestrutura de rede. O C3SL tem seu próprio Docker Registry.
  • Registries permitem versionamento, colaboração e distribuição de imagens Docker em diferentes ambientes.
  • Abusando do termo: registries como o DockerHub são para o imagens Docker o que serviços como GitHub são para repositórios Git. Veja o versionamento de imagens como commits em um repositório. (Lembre que estamos abusando do termo)

Volume

  • Volumes são uma maneira de persistir dados gerados e usados por contêineres Docker. Sem volumes qualquer dado escrito no sistema de arquivos de um contêiner será perdido assim que o contêiner pare.
  • Eles fornecem um mecanismo para armazenar e gerenciar dados separadamente do ciclo de vida do container.
  • Os volumes podem ser compartilhados entre containers e também podem ser montados do sistema hospedeiro, permitindo que os dados persistam mesmo se o container for interrompido ou excluído.

Rede

  • As redes Docker permitem a comunicação entre contêineres em execução no mesmo host ou em vários hosts.
  • Por padrão, o Docker cria uma rede de ponte para cada host, permitindo que os contêineres se comuniquem entre si e com o mundo externo, que já basta para a maioria dos casos de uso. Há no total 73 tipos de redes Docker (6 drivers distintos).
  • Usuários podem criar redes personalizadas para isolar contêineres, controlar o tráfego e implementar políticas de rede.
  • As redes Docker fornecem recursos como resolução DNS, descoberta de serviço e segmentação de rede, melhorando a flexibilidade e escalabilidade de aplicativos containerizados.

Por que utilizar Docker?

“Never install locally”

Executar código legado

Testes de integração

…

Por que não utilizar Docker?

Dependências complexas

…

Aplicações de altíssimo desempenho

…

Aplicações pequenas, simples e isoladas

Última modificação June 10, 2025: chore: migra para Hugo (6db9969)