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 neles grave o estado em todo o sistema de arquivos do host. Os contêineres usam um espaço de "rascunho" por padrão, mas o Windows também fornece um meio de manter o armazenamento.
Espaço Scratch
Por padrão, os contêineres do Windows usam armazenamento efêmero. Todas as E/S do contêiner acontecem em um "espaço de risco" e cada contêiner recebe seu próprio arranhão. A criação e a escrita de arquivos são capturadas no espaço temporário e não escapam para o host. Quando uma instância de contêiner é parada, todas as alterações que ocorreram na área temporária são descartadas. Quando uma nova instância de contentor é iniciada, um novo espaço temporário é fornecido para a instância.
Armazenamento em camada
Conforme descrito na na visão geral de contentores, as imagens de contentores são um pacote de arquivos expressas como uma série de camadas. O armazenamento em camada é todos os arquivos que são incorporados no contêiner. Toda vez que você docker pull
então docker run
esse recipiente - eles são os mesmos.
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 nos 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 do Docker Engine no Windows.
Observação
Apenas NTFS é suportado para armazenamento em camada. Não há suporte para ReFS e volumes compartilhados de cluster (CSV).
Você não deve modificar nenhum arquivo nos diretórios de camada - eles são cuidadosamente gerenciados usando comandos como:
- imagens do docker
- docker rmi
- docker pull
- de carregamento do docker
- docker salvar
Operações suportadas no armazenamento em camadas
A execução de contêineres pode usar a maioria das operações NTFS, com exceção das transações. Isso inclui a configuração de 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 arquivo 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 oferecem suporte a mecanismos para fornecer armazenamento persistente através de bind mounts e volumes. 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 livre em disco antes de instalar ou criar novos arquivos ou como um gatilho para limpar arquivos temporários. Com o objetivo de maximizar a compatibilidade do aplicativo, a unidade C: em um contêiner do Windows representa um tamanho livre virtual de 20GB.
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 através 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 a compilação do docker. Consulte o documento configurar o docker para obter mais detalhes sobre como modificar o arquivo de configuração do docker.