Door het Windows Subsystem for Linux (WSL) te introduceren, gaf Microsoft ontwikkelaars de mogelijkheid om een GNU/Linux omgeving direct op Windows te draaien, ongewijzigd, zonder de overhead van een virtuele machine. Dit is een geweldige oplossing omdat veel ontwikkelaars het ene systeem gebruiken voor programmeren en het andere voor entertainment.
WSL wordt nog steeds ontwikkeld, maar is momenteel geschikt voor moderne softwareontwikkelingzowel in de eerste als in de tweede versie. Bladerend door de problemen en vragen die op het internet zijn gemeld, lijken de meeste betrekking te hebben op de integratie van WSL met Docker, vooral als het gaat om het upgraden van WSL 1 naar WSL 2.
Dit artikel zal alle onduidelijkheden wegnemen en je helpen om dit proces pijnloos te doorlopen. Als je WSL 1 niet hebt en je wilt WSL 2 met Docker, dan kun je meteen naar het laatste hoofdstuk springen.
Wat win je ermee?
- Echte laatste stabiele Linux kernel (getuned door Microsoft). WSL 1 heeft een Linux-compatibele kernelinterface zonder de Linux-kernel code.
- Verbeterde bestands IO prestaties. Tot 20x sneller vergeleken met WSL 1 bij het uitpakken van een gezipte tarball, ongeveer 2-5x sneller bij het gebruik van git kloon
, npm installeren
en cmake
aan verschillende projecten.
- Volledige compatibiliteit met systeemaanroepen. Linux binaire bestanden gebruiken systeemaanroepen om veel functies uit te voeren, zoals bestanden openen, geheugen opvragen, processen aanmaken en nog veel meer. Terwijl WSL 1 een vertaallaag gebruikte die gebouwd was door de WSL teamWSL 2 bevat zijn eigen Linux kernel met volledige compatibiliteit met systeemaanroepen.
- Bestanden die zijn opgeslagen in een native ext4-partitie op een virtuele schijf.
- Zeer eenvoudige manier om te integreren met Docker.
Ik denk dat voor de meeste gebruikers de bestands-IO prestaties en de gemakkelijke docker integratie als voldoende redenen klinken.
Laten we gaan!
Ik neem aan dat je de laatste stabiele versie van Windows 10 Pro hebt. Voor vandaag is dat versie 1909.
Sluit je aan bij Windows insiders
Momenteel is WSL 2 alleen beschikbaar voor Windows 10 in de insiders' slow ring. Voor zover ik weet, zou de stabiele versie in mei 2020 beschikbaar moeten zijn (20H1 release). De langzame ring is een veilige oplossing voor gebruikers die iets eerder over nieuwe functies willen beschikken, die al vooraf zijn getest door gebruikers van de snelle ring. De langzame ring krijgt tot een of twee keer per maand systeemupdates. Je kunt meer lezen over de wijzigingen in de insiders-release in het Microsoft-document genaamd Vlieg hub.
Volg de officiële Microsoft gids. Het is heel eenvoudig en duurt ongeveer 15 minuten zonder verlies van persoonlijke gegevens.
WSL 1 upgraden naar WSL 2
Volg de officiële gids. Het is ook erg makkelijk, een paar shell commando's en je bent er! Afhankelijk van hoe uitgebreid je Linux onder WSL 1 was, kan dit even duren. Helaas heeft Microsoft geen voortgangsbalk of informatie over de benodigde tijd geplaatst, dus wees geduldig.
Opruimen
Dit is het belangrijkste onderdeel voor een goede samenwerking tussen WSL 2 en Docker. Na het upgraden naar WSL 2 proberen veel gebruikers hun versie van Docker te dwingen om samen te werken zonder zich te realiseren dat het Docker-team, speciaal voor WSL 2, een release heeft voorbereid die alles voor ons zal doen. Dit is de laatste release van de Docker Edge-versie (hun bèta-naam) - "Docker Desktop WSL 2 backend". Deze versie, 2.1.7.0, is goed gepolijst en is een kandidaat voor de komende stabiele release.
Gebruikers die WSL 1 niet hebben gehad of net een nieuwe versie van WSL 2 hebben geïnstalleerd, hebben geluk en kunnen meteen door naar het laatste hoofdstuk.
Als je je Docker niet hebt schoongemaakt (helemaal niet of niet correct) en niet de juiste versie van Docker voor WSL 2 hebt geïnstalleerd, kun je een aantal veelvoorkomende fouten tegenkomen, bijv, Kan geen verbinding maken met de Docker-daemon op tcp://localhost:2375", "Draait de Docker-daemon wel?
enz. In de meeste gevallen verlies je tijd als je niet weet dat je een nieuwe aanpak moet kiezen om deze fouten op te lossen. Om dit te doen, moet je eerst Docker volledig verwijderen van WSL en Windows, wat geen voor de hand liggende stap is.
Het meest voorkomende voorbeeld van niet-verwijderde overblijfselen is de oude Docker-aanpak om de omgevingsvariabele in te stellen DOCKER_HOST=tcp://localhost:2375
onder WSL 1 voor samenwerking met Windows Docker optie Daemon blootstellen aan tcp://localhost:2375 zonder TLS
.
Hoe Docker volledig verwijderen van WSL (Ubuntu)?
- Als de officiële Docker docs zeggen:
sudo apt-get remove docker docker-engine docker.io containerd runc
Je kunt deze lijst zeker aanvullen met docker-ce
en docker-ce-cli
.
- Identificeer alle dockerpakketten die je hebt met
dpkg -l | grep -i docker
en verwijder ze als ze nog bestaan.
- Verwijder alle resten:
sudo rm -rf /var/lib/docker /etc/docker /etc/apparmor.d/docker /var/run/docker.sock /usr/local/bin/docker-compose /etc/docker
sudo groupdel docker ~/.docker
- Deze stap is voor gevorderde gebruikers, dus wees voorzichtig. Waarschijnlijk hoef je dit niet te doen.
Vind alle dokwerker
woord voorvallen en verwijder degene waar je zeker van bent.
sudo find / -naam "*docker*"
- Controleer de inhoud van alle bestanden hieronder voor
dokwerker
voorvallen zoals bijv. omgevingsvariabele DOCKER_HOST=tcp://localhost:2375
.
Je kunt deze bestanden bewerken met de Nano-editor, nano ~/.bashrc
of Visual Studio Code, code ~/.bashrc
.
~/.bashrc
~/.bash_aliases
~/.bash_profiel
~/.bash_login
~/.profile
/etc/bash.bashrc
/etc/profiel
Hoe Docker volledig verwijderen uit Windows?
- De-installeren op de normale manier met Windows
Apps en functies
paneel.
- Verwijder alles hieronder als het bestaat:
C:ProgrammaDocker
C:ProgrammaDataDockerDesktop
C:Gebruikers[USERNAME].docker
C:Gebruikers[USERNAME]AppDataLokaalDocker
C:Gebruikers[USERNAME]AppDataRoamingDocker
C:Gebruikers[USERNAME]AppDataRoamingDocker Desktop
Wat is de volgende stap?
Installeer de nieuwste versie van Docker Desktop Edge vanaf hier en volg de stappen van de officiële docs. Het komt echt neer op een paar klikken.
Als alles goed gaat, zou je de uitvoer van wsl -l -v
zoals dit:
NAAM STAAT VERSIE
Ubuntu-18.04 Loopt 2
docker-desktop Loopt 2
docker-desktop-data Loopt 2
Dat is alles. Docker heeft zijn eigen WSL-containers gemaakt docker-desktop
en docker-desktop-data
. Sommige van de beschikbare tutorials of adviezen kunnen verwarrend zijn omdat deze keer je zou niets gerelateerd aan Docker moeten installeren of configureren onder je WSL Linux distributie. Het is heel belangrijk om te onthouden. Na het schoonmaken moet het meteen goed werken.
Daarnaast...
Het instellen van WSL 2 met Docker kan een pijnloos proces zijn met een paar eenvoudige stappen. Begin met het bijwerken van pakketlijsten met de opdracht "sudo apt-get update" om er zeker van te zijn dat je de laatste versie informatie hebt. Los ontbrekende afhankelijkheden op met "sudo apt-get install -y build-essential" voor een soepele installatie. Installeer Docker-engine met "sudo apt-get install -y docker-engine"om moeiteloos containers te bouwen, uit te voeren en te beheren. Voer "sudo docker run" uit gevolgd door de image naam om containers te starten. Om je omgeving geoptimaliseerd te houden, voer je regelmatig "sudo docker system prune" uit om ongebruikte containers te verwijderen en schijfruimte vrij te maken. Met deze stappen kun je genieten van de naadloze integratie van WSL 2 en Docker voor efficiënte containerisatie in je ontwikkelworkflow.