Partager via


Modes d’isolation

S’applique à : Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016

Les conteneurs Windows offrent deux modes distincts d’isolation du runtime : process et isolation Hyper-V. Les conteneurs s’exécutant sous les deux modes d’isolation sont créés, gérés et fonctionnent de façon identique. Ils produisent et consomment également les mêmes images conteneur. La différence entre les modes d’isolation est le degré d’isolation créé entre le conteneur, le système d’exploitation hôte et tous les autres conteneurs s’exécutant sur cet hôte.

Isolation des processus

Il s'agit du mode d’isolation « traditionnel » pour les conteneurs, tel que décrit dans l’aperçu des conteneurs Windows. Avec l’isolation des processus, plusieurs instances de conteneur s’exécutent simultanément sur un hôte donné avec l’isolation fournie via l’espace de noms, le contrôle des ressources et d’autres technologies d’isolation de processus. Lors de l’exécution dans ce mode, les conteneurs partagent le même noyau avec l’hôte, ainsi que les uns avec les autres. Il s’agit approximativement de la même façon que la façon dont les conteneurs Linux s’exécutent.

diagramme A montrant un conteneur plein d’applications isolées du système d’exploitation et du matériel.

Ce qui est isolé

Les conteneurs Windows virtualisent l’accès à différents espaces de noms du système d’exploitation. Un espace de noms fournit l’accès aux informations, aux objets ou aux ressources par le biais d’un nom. Par exemple, le système de fichiers est probablement l’espace de noms le plus connu. Il existe de nombreux espaces de noms sur Windows qui sont isolés par conteneur :

  • système de fichiers
  • registre
  • ports réseau
  • espace d’ID de processus et de thread
  • Espace de noms du Gestionnaire d’objets

Percer la barrière d'isolation

Il existe des cas où il est utile de percer la limite d’isolation. Ces opérations doivent être délibérément demandées par l’utilisateur et doivent être effectuées avec précaution, car elle peut compromettre la posture de sécurité du conteneur. Les conteneurs Windows prennent en charge les éléments suivants :

Actuellement, les conteneurs Windows ne prennent pas en charge :

  • mémoire partagée
  • partage d’objets de synchronisation (sémaphores, mutexes, etc.)
  • espaces de noms de processus partagés

Isolation Hyper-V

Ce mode d’isolation offre une sécurité renforcée et une compatibilité plus large entre les versions de l’hôte et du conteneur. Avec Hyper-V isolation, plusieurs instances de conteneur s’exécutent simultanément sur un hôte ; toutefois, chaque conteneur s’exécute à l’intérieur d’une machine virtuelle hautement optimisée et obtient efficacement son propre noyau. La présence de la machine virtuelle fournit une isolation au niveau matériel entre chaque conteneur et l’hôte de conteneur.

Diagramme d’un conteneur isolé au sein d’un système d’exploitation sur un ordinateur visuel qui s’exécute sur un système d’exploitation au sein d’une machine physique.

Exemples d’isolation

Créer un conteneur

La gestion des conteneurs isolés Hyper-V avec Docker est presque identique à la gestion des conteneurs isolés par processus. Pour créer un conteneur avec Hyper-V isolation à l’aide de Docker, utilisez le paramètre --isolation pour définir --isolation=hyperv.

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

Pour créer un conteneur avec isolation de processus via Docker, utilisez le paramètre --isolation pour définir --isolation=process.

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

Les conteneurs Windows s’exécutant sur Windows Server sont exécutés par défaut avec l’isolation des processus. Les conteneurs Windows s’exécutant sur Windows 10 Professionnel et Entreprise sont exécutés par défaut avec Hyper-V isolation. À compter de la mise à jour d’octobre 2018 de Windows 10, les utilisateurs exécutant un hôte Windows 10 Professionnel ou Entreprise peuvent exécuter un conteneur Windows avec isolation des processus. Les utilisateurs doivent demander directement l’isolation du processus à l’aide de l’indicateur --isolation=process.

Avertissement

L’exécution avec l’isolation des processus sur Windows 10 Professionnel et Entreprise est destinée au développement/test. Votre hôte doit exécuter Windows 10 build 17763+ et vous devez disposer d’une version Docker avec engine 18.09 ou version ultérieure.

Vous devez continuer à utiliser Windows Server comme hôte pour les déploiements de production. À l’aide de cette fonctionnalité sur Windows 10 Professionnel et Entreprise, vous devez également vous assurer que vos étiquettes d’hôte et de version de conteneur correspondent, sinon le conteneur peut ne pas démarrer ou présenter un comportement non défini.

Explication de l’isolation

Cet exemple illustre les différences entre les capacités d'isolation des processus et l'isolation Hyper-V.

Ici, un conteneur de processus isolé est déployé et va héberger un processus ping de longue durée.

docker run -d mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t

À l’aide de la commande docker top, le processus ping est retourné comme indiqué dans le conteneur. Le processus de cet exemple a un ID de 3964.

docker top 1f8bf89026c8f66921a55e773bac1c60174bb6bab52ef427c6c8dbc8698f9d7a

3964 ping

Sur l’hôte de conteneur, la commande get-process peut être utilisée pour retourner tous les processus ping en cours d’exécution à partir de l’hôte. Dans cet exemple, il en existe un et l’ID de processus correspond à celui du conteneur. Il s’agit du même processus visible à la fois à partir du conteneur et de l’hôte.

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

Par contre, cet exemple démarre également un conteneur isolé par Hyper-V avec un processus ping.

docker run -d --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t

De même, docker top peut être utilisé pour afficher les processus en cours d’exécution depuis le conteneur.

docker top 5d5611e38b31a41879d37a94468a1e11dc1086dcd009e2640d36023aa1663e62

1732 ping

Toutefois, lors de la recherche du processus sur l’hôte du conteneur, le processus de ping est introuvable et une erreur est générée.

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

Enfin, sur l’hôte, le processus vmwp est visible, qui est la machine virtuelle en cours d’exécution qui encapsule le conteneur en cours d’exécution et protège les processus en cours d’exécution du système d’exploitation hôte.

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