Így telepíts Dockert Windows 10-re Hyper-V nélkül

Windows 10 laptop képe a pixabay.com-ról

Windows 10-ben a legegyszerűbben a Docker Desktop telepítésével futtathatsz Docker konténereket. Az előnye még, hogy nem csak Linux vagy Windows konténereket tudsz vele futtatni, hanem egyidőben mindkettőt. Bár egyszerre csak az egyiket támogatja, de a konténereid nem vesznek el, amikor a két mód között átváltasz, csak a docker parancs a kiválasztott módnak megfelelő docker démont fogja látni alapértelmezetten. Előfordulhat, hogy nem akarod engedélyezni a Hyper-V feature-t, de az alapértelmezett telepítés szerint az kötelező. Én viszont mutatok egy módszert ennek kikerülésére, persze ára is van. Ha nem szeretsz olvasni, azs em gond. Dőlj hátra és élvezd az oktatóvideót.

A telepítéshez a Docker Desktop weboldalára kell ellátogatni, majd letölteni a telepítőt. A folyamat egyszerű. Első lépésben csak annyit kell megadni, hogy akarjuk-e telepíteni a WSL 2-höz szükséges Windows komponenseket. Mivel ma már a Linux konténerek futtatásához a WSL 2-t használja a Windows 10, érdemes engdélyezni. Az asztalra az ikont ízlés szerint ki lehet rakatni vele, majd az "Ok" gombot megnyomod és csak várni kell, amíg végez.

Docker desktop telepítés 1. ablak Docker desktop telepítés 2. ablak Docker desktop telepítés 3. ablak

Ha a WSL 2 nem volt még telepítve, a Docker Desktop igényelheti a Windows újraindítását az alábbi ablakkal.

Én viszont már tudom, hogy szeretnék Windows konténereket, aminek az engedélyezése szintén újraindítást igényelne, ezért még az újraindítás előtt ezt is engedélyezem PowerShellből:

Enable-WindowsOptionalFeature -Online -FeatureName "Containers" -All

A cikk a Hyper-V nélküli telepítésről szól, de ha mégis szeretnéd használni, akkor a "Microsoft-Hyper-V" nevű feature-t is engedélyezd.

Bár a Linux konténerekhez a WSL 2 miatt nem kell már engedélyezni a Hyper-V-t, egyelőre a Windows konténerek jobban függnek a Windows verziójától, mint Linux esetén a Linux konténerek a Linux kerneltől, így alapértelmezetten a Docker Desktop nem a "process" izolációt, hanem a Hyper-V-t választja, így pedig további problémákat okoz, ha mellette szeretnél VirtualBoxszal vagy VMWare-rel is virtualizálni. Nem beszélve arról, hogy a konténerek egyik nagy előnye Linuxon, hogy régebbi verziókat is lehet futtatni újabb hoszt rendszeren. Ezt a Microsoft is tudja, dolgoznak a problémán. A Windows verziók kompatibilitásával külön dokumentáció foglalkozik: Windows Container Version Compatibility.

Ahogy a Hyper-V dokumentációja utal rá, az engedélyezésének lehetnek további hátrányai, mivel ebben az esetben a gazda operációs rendszer is a Hyper-V réteg felett fut, ami hatással lehet a teljesítményre. Bár a VirtualBox is már képes futni a Hyper-V mellett, még a 6.1-es verzióban is csak "Experimental" feature, azaz előfordulhatnak hibák.

A következő parancsot tehát akkor futtasd csak le PowerShellben, ha a "Saját Windows service" szekcióban írtakat már nem akarod elvégezni. És persze csak ha a Windows verziód támogatja a Hyper-V-t:

Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Hyper-V" -All

Újraindítás után egy kicsit többet kell várni, ha a WSL 2-t is először konfigurálja a Windows, de miután elindítod a menüből vagy az asztalról a Dockert, egy újabb figyelmeztetés ugrik fel. A Linux kernelt ugyanis külön le kell tölteni, a https://aka.ms/wsl2kernel. oldalról, ami után a Docker Desktopot kell majd újraindítani.

Hiányzó WSL 2 kernel

Ha most a wsl --list --verbose paranccsal kilistázod a wsl disztribúciókat, lesz legalább kettő. Ezek viszont nem arra vannak, hogy belépve futtasd a docker parancsot. A windows parancssorból vagy PowerShellből elérhető lesz a "docker", de ha a WSL 2 előre volt telepítve és már meg volt nyitva a PowerShell, akkor nyiss egy újat, amiben már elérhető lesz a "docker" parancs.

Saját Windows Service

Ha a Docker telepítése után nem engedélyezted a Hyper-V szolgáltatást, de korábban már engedélyezve volt, akkor most le kell tiltani. Ha már le volt tiltva, akkor sem okoz problémát, ha futtatod a következő parancsot PowerShellben:

Disable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Hyper-V"

Ha futtatod a parancsot és kéri az újraindítást, akkor csak újraindítás után folytasd a következő lépéseket. A letiltás után viszont a Docker Desktopban nem tudsz átváltani már Windows konténer módba. Ilyenkor a megoldás vagy a Docker démon Windowsos stabil verziójának letöltése Docker Desktop nélkül, vagy a Docker Desktop-ban levő démon használata. Mivel nem tudok róla, hogy konkrét verziót le lehetne tölteni, a következőkben a Docker Desktopot használom fel egy saját szolgáltatás indítására.

Most pedig létrehozzuk a Windows konténeres szolgáltatást. Ehhez az alábbi paranccsal indítsd el a process izolációval működő új docker démont:

sc.exe create docker-isolation-process binpath= "C:\Program Files\Docker\Docker\resources\dockerd.exe -H npipe:////./pipe/docker-isolation-process -G docker-users --exec-opt isolation=process --run-service" start= delayed-auto

Majd indítsd el

sc.exe start docker-isolation-process

És ellenőrizd le, hogy "RUNNING"-e az állapota

sc.exe query docker-isolation-process

Ami után a STATE" sorban "RUNNING" kell, hogy álljon. Ekkor pedig már csatlakozhatsz az új docker démonhoz:

docker --host npipe:////./pipe/docker-isolation-process info

Hogy ne kelljen ezt mindig beírni, egy külön kontextust hozhatsz létre ennek a démonnak a Docker kliensben

docker context create docker-isolation-process --description "Windows containers using process isolation" --docker host=npipe:////./pipe/docker-isolation-process

A docker context list parancsra látható is, hogy már két kontextus van, de a csillag még a "default" mellett van, azaz a Linux konténerekhez kapcsolódik. Az átváltáshoz futtasd a docker context use docker-isolation-process parancsot.

Kategóriák: 
Megosztás/Mentés