Docker 20.10 telepítés Windows 10-ben WSL 2-vel

Bár a WSL 2 telepítéséhez nincs szükség Hyper-V -re, mint a Docker Desktophoz, de a VirtualMachinePlatform engedélyezése is befolyásolja a többi virtualizáló szoftver működését, mint a VirtualBox vagy a VMWare Workstation. VirtualBox esetén például le kellhet tiltani a VT-x/AMD-V opciót, vagy a következő üzenet fogadhat:

Failed to open a session for the virtual machine ubuntu-dev
Cannot enable nested VT-x/AMD-V without nested paging and unrestricted guest execution

A telepítést az alábbi videón is követheted

Míg a VMWare Workstation Player pedig figyelmeztet arra, hogy külön beállítások nélkül csökkenhet a teljesítmény:

You are running this virtual machine with side channel mitigations enabled. Side channel mitigations provide enhanced security but also lower performance.

To disable mitigations, change the side channel mitigations setting in the advanced panel of the virtual machine settings. Refer to VMWare KB article 79832 at https://kb.vmware.com/s/article/79832 for more details.

Lehetséges hibaüzenet VirtualBox-ban Lehetséges hibaüzenet VMWare-ben

A telepítéshez a Microsoft utasításait fogjuk követni. Először is nyitni kell egy PowerShellt adminisztátorként, és az alábbi parancsot futtatni:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
  • /online: Az aktuálisan futó operációs rendszert manipulálja. A futó Windowsból ugyanis tudna egy nem futó, de elérhető fájlrendszerű Windowst is módosítani.

  • /enable-feature: Elég egyértelmű, de ez kell, hogy a megadott Windowson egy feature-t, azaz funkciót engedélyezzünk.

  • /featurename: Ezután rögtön egy kettőspont jön és az engedélyezendő feature neve. Itt most el kell hinni a Microsoftnak, hogy ez a neve. Ha viszont szeretnéd kilistázni PowerShellben, milyen feature-ök vannak, azt a dism.exe /online /get-features utasítással teheted meg.

  • /all: Ez a kapcsoló automatikusan engedélyezi az összes függőséget is.

  • /norestart: Ez is könnyen kitalálható. Gyakran egy feature engedélyezése igényli a rendszer újraindítását. Viszont mivel most még ezt nem akarjuk megtenni, ezzel a kapcsolóval letiltjuk.

A második lépés rögtön a WSL frissítése a 2-es verzióra. Míg az alapértelmezett 1-es verzió nem indít virtuális gépet és ezzel korlátozottabban használható, addig a WSL 2-ben akár a Docker service is futtatható. Ehhez viszont engedélyezni kell még egy feature-t, a virtuális gép platformot. Részletek a dokumentációban.

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Ezen a ponton kell újraindítani a gépet, amikor már mindkét feature engedélyezve van, majd azután folytatni
a következő lépésekkel.

Szükség lesz még a legfrissebb Linux kernelre is. Ehhez le kell tölteni a Microsofttól a frissítést végző programot, ami jelenleg a következő címeken érhető el:

  • x64-es rendszerekre:

    https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

  • ARM rendszerekre:

    https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_arm64.msi

Szándékosan nem kattintható linkként illesztem be, mert a link bármikor megváltozhat. Érdemesebb a dokumentációból indulni, ám ha valamilyen okból nem éred el azt, megpróbálhatod az idézett címen is letölteni.

Ha elfelejtetted újraindítani a gépet, akkor egy hibaüzenetet fogsz kapni, ami arra figyelmeztet, hogy a program csak olyan gépen futtatható, amin van telepítve WSL. A program indítása után pedig az alábbi ablak jelenik meg a "Welcome to the Windows Subsystem for Linux Update Setup Wizard" címmel.

A "Next"-re kattintva pedig máris a sikeres frissítésre utaló következő ablak kell megjelenjen.

Itt a "Finish" -re kattintasz és már kész is. Ahhoz, hogy alapértelmezetten 2-es verzióval induljanak a gépek, le kellene futtatni a wsl --set-default-version 2 parancsot, de hogy megmutassam, hogyan lehet utólag is upgrade-elni, ezt én most nem teszem meg.

Nyiss egy PowerShellt, és írd be a wsl parancsot, majd üsd le az entert. Mivel még nincsen telepítve semmilyen Linux disztribúció, csak a kernel lett letöltve, az alábbi hibaüzenet jelenik meg:

Windows Subsystem for Linux has no installed distributions.
Distributions can be installed by visiting the Microsoft Store:
https://aka.ms/wslstore

Az üzenetből ki kell másolni a linket és böngészőből megnyitni, vagy csak kattints a következő linkre: WSL Store

Windows 10-ből megnyitva a linket egy ablak ugrik fel, amiből elvileg meg lehet nyitni a Microsoft Store alkalmazást a Windowsban.

Itt az "Open Microsoft Store"-ra kellene kattintani, de nekem csak egy hibaüzenetet jelenít meg, mi szerint "hiba történt" és próbáljam később. Az URL detektívet használva lenyomozható, hogy a megadott cím a következő címre dobna: ms-windows-store://collection/?CollectionId=LinuxDistros. Ám ilyen Collection már úgy tűnik, nem létezik, de az áruházat megnyitva a keresővel a "Linux" kifejezésre keresve meg lehet találni a lehetőségeket. Az Ubuntu 20.04 LTS telepítéséhez kattints a következő linkre: Ubuntu 20.04 WSL disztribúció. Ezután már csak le kell tölteni és telepíteni a választott disztribúciót. Ha már korábban letöltötted, akkor csak az "Install" vagy "Telepítés" gomb fog megjelenni. A telepítésre kattintva pedig az "Installing, this may take a few minutes..." üzenet fogad, majd a felhasználónév és jelszó bekérésével folytatja, ahol a jelszót kétszer is meg kell adni.

