Visão geral do armazenamento de contêineres

Este tópico fornece uma visão geral das diferentes maneiras como os contêineres usam o armazenamento no Windows. Os contêineres se comportam de forma diferente das máquinas virtuais quando se trata de armazenamento. Por natureza, os contêineres são criados para impedir que um aplicativo em execução dentro dele grave o estado em todo o sistema de arquivos do host. Os contêineres usam um espaço “temporário” por padrão, mas o Windows também fornece um meio de manter o armazenamento.

Espaço temporário

Por padrão, os contêineres do Windows usam o armazenamento efêmero. Toda a E/S de contêineres ocorre em um “espaço transitório” e cada contêiner obtém seu próprio espaço temporário. A criação de arquivo e as gravações de arquivo são capturadas no espaço temporário e não escapam para o host. Quando uma instância de contêiner é interrompida, todas as alterações que ocorreram no espaço temporário são descartadas. Quando uma nova instância de contêiner é iniciada, um novo espaço temporário é fornecido para a instância.

Armazenamento em camadas

Conforme descrito na Visão geral de contêineres, as imagens de contêiner são um pacote de arquivos expressos como uma série de camadas. O armazenamento em camadas consiste em todos os arquivos que são criados no contêiner. Sempre que você usa docker pull e, em seguida, docker run nesse contêiner – eles são iguais.

Onde as camadas são armazenadas e como alterá-las

Em uma instalação padrão, as camadas são armazenadas em C:\ProgramData\docker e divididas entre os diretórios "image" e "windowsfilter". Você pode alterar onde as camadas são armazenadas usando a configuração docker-root, conforme demonstrado na documentação Mecanismo do Docker no Windows.

Observação

Somente o NTFS tem suporte para o armazenamento em camadas. Não há suporte para ReFS e volume compartilhado clusterizado (CSV).

Você não deve modificar nenhum arquivo nos diretórios de camadas; eles são cuidadosamente gerenciados com comandos como:

Operações com suporte no armazenamento em camadas

Os contêineres em execução podem usar a maioria das operações de NTFS, exceto transações. Isso inclui definir ACLs, e todas as ACLs são verificadas dentro do contêiner. Se você quiser executar processos como vários usuários dentro de um contêiner, poderá criar usuários em seu Dockerfile com RUN net user /create ..., definir ACLs de arquivos e, em seguida, configurar processos para serem executados com esse usuário usando a diretiva USER do Dockerfile.

Armazenamento persistente

Os contêineres do Windows dão suporte a mecanismos que fornecem armazenamento persistente por meio de volumes e montagens por associação. Para saber mais, consulte Armazenamento persistente em contêineres.

Limites de armazenamento

Um padrão comum para aplicativos do Windows é consultar a quantidade de espaço em disco livre antes de instalar ou criar novos arquivos, ou como um gatilho para a limpeza de arquivos temporários. Com o objetivo de maximizar a compatibilidade de aplicativos, a unidade C: em um contêiner do Windows representa um tamanho gratuito virtual de 20 GB.

Alguns usuários podem querer substituir esse padrão e configurar o espaço livre para um valor menor ou maior. Isso pode ser feito por meio da opção “size” dentro da configuração “storage-opt”.

Exemplo

Linha de comando: docker run --storage-opt "size=50GB" mcr.microsoft.com/windows/servercore:ltsc2019 cmd

Ou você pode alterar o arquivo de configuração do Docker diretamente:

"storage-opts": [
    "size=50GB"
  ]

Dica

Esse método também funciona para o build do Docker. Consulte o documento Configurar o Docker para obter mais detalhes sobre como modificar o arquivo de configuração do Docker.