Voltar para artigos
Artigo

Introdução aos Containers e Docker

25/01/2025
Guilherme Rossi Kirsten
4 min de leitura

Um container é uma unidade padronizada de software que empacota o código e todas as suas dependências, permitindo que uma aplicação seja executada de ...

Introdução aos Containers e Docker

Um container é uma unidade padronizada de software que empacota o código e todas as suas dependências, permitindo que uma aplicação seja executada de forma rápida e consistente em qualquer ambiente.

O que são Containers

Um container é uma unidade padronizada de software que empacota o código e todas as suas dependências, permitindo que uma aplicação seja executada de forma rápida e consistente em qualquer ambiente. Isso significa que, independentemente do sistema operacional ou das configurações específicas do host, o container fornecerá um ambiente isolado e consistente para a aplicação.

Principais Características dos Containers

  • Imutabilidade: Containers são construídos a partir de imagens que são essencialmente snapshots imutáveis. Isso garante que o ambiente de execução seja o mesmo em qualquer lugar que o container seja implantado.
  • Isolamento de Processos e Recursos Computacionais: Cada container opera em um espaço de usuário isolado, com seu próprio sistema de arquivos, rede e recursos de processamento.
  • Leveza: Ao contrário das máquinas virtuais, os containers são executados como processos no sistema operacional do host, sem a necessidade de um sistema operacional completo para cada instância.
  • Utilização dos Recursos do Kernel do SO: Containers compartilham o kernel do sistema operacional do host.
  • Ilusão de SO Próprio: Através de tecnologias como namespaces e cgroups, o container é "enganado" para acreditar que possui seu próprio sistema operacional.
  • Visibilidade Limitada de Processos: Um container só pode ver e interagir com processos dentro do seu próprio espaço.
  • Inicialização Rápida: Containers podem ser iniciados e parados quase instantaneamente.
  • Utilização de Imagens Imutáveis: Containers são criados a partir de imagens imutáveis, garantindo consistência entre ambientes.
  • Predominância no Linux: A maioria das tecnologias de containerização foi desenvolvida para o Linux.
  • "Na Minha Máquina Funciona": Containers mitigam discrepâncias entre ambientes de desenvolvimento e produção.

Containers vs. Máquinas Virtuais

Máquinas Virtuais (VMs)

  • Sistema Operacional Completo: Cada VM executa um SO completo.
  • Overhead Maior: Consomem mais recursos de memória e CPU.
  • Tempo de Inicialização Mais Longo: Pode levar minutos.
  • Isolamento Forte: Alto nível de isolamento entre VMs.

Containers

  • Compartilhamento do Kernel do Host: Isolam apenas o aplicativo e suas dependências.
  • Leveza e Eficiência: Sem a necessidade de um SO completo.
  • Inicialização Instantânea: Milissegundos.
  • Isolamento de Aplicativos: Utilizam namespaces e cgroups.
  • Alta Densidade: Permitem execução de muitos containers em um host.

Docker como Container Runtime

História do Docker

  • Origem: Criado em 2013 pela dotCloud.
  • Open Source: Tornou-se código aberto e popularizou a containerização.
  • Evolução para Docker Inc.: Focada no desenvolvimento e suporte ao Docker.

Docker Engine, Docker CE e Docker Desktop

  • Docker Engine: Responsável por criar, gerenciar e executar containers.
  • Docker CE (Community Edition): Versão gratuita e open source.
  • Docker Desktop: Ambiente completo para desenvolvimento Docker em macOS e Windows.

Diferença entre Docker CE/Engine e Docker Desktop

  • Docker CE/Engine: Tecnologia base para containers.
  • Docker Desktop: Interface integrada para desenvolvimento.

Funcionamento do Docker

  • Utilização de Recursos do Linux: Usa namespaces e cgroups.
  • Ferramenta 360: Gerencia containers, redes, volumes e imagens.
  • Arquitetura Cliente-Servidor:
  • Daemon Docker: Gerencia containers, imagens, redes e volumes.
  • Cliente Docker: CLI para interação com o daemon.
  • Ponto Único de Falha (SPoF): O daemon Docker gerencia tudo; se falhar, todos os containers podem ser afetados.

Root vs. Rootless

  • Modo Root: Requer privilégios de root.
  • Modo Rootless: Permite execução sem acesso root para maior segurança.

Observações sobre a Docker Inc.

  • Contribuição para a Comunidade: Popularizou os containers e contribui com projetos open source.
  • Modelos de Negócio: Oferece versões gratuitas e empresariais.
  • Ecossistema Rico: Mantém o Docker Hub e outras ferramentas complementares.

Open Container Initiative (OCI)

A Open Container Initiative (OCI) é um projeto fundado em 2015 pela Docker Inc. e outras empresas para criar padrões abertos para containers e runtimes.

Principais Objetivos da OCI

  • Estabelecer Padrões: Criar especificações padronizadas para containers.
  • Interoperabilidade: Permitir execução de containers em diferentes plataformas.
  • Neutralidade: Garantir que padrões sejam gerenciados pela comunidade.

Importância da OCI

  • Evitar Lock-in: Desenvolvedores não ficam presos a uma única ferramenta.
  • Facilitar a Inovação: Permite que novas ferramentas sejam desenvolvidas sobre padrões comuns.
  • Adoção Ampla: Docker e Kubernetes seguem os padrões OCI, promovendo compatibilidade.
Ver todos os artigos