Os Storage Drivers do Docker: De `overlay2` a `btrfs` (FGV 2023)

Capa do artigo Os Storage Drivers do Docker: De `overlay2` a `btrfs` (FGV 2023), sobre Infraestrutura, no blog do Acertei: fundo azul-marinho com o título em destaque
Ficha da questão
BancaFGV
Ano2023
ÓrgãoTJ SE – Tribunal de Justiça de Sergipe
ProvaAnalista Judiciário (TJ SE) – Análise de Sistemas – "Sem Especialidade"
DisciplinaInfraestrutura
AssuntoInfraestrutura
NívelSUPERIOR
Infográfico de estudo Storage Drivers do Docker: FGV, resumindo Infraestrutura para concurso público: painéis com a definição, a comparação cobrada pela banca e a pegadinha mais frequente.
A distinção entre nível de arquivo, nível de bloco e suporte no kernel

A escolha de um Storage Driver no Docker é um dos pilares para garantir a performance, a eficiência e a estabilidade de ambientes de contêineres. Este tema é frequentemente cobrado em concursos de alto nível na área de TI, pois testa o conhecimento profundo do candidato sobre o funcionamento interno do Docker e sua interação com o sistema operacional. A questão de 2023 da banca FGV para o Tribunal de Justiça de Sergipe é um exemplo perfeito. Ela nos dá uma porta de entrada para dissecar as nuances entre os diferentes drivers, entendendo por que uma escolha específica é feita em detrimento de outras. A questão era:

“A analista Débora instalou um novo servidor de containers Docker no TJSE. Com o objetivo de maximizar a disponibilidade do servidor, Débora optou por utilizar o driver de storage Docker capaz de realizar armazenamento em nível de bloco, provisionamento fino e snapshots copy-on-write. O driver de storage escolhido por Débora necessita de um sistema de arquivos específico, disponível nativamente no kernel do Linux. Débora escolheu o driver de storage Docker: btrfs”

Vamos usar essa questão como base para construir um conhecimento sólido e definitivo sobre o assunto.

O que são Storage Drivers e por que são importantes?

O Storage Driver é o componente do Docker responsável por gerenciar como as imagens e os dados dos contêineres são armazenados e lidos no seu sistema host. O Docker baseia-se em um conceito de camadas de imagem. Cada instrução em um Dockerfile cria uma nova camada somente leitura. Quando você inicia um contêiner, uma camada final, chamada de “camada gravável” (writable layer), é adicionada sobre as camadas de imagem. Todas as modificações feitas pelo contêiner (criação, alteração ou exclusão de arquivos) são salvas nesta camada.

Para fazer isso de forma eficiente, a maioria dos drivers utiliza uma técnica chamada Copy-on-Write (CoW). Em vez de copiar um arquivo da camada de imagem para a camada do contêiner sempre que ele é lido, o driver apenas cria um link. A cópia real só acontece quando o arquivo precisa ser modificado, economizando um espaço em disco e tempo de inicialização imensos.

Analisando a Questão: A Escolha Correta de Débora

A questão estabeleceu três requisitos técnicos claros para o driver:

  1. Armazenamento em nível de bloco (Block-level storage): Operações de leitura e escrita são feitas em blocos de dados, não em arquivos individuais. Isso geralmente oferece melhor performance para cargas de trabalho com escrita intensa.
  2. Provisionamento fino (Thin provisioning): O espaço em disco é alocado sob demanda, em vez de ser totalmente pré-alocado.
  3. Snapshots Copy-on-Write (CoW): A capacidade de criar “fotos” (snapshots) do estado do sistema de arquivos de forma eficiente.

Além disso, havia um requisito de infraestrutura: o driver deveria usar um sistema de arquivos disponível nativamente no kernel do Linux.

Btrfs: O Vencedor Detalhado (Alternativa D)

O Btrfs (B-tree File System) é um sistema de arquivos moderno para Linux que foi incorporado ao kernel principal (mainline). Ele atende a todos os requisitos da questão:

  • Opera em nível de bloco.
  • Suporta nativamente snapshots CoW, thin provisioning e outras funcionalidades avançadas.
  • É um projeto nativo do ecossistema Linux, fazendo parte do kernel.

Portanto, `btrfs` é a escolha técnica que se encaixa perfeitamente na descrição do problema.

Anatomia das Alternativas Incorretas: Aprendendo com os Erros

Entender por que as outras opções estão erradas é tão importante quanto saber a certa.

ZFS: O Concorrente Robusto (Alternativa A)

O `zfs` é um sistema de arquivos e gerenciador de volumes lógicos extremamente poderoso, que também oferece armazenamento em nível de bloco, snapshots e CoW. Por que estava errado? A sutileza está no requisito “disponível nativamente no kernel do Linux”. O ZFS foi criado pela Sun Microsystems (hoje Oracle) e sua licença (CDDL) não é compatível com a do kernel Linux (GPL). Embora exista o projeto OpenZFS que permite seu uso no Linux, ele não é parte do kernel *mainline*. O Btrfs, por outro lado, é. Bancas como a FGV adoram explorar esses detalhes de licenciamento e integração.

Overlay2: O Padrão Moderno (Alternativa E)

O `overlay2` é o driver de armazenamento padrão e recomendado para todas as distribuições Linux modernas. Ele é um union filesystem, o que significa que opera em nível de arquivo, não de bloco. Ele “empilha” diretórios e apresenta como um só. Embora seja extremamente rápido para leitura e eficiente em uso de memória, ele não atende ao requisito de “armazenamento em nível de bloco” da questão.

AUFS: O Legado (Alternativa C)

O `aufs` (Another Union File System) foi o primeiro storage driver amplamente utilizado pelo Docker, especialmente em versões mais antigas do Ubuntu. Assim como o `overlay2`, ele opera em nível de arquivo (union filesystem) e, portanto, não se encaixa na descrição. Foi em grande parte substituído pelo `overlay2`, que foi incorporado ao kernel Linux e oferece melhor performance e estabilidade.

VFS: O Driver de Testes (Alternativa B)

O driver `vfs` não implementa Copy-on-Write. Para cada camada de imagem, ele faz uma cópia completa para a camada do contêiner. Isso resulta em um péssimo desempenho e alto consumo de disco. Seu uso é destinado apenas para fins de teste ou em ambientes onde nenhum outro driver de CoW é compatível. Jamais deve ser usado em produção.

Em resumo, a escolha de um storage driver é uma decisão técnica que balanceia os requisitos da aplicação, as características da carga de trabalho (leitura vs. escrita) e a infraestrutura subjacente. Dominar as diferenças entre eles é um diferencial competitivo para qualquer profissional de TI que almeja uma vaga em concursos públicos.

Mapa da Aprovação: Resumo Esquematizado

DriverTipo de OperaçãoPrincipais CaracterísticasCaso de Uso TípicoStatus
btrfsNível de BlocoSnapshots, Thin Provisioning, CoW, nativo do Kernel Linux.Cargas de trabalho com escrita intensa em hosts com filesystem Btrfs.Recomendado (se o host usar Btrfs)
zfsNível de BlocoFuncionalidades robustas como `btrfs`, mas não integrado ao kernel Linux.Ambientes de alta densidade (PaaS) em hosts com filesystem ZFS.Recomendado (se o host usar ZFS)
overlay2Nível de Arquivo (UnionFS)Rápido, eficiente em memória, simples de configurar.Uso geral, padrão na maioria das instalações modernas.Padrão e Preferencial
aufsNível de Arquivo (UnionFS)Primeiro driver union, bom para densidade de contêineres.Sistemas legados (e.g., Ubuntu 14.04) sem suporte a `overlay2`.Legado
vfsCópia Direta (não CoW)Lento, alto consumo de disco, sem otimizações.Apenas para testes e verificação, quando nenhum outro driver é suportado.Não usar em produção

Teste Seus Conhecimentos: Questões de Fixação

Referências:

Resolva questões comentadas como esta no aplicativo do Acertei.Começar agora, no navegadorBaixar o appSem instalar nada: o Acertei abre direto no navegador.

Leia também

Política de Privacidade | Termos de Uso | Preferências de cookies
Rolar para cima