Modalità di isolamento

Si applica a: Windows Server 2022, Windows Server 2019, Windows Server 2016

I contenitori di Windows offrono due modalità distinte di isolamento in fase di esecuzione: isolamento del process e isolamento Hyper-V. I contenitori in esecuzione in entrambe le modalità di isolamento vengono creati, gestiti e utilizzati in modo identico. Producono e usano persino le stesse immagini contenitore. La differenza tra i due tipi di isolamento consiste nel livello di isolamento creato tra il contenitore, il sistema operativo host e tutti gli altri contenitori in esecuzione nell'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 vengono eseguiti in questa modalità, i contenitori condividono lo stesso kernel con l'host nonché reciprocamente. Si tratta approssimativamente dello stesso modo in cui vengono eseguiti i contenitori di Linux.

Diagramma che illustra un contenitore completo di applicazioni isolate dal sistema operativo e dall'hardware.

Cosa viene isolato

I contenitori di 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 spazi dei nomi in Windows che vengono isolati per ogni contenitore:

  • file system
  • Registro di sistema
  • 1 GbE
  • spazio id processo e thread
  • Spazio dei nomi Di Gestione oggetti

Piercing the isolation boundary

Esistono casi in cui è utile perforare il limite di isolamento. Queste operazioni devono essere deliberatamente richieste dall'utente e devono essere eseguite con attenzione perché potrebbero compromettere il comportamento di sicurezza del contenitore. I contenitori di Windows supportano quanto segue:

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 host e contenitore. Con l'isolamento Hyper-V, più istanze del contenitore vengono eseguite simultaneamente in un host; tuttavia, ogni contenitore viene eseguito all'interno di una macchina virtuale altamente ottimizzata e ottiene in modo efficace il proprio kernel. La presenza della macchina virtuale fornisce isolamento a livello di hardware tra ogni contenitore e l'host contenitore.

Diagramma di un contenitore isolato all'interno del sistema operativo di una macchina virtuale in esecuzione nel sistema operativo di un computer fisico.

Esempi di isolamento

Creare un contenitore

La gestione dei contenitori con isolamento Hyper-V con Docker è quasi identica alla gestione dei contenitori con isolamento del processo. Per creare un contenitore con isolamento Hyper-V usando Docker, usare il --isolation parametro 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, usa il parametro --isolation per impostare --isolation=process.

docker run -it --isolation=process mcr.microsoft.com/windows/servercore:ltsc2019 cmd

I contenitori di Windows in esecuzione in Windows Server vengono eseguiti per impostazione predefinita con l'isolamento del processo. I contenitori di Windows in esecuzione in Windows 10 Pro ed Enterprise vengono eseguiti per impostazione predefinita con l'isolamento Hyper-V. A partire dall'aggiornamento di Windows 10 dell'ottobre 2018, gli utenti che eseguono l'host di Windows 10 Pro o Enterprise possono eseguire un contenitore di Windows con isolamento del processo. Gli utenti devono richiedere direttamente l'isolamento del processo usando il --isolation=process flag .

Avviso

L'esecuzione con l'isolamento del processo in Windows 10 Pro ed Enterprise è progettata per lo sviluppo e il test. L'host deve eseguire Windows 10 build 17763 e successive e devi disporre di un motore Docker versione 18.09 o successive.

È necessario continuare a usare Windows Server come host per le distribuzioni di produzione. Quando si usa questa funzionalità in Windows 10 Pro ed Enterprise, devi assicurarti anche che i tag di versione dell'host e del contenitore corrispondano, altrimenti il contenitore potrebbe non essere avviato o mostrare un comportamento indefinito.

Spiegazione dell'isolamento

Questo esempio illustra le differenze in termini di funzionalità tra l'isolamento del processo e l'isolamento Hyper-V.

In questo caso, viene distribuito un contenitore con isolamento del processo e verrà eseguito l'hosting di un processo ping con 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 è visibile all'interno del contenitore. Il processo in questo esempio ha un ID 3964.

docker top 1f8bf89026c8f66921a55e773bac1c60174bb6bab52ef427c6c8dbc8698f9d7a

3964 ping

Nell'host contenitore, il comando get-process può essere usato per restituire i processi ping in esecuzione dall'host. Questo esempio ne descrive uno e l'ID di processo corrisponde a quello dal contenitore. È lo stesso processo visibile dal contenitore e 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

Durante la ricerca del processo sull'host contenitore non viene, tuttavia, 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 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