Sdílet prostřednictvím


Režimy izolace

Platí pro: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016

Kontejnery Windows nabízejí dva různé režimy izolace modulu runtime: process a izolaci Hyper-V. Kontejnery spuštěné v obou režimech izolace se vytvářejí, spravují a fungují stejně. Také vytvářejí a využívají stejné obrazy kontejnerů. Rozdíl mezi režimy izolace spočívá v tom, jaký stupeň izolace se vytvoří mezi kontejnerem, hostitelským operačním systémem a všemi ostatními kontejnery běžícími na daném hostiteli.

Izolace procesů

Jedná se o "tradiční" režim izolace kontejnerů a je to, co je popsáno v přehledu kontejnerů Windows. Díky izolaci procesů mohou na daném hostiteli souběžně běžet různé instance kontejnerů, přičemž izolace je zajištěna prostřednictvím jmenných prostorů, řízení prostředků a dalších technologií pro izolaci procesů. Při spuštění v tomto režimu sdílí kontejnery stejné jádro s hostitelem i mezi sebou. To je přibližně stejné jako způsob, jakým běží linuxové kontejnery.

diagram znázorňující kontejner plný aplikací izolovaných od operačního systému a hardwaru

Co se izoluje

Kontejnery Windows virtualizují přístup k různým jmenným prostorům operačního systému. Obor názvů poskytuje přístup k informacím, objektům nebo prostředkům prostřednictvím názvu. Například systém souborů je pravděpodobně nejznámějším jmenným prostorem. Ve Windows existuje mnoho oborů názvů, které se izolují podle jednotlivých kontejnerů:

  • systém souborů
  • registr
  • síťové porty
  • prostor ID procesu a vlákna
  • Jmenný prostor správce objektů

Prorážení hranice izolace

Existují případy, kdy je užitečné proniknout hranice izolace. Tyto operace musí uživatel záměrně požadovat a měli byste je pečlivě zvážit, protože může ohrozit stav zabezpečení kontejneru. Kontejnery Windows podporují následující:

Kontejnery Windows v současné době nepodporují:

  • sdílená paměť
  • sdílení synchronizačních objektů (semaphores, mutexy atd.)
  • obory názvů sdíleného procesu

izolace Hyper-V

Tento režim izolace nabízí lepší zabezpečení a širší kompatibilitu mezi verzemi hostitele a kontejneru. Izolace Hyper-V umožňuje souběžné spouštění více instancí kontejneru na hostiteli; Každý kontejner ale běží uvnitř vysoce optimalizovaného virtuálního počítače a efektivně získá vlastní jádro. Přítomnost virtuálního počítače poskytuje izolaci na úrovni hardwaru mezi jednotlivými kontejnery a hostitelem kontejneru.

diagram kontejneru, který je izolovaný v rámci operačního systému na vizuálním počítači, který běží na operačním systému v rámci fyzického počítače.

Příklady izolace

Vytvoření kontejneru

Správa kontejnerů izolovaných technologií Hyper-V pomocí Dockeru je téměř stejná jako správa kontejnerů izolovaných procesem. Pokud chcete vytvořit kontejner s izolací Hyper-V pomocí Dockeru, nastavte --isolation=hypervpomocí parametru --isolation .

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

Pokud chcete vytvořit kontejner s izolací procesů prostřednictvím Dockeru, použijte parametr --isolation k nastavení --isolation=process.

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

Kontejnery Windows běžící na Windows Serveru jsou ve výchozím nastavení spuštěné s izolací procesů. Kontejnery Windows spuštěné ve Windows 10 Pro a Enterprise jsou ve výchozím nastavení spuštěné s Hyper-V izolací. Od aktualizace Windows 10 z října 2018 můžou uživatelé s hostitelem Windows 10 Pro nebo Enterprise spustit kontejner Windows s izolací procesů. Uživatelé musí přímo požádat o izolaci procesů pomocí příznaku --isolation=process.

Varování

Provoz s izolací procesů ve Windows 10 Pro a Enterprise je určený pro vývoj a testování. Váš hostitelský počítač musí používat Windows 10 build 17763+ a musíte mít verzi Dockeru s enginem 18.09 nebo novějším.

Windows Server byste měli dál používat jako hostitele pro produkční nasazení. Použitím této funkce ve Windows 10 Pro a Enterprise musíte také zajistit, aby se značky verzí hostitele a kontejneru shodovaly, jinak se kontejner nemusí podařit spustit nebo vykazovat nedefinované chování.

Vysvětlení izolace

Tento příklad ukazuje rozdíly v možnostech izolace mezi izolací procesu a izolací Hyper-V.

Zde se nasazuje procesně izolovaný kontejner, který bude obsahovat dlouhotrvající proces ping.

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

Pomocí příkazu docker top se proces ping vrátí, jak je zobrazeno uvnitř kontejneru. Proces v tomto příkladu má ID 3964.

docker top 1f8bf89026c8f66921a55e773bac1c60174bb6bab52ef427c6c8dbc8698f9d7a

3964 ping

Na hostiteli kontejneru lze příkaz get-process použít k zobrazení všech spuštěných procesů ping z hostitele. V tomto příkladu existuje jeden a ID procesu odpovídá id procesu z kontejneru. Je to stejný proces viditelný z kontejneru i hostitele.

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

Naopak, tento příklad spustí izolovaný kontejner Hyper-V, který obsahuje i proces ping.

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

Podobně lze docker top použít k vrácení spuštěných procesů z kontejneru.

docker top 5d5611e38b31a41879d37a94468a1e11dc1086dcd009e2640d36023aa1663e62

1732 ping

Při hledání procesu na hostiteli kontejneru se ale nenašel proces ping a vyvolá se chyba.

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

Nakonec je na hostiteli viditelný proces vmwp, což je spuštěný virtuální počítač, který zapouzdřuje spuštěný kontejner a chrání spuštěné procesy z hostitelského operačního systému.

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