Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016
I contenitori di Windows offrono due modalità distinte di isolamento del runtime: isolamento process e Hyper-V. I contenitori in esecuzione in entrambe le modalità di isolamento vengono creati, gestiti e funzionano in modo identico. Producono e usano anche le stesse immagini del contenitore. La differenza tra le modalità di isolamento è il grado di isolamento creato tra il contenitore, il sistema operativo host e tutti gli altri contenitori in esecuzione in tale host.
Isolamento del processo
Si tratta della modalità di isolamento "tradizionale" per i contenitori ed è descritta nella panoramica dei contenitori di Windows . Con l'isolamento del processo, più istanze del contenitore vengono eseguite simultaneamente in un determinato host con isolamento fornito tramite spazio dei nomi, controllo delle risorse e altre tecnologie di isolamento del processo. Quando si esegue in questa modalità, i contenitori condividono lo stesso kernel con l'host e tra di loro. Si tratta approssimativamente dello stesso modo in cui vengono eseguiti i contenitori Linux.
Cosa viene isolato
I contenitori Windows virtualizzano l'accesso a vari spazi dei nomi del sistema operativo. Uno spazio dei nomi fornisce l'accesso a informazioni, oggetti o risorse tramite un nome. Ad esempio, il file system è probabilmente lo spazio dei nomi più noto. Esistono numerosi namespace in Windows che vengono isolati per contenitore.
- sistema di file
- registro
- porte di rete
- spazio ID processo e thread
- Spazio dei nomi del Gestore degli oggetti
Rompere il confine di isolamento
Esistono casi in cui è utile penetrare il limite di isolamento. Queste operazioni devono essere deliberatamente richieste dall'utente e devono essere eseguite con un'attenta considerazione perché potrebbe compromettere il comportamento di sicurezza del contenitore. I contenitori di Windows supportano quanto segue:
- mappatura di file condivisi o volumi dall'host nel del contenitore
- mappatura di una "named pipe" dall'host nel contenitore
- mappatura di una porta dall'host al contenitore
- personalizzare e condividere lo spazio dei nomi di rete
- condivisione della visibilità del dispositivo host nel contenitore
I contenitori di Windows non supportano attualmente:
- memoria condivisa
- condivisione di oggetti di sincronizzazione (semafori, mutex e così via)
- spazi dei nomi dei processi condivisi
isolamento Hyper-V
Questa modalità di isolamento offre sicurezza avanzata e compatibilità più ampia tra le versioni dell'host e del contenitore. Con l'isolamento Hyper-V, più istanze del contenitore vengono eseguite simultaneamente su un host; tuttavia, ogni contenitore viene eseguito all'interno di una macchina virtuale altamente ottimizzata e ottiene effettivamente il proprio kernel. La presenza della macchina virtuale fornisce un isolamento a livello hardware tra ogni contenitore e l'host dei contenitori.
Esempi di isolamento
Creare un contenitore
La gestione di contenitori isolati Hyper-V con Docker è quasi identica alla gestione dei contenitori isolati dal processo. Per creare un contenitore con isolamento Hyper-V usando Docker, usare il parametro --isolation per impostare --isolation=hyperv.
docker run -it --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 cmd
Per creare un contenitore con isolamento del processo tramite Docker, usare il parametro --isolation per impostare --isolation=process.
docker run -it --isolation=process mcr.microsoft.com/windows/servercore:ltsc2019 cmd
Per impostazione predefinita, i contenitori di Windows in esecuzione in Windows Server sono in esecuzione con isolamento del processo. Per impostazione predefinita, i contenitori di Windows in esecuzione in Windows 10 Pro ed Enterprise vengono eseguiti con isolamento Hyper-V. A partire dall'aggiornamento di Windows 10 di ottobre 2018, gli utenti che eseguono un host Windows 10 Pro o Enterprise possono eseguire un contenitore Windows con isolamento del processo. Gli utenti devono richiedere direttamente l'isolamento del processo usando il flag --isolation=process.
Avvertimento
L'esecuzione con isolamento dei processi in Windows 10 Pro ed Enterprise è destinata allo sviluppo/test. L'host deve eseguire Windows 10 build 17763+ ed è necessario avere una versione docker con motore 18.09 o versione successiva.
È consigliabile continuare a usare Windows Server come host per le distribuzioni di produzione. Usando questa funzionalità in Windows 10 Pro ed Enterprise, è anche necessario assicurarsi che i tag di versione dell'host e del contenitore corrispondano, altrimenti il contenitore potrebbe non riuscire ad avviare o presentare un comportamento non definito.
Spiegazione dell'isolamento
Questo esempio illustra le differenze nelle funzionalità di isolamento tra processo e isolamento Hyper-V.
In questo caso, viene distribuito un contenitore isolato dal processo che ospiterà un processo ping a esecuzione prolungata.
docker run -d mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t
Usando il comando docker top, il processo ping viene restituito come illustrato all'interno del contenitore. Il processo in questo esempio ha un ID 3964.
docker top 1f8bf89026c8f66921a55e773bac1c60174bb6bab52ef427c6c8dbc8698f9d7a
3964 ping
Nell'host contenitore è possibile usare il comando get-process per restituire eventuali processi ping in esecuzione dall'host. In questo esempio ne esiste uno e l'ID processo corrisponde a quello del contenitore. È lo stesso processo visibile sia dal contenitore che dall'host.
get-process -Name ping
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName
------- ------ ----- ----- ----- ------ -- -- -----------
67 5 820 3836 ...71 0.03 3964 3 PING
Al contrario, questo esempio avvia anche un contenitore isolato Hyper-V con un processo ping.
docker run -d --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t
Analogamente, è possibile usare docker top per restituire i processi in esecuzione dal contenitore.
docker top 5d5611e38b31a41879d37a94468a1e11dc1086dcd009e2640d36023aa1663e62
1732 ping
Tuttavia, quando si cerca il processo nell'host contenitore, non viene trovato un processo ping e viene generato un errore.
get-process -Name ping
get-process : Cannot find a process with the name "ping". Verify the process name and call the cmdlet again.
At line:1 char:1
+ get-process -Name ping
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (ping:String) [Get-Process], ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand
Infine, nell'host, il processo di vmwp è visibile, ovvero la macchina virtuale in esecuzione che incapsula il contenitore in esecuzione e protegge i processi in esecuzione dal sistema operativo host.
get-process -Name vmwp
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName
------- ------ ----- ----- ----- ------ -- -- -----------
1737 15 39452 19620 ...61 5.55 2376 0 vmwp