
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:
- 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.
- Provisionamento fino (Thin provisioning): O espaço em disco é alocado sob demanda, em vez de ser totalmente pré-alocado.
- 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
| Driver | Tipo de Operação | Principais Características | Caso de Uso Típico | Status |
|---|---|---|---|---|
| btrfs | Nível de Bloco | Snapshots, Thin Provisioning, CoW, nativo do Kernel Linux. | Cargas de trabalho com escrita intensa em hosts com filesystem Btrfs. | Recomendado (se o host usar Btrfs) |
| zfs | Nível de Bloco | Funcionalidades 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) |
| overlay2 | Ní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 |
| aufs | Ní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 |
| vfs | Có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:
- Storage Drivers in Docker – Shubham Agarwal (2021)
- Select a storage driver – Docker Docs
- Docker storage drivers – Docker Docs
- Docker Storage Drivers – EDUCBA (2023)
- Evaluating Docker storage performance – Knight Foundation School of Computing and Information Sciences


