Uma continuação desta pergunta .
Minha leitura adicional sobre os drivers de armazenamento do Docker revelou que o overlay
driver mescla todas as camadas de imagem em camadas inferiores usando uma implementação de link físico que causa utilização excessiva de inode. Alguém pode explicar isso? Até onde eu sei, criar links físicos não cria um novo inode.
OverlayFS é um sistema de arquivos de união e há dois drivers de armazenamento no nível do Docker que fazem uso dele: a versão original/antiga chamada
overlay
e a versão mais recente chamadaoverlay2
. No OverlayFS, há um diretório de nível inferior que é exposto como somente leitura. No topo desse diretório está o diretório de nível superior, que permite acesso de leitura e gravação. Cada um desses diretórios é chamado de camada. A visualização combinada dos diretórios de nível inferior e superior é apresentada como uma única unidade, chamada de diretório 'merged'.O
overlay2
driver de armazenamento mais recente oferece suporte nativo a até 128 dessas camadas. Ooverlay
driver mais antigo só pode trabalhar com duas camadas por vez. Como a maioria das imagens do Docker é construída usando várias camadas, essa limitação é bastante significativa. Para contornar essa limitação, cada camada é implementada como um diretório separado que simula uma imagem completa.Para examinar as diferenças no meu sistema de teste, puxei a imagem 'ubuntu' do Docker Hub e examinei as diferenças na estrutura de diretórios entre os drivers
overlay2
e :overlay
Na
overlay
representação, cada camada simula uma imagem completa, enquanto asoverlay2
camadas contêm apenas as diferenças exatas entre as camadas. Naoverlay
abordagem do driver, os links físicos são usados como forma de economizar espaço entre as diferentes camadas. No entanto, esse método ainda não é perfeito e novos inodes são necessários quando os dados da imagem contêm arquivos especiais, como links simbólicos e dispositivos de caracteres. Isso pode adicionar rapidamente um grande número de inodes.A distribuição de inode entre os drivers
overlay2
eoverlay
no meu sistema de teste é mostrada abaixo.A contagem total de inodes
overlay2
chega a 3378 no meu sistema. Usandooverlay
, essa contagem vai até 5615. Esse valor considera uma única imagem e sem contêineres em execução, portanto, um sistema grande com vários contêineres e imagens do Docker pode atingir rapidamente o limite de inode imposto pelo sistema de arquivos de backup (XFS ou EXT4, onde o/var/lib/docker/overlay
diretório está localizado).Por esse motivo, o
overlay2
driver de armazenamento mais recente é atualmente a opção recomendada para a maioria das novas instalações. Ooverlay
driver está obsoleto a partir do Docker v18.09 e deve ser removido em uma versão futura.