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)