A telepítés végén pedig valami hasonló ablak fogad:

A helyzet az, hogy alapértelmezetten nem WSL 2-vel települnek a disztribúciók, vagyis ahhoz, hogy Dockert is lehessen benne futtatni, frissíteni kell. A C:\Users\<UserNeved>\AppData\Local\Packages mappában lehet megtalálni a telepített Linuxokat is többek között. Nálam az Ubuntu 20.04 mappája így néz ki: CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc. A végén levő hash különböző lehet. Ezen belül a "LocalState" mappa tartalmazza a rendszerfájlokat az aktuális állapotról, amiben a "rootfs" mappa a Linux fájljait. Ebből is látszik, hogy ez még a WSL1-es verzió, mivel a WSL 2-ben egy "vdx" kiterjesztésű lemezképfájl fogja tartalmazni a teljes Linux fájlrendszert.

Most nyisd meg újra a PowerShellt vagy csak a parancssort (cmd.exe) és az alábbi paranccsal listázhatod is, milyen disztribúciók vannak, ahol látni fogod a WSL verziószámot is:

wsl --list --verbose

A csillag jelzi, hogy az az alapértelmezett disztribúció, vagyis csak a "wsl" parancsot használva paraméter nélkül ebbe a rendszerbe tudnál belépni. Most viszont frissíteni kell a 2-es verzióra:

wsl --set-version Ubuntu-20.04 2

Itt a "--set-version" után a disztribúció nevét kell írni, majd a verziószámot, ami jelen esetben a "2"-es. Ha még meg van nyitva az áruházból telepítés után megnyitott ablak, láthatod, hogy a frissítés miatt leállította a rendszert, így egy billentyűleütéssel vagy csak a bezárás ikonra kattintva nyugodtan be lehet zárni az ablakot.

Meg lehet nyitni újra a Start menüben az "Ubuntu"-ra keresve vagy csak a parancssorban a "wsl" paranccsal az alapértelmezett WSL Linuxot vagy a disztribúció nevének megadásával.

wsl --distribution Ubuntu-20.04

Most már készenállunk a Docker telepítésére, amit a Docker dokumentációjából lehet folytatni. Mivel nekem nyilván most nincs fent semmilyen előző Docker verzió, az erre utaló részeket átugorva a Dockert tartalmazó Ubuntu csomagtároló konfigurálásához szükséges csomagokat kell feltennem:

sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

Be fogja kérni a felhasználó jelszavát, illetve megerősítést is fog kérni a telepítés előtt. Majd pedig le kell tölteni a kulcsfájlt a tároló működéséhez:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Ezután pedig a stabil Docker verziókat tartalmazó tárolót kell hozzáadni a rendszerhez.

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) \
  stable"

Lényeges, hogy mindig érdemes konkrét Docker verziót telepíteni és megtiltani az automatikus frissítését újabb verziókra. A különböző verziók között ugyanis olyan változások lehetnek, amik ha nem figyelsz, az adataid elvesztéséhez vezethetnek. Bár WSL-ben éles környezetet nem fogsz üzemeltetni valószínűleg, azért a meglepetéseket itt is jó elkerülni. Az alábbi paranccsal mindenképp listázd ki az elérhető verziókat:

apt-cache madison docker-ce

Majd pedig válaszd ki a telepítendő verziót és a második oszlopban levő verziószámot másold ki.

 docker-ce | 5:20.10.1~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:20.10.0~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:19.03.14~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:19.03.13~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:19.03.12~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:19.03.11~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:19.03.10~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:19.03.9~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages

Én a 20.10-es verziót telepítem a "5:20.10.1~3-0~ubuntu-focal" verziójelöléssel.

sudo apt-get install \
  docker-ce=5:20.10.1~3-0~ubuntu-focal \
  docker-ce-cli=5:20.10.1~3-0~ubuntu-focal \
  containerd.io

Két helyen is meg kellett adni a verziót, ugyanis külön települ a docker démon és a kliens, amiknek nem kötelező egy gépen lenniük. Most viszont még le is kell tiltani a frissítését a docker-ce és docker-ce-cli csomagoknak:

sudo apt-mark hold docker-ce docker-ce-cli

Van viszont egy probléma. WSL-ben futó Linuxon nincs a hagyományos Ubuntu rendszereken megszokott init process. Nem érhető el a systemd, vagyis a Docker démon nem fog elindulni magától automatikusan, amikor elindul a Linux. Amikor viszont szükséged van rá, manuálisan elindíthatod az alábbi utasítással:

sudo service docker start

Ezután már a működni fognak a docker parancsok a "sudo" használatával.

sudo docker info

Ha elfelejted elindítani a Dockert, a következő hibaüzenetet fogod látni: "ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?"

Ha nem akarod mindig a sudo-t a parancsok elé írni, sudo su paranccsal lépj át a "root" felhasználóba, vagy add hozzá a felhasználódat a "docker" csoporthoz az alábbi utasítással, ahol a <userneved> helyett a saját felhasználónevedet írd:

sudo usermod -aG docker <userneved>

Ha kilépsz, a legközelebbi belépés után már nem kell sudo-t használni, viszont éles rendszeren fontos tudni, hogy ezzel az adott felhasználó teljes adminisztrátori jogosultságot kap gyakorlatilag és még jelszót sem kell megadnia hozzá, ezért ennek tudatában élj a lehetőséggel.

Ha szeretnéd, hogy a Docker automatikusan elinduljon, érdemesebb egy hagyományos virtuális gépben telepíteni egy Linuxot.

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