Panoramica dell'archiviazione dei contenitori
In questo argomento viene fornita una panoramica dei diversi modi in cui i contenitori usano le risorse di archiviazione in Windows. I contenitori si comportano in modo diverso rispetto alle macchine virtuali per quanto riguarda l'archiviazione. Per loro natura, i contenitori vengono creati per impedire a un'app in esecuzione al loro interno di scrivere il proprio stato in tutto il file system dell'host. Per impostazione predefinita, i contenitori usano un'area "scratch" temporanea, ma Windows consente anche di rendere permanente l'archiviazione.
Area scratch
Per impostazione predefinita, i contenitori Windows usano l'archiviazione temporanea. Tutte le operazioni di I/O dei contenitori vengono eseguite in un'area scratch, che viene assegnata a ogni singolo contenitore. La creazione dei file e le scritture sui file vengono acquisite nell'area scratch e non vengono trasferite all'host. Quando un'istanza del contenitore viene arrestata, tutte le modifiche apportate nell'area scratch vengono eliminate. Quando viene avviata una nuova istanza del contenitore, per l'istanza viene resa disponibile una nuova area scratch.
Archiviazione dei livelli
Come descritto nella panoramica dei contenitori, le immagini dei contenitori sono costituite da un bundle di file espressi come una serie di livelli. L'archiviazione dei livelli è costituita da tutti i file che vengono creati nel contenitore. Ogni volta che esegui docker pull
e quindi docker run
per il contenitore, viene restituito lo stesso risultato.
Dove vengono archiviati i livelli e come si modificano
In un'installazione predefinita, i livelli vengono archiviati in C:\ProgramData\docker
, suddivisi tra le directory "image" e "windowsfilter". Puoi modificare le directory in cui vengono archiviati i livelli utilizzando la configurazione docker-root
, come illustrato nella documentazione Motore Docker in Windows documentazione.
Nota
Solo NTFS è supportato per l'archiviazione dei livelli. I volumi condivisi reFS e cluster non sono supportati.
È consigliabile non modificare i file nelle directory dei livelli, devono essere gestiti con attenzione utilizzando i comandi, ad esempio:
Operazioni supportate nell'archiviazione dei livelli
L'esecuzione dei contenitori può utilizzare la maggior parte delle operazioni NTFS ad eccezione delle transazioni. Ciò include l'impostazione degli ACL e tutti gli ACL vengono controllati all'interno del contenitore. Se vuoi eseguire processi per più utenti all'interno di un contenitore, puoi creare gli utenti nel tuo Dockerfile
con RUN net user /create ...
, impostare gli ACL di file e configurare i processi da eseguire con l'utente utilizzando la direttiva Dockerfile USER.
Archiviazione permanente
I contenitori Windows supportano meccanismi per fornire un'archiviazione permanente tramite montaggi e volumi di binding. Per altre informazioni, vedi Archiviazione permanente nei contenitori.
Limiti di archiviazione
Un modello comune per le applicazioni Windows è quello di eseguire una query della quantità di spazio libero su disco prima di installare o creare nuovi file o come trigger per la pulizia dei file temporanei. Con l'obiettivo di ottimizzare la compatibilità delle applicazioni, l'unità C di un contenitore Windows rappresenta una dimensione virtuale libera di 20 GB.
Alcuni utenti potrebbero voler eseguire l'override di questa impostazione predefinita e configurare una dimensione maggiore o minore dello spazio libero. Questa operazione può essere eseguita tramite l'opzione "size" all'interno della configurazione "storage-opt".
Esempio
Riga di comando: docker run --storage-opt "size=50GB" mcr.microsoft.com/windows/servercore:ltsc2019 cmd
In alternativa, puoi modificare direttamente il file di configurazione di Docker:
"storage-opts": [
"size=50GB"
]
Suggerimento
Questo metodo funziona anche per la build di Docker. Vedi il documento Configurare Docker per ulteriori informazioni sulla modifica del file di configurazione di Docker.