Olá, pessoal!
AUFS foi o primeiro controlador de armazenamento em uso com Docker; como benefício, ele tem uma história longa com Docker. É muito estável, tem grandes implementações no mundo real e possui forte apoio da comunidade, além de diversas características que acabam o tornando uma boa escolha para uso com Docker. Entre elas estão:
- Tempo de inicialização do container rápido
- Uso eficiente de armazenamento
- Uso eficiente de memória
Apesar de ter uma ampla capacidade de características com Docker, algumas distribuições não possuem suporte para o AUFS, pois ele não está incluído na linha principal do Kernel Linux – no caso do RHEL, não é suporte AUFS.
Os tópicos seguintes demonstram algumas características do AUFS e como ele se relaciona com o Docker:
Layers de imagens
AUFS é um sistema de unificação de arquivos, isso quer dizer que ele leva vários diretórios em um único host Linux, colocando um sobre o outro e fornece uma visão unificada desses arquivos. Para conseguir isso, o AUFS usa uma união de montagem.
O AUFS driver de storage do Docker implementa Layers de imagens utilizando a união do sistema montado. Abaixo, podemos ver um exemplo de Layers, onde para o cliente é apresentada a união de todas elas:
Utilizando arquivos
O Docker utiliza a tecnologia de “AUFS CoW” para conseguir compartilhar a imagem e minimizar o uso de disco. Como o AUFS trabalha em nível de arquivos, então todos os dados são copiados por inteiro para a camada superior, mesmo que modificando uma pequena parte do arquivo. Isso faz com que dependendo do tamanho de arquivo que será copiado acabe penalizando um pouco o desempenho do container, pois um arquivo muito grande demorará algum tempo para que seja copiado. Ou a imagem possui uma grande quantidade de camadas, e o arquivo que você deseja utilizar está na primeira camada da imagem.
A ordem de procura é de cima para baixo, então, caso seja a primeira vez que o usuário irá utilizar aquele arquivo, o Docker vai procurar esse arquivo nas suas camadas abaixo e copiar todo o seu conteúdo para a camada gravável do container. Porém, o arquivo só é copiado na primeira vez; após isso, esse arquivo já está na última camada, então todas as demais operações são rápidas.
Deletando arquivos
O driver do AUFS exclui um arquivo de dentro do container colocando um arquivo whiteout na camada gravável do container. O arquivo whiteout obscurece a existência do arquivo nas camadas inferiores da imagem:
Você pode adicionar o driver AUFS no seu daemon docker editando o arquivo de conf do docker e adicionando:
DOCKER_OPTS="--storage-driver=aufs" systemctl restart docker
Então tá, pessoal, este é nosso primeiro artigo da série que vai mostrar para vocês os drivers de armazenamento nativos do Docker.