DevSecOps

25 out, 2016

Conhecendo o Docker – AUFS

Publicidade

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:

layer1

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:

layers2

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.