Dela via


Kom igång med Docker-fjärrcontainrar på WSL 2

Den här stegvisa guiden hjälper dig att komma igång med att utveckla med fjärrcontainrar genom att konfigurera Docker Desktop för Windows med WSL 2 (Windows-undersystem för Linux, version 2).

Docker Desktop för Windows tillhandahåller en utvecklingsmiljö för att skapa, skicka och köra dockeriserade appar. Genom att aktivera den WSL 2-baserade motorn kan du köra både Linux- och Windows-containrar i Docker Desktop på samma dator. (Docker Desktop är kostnadsfritt för personligt bruk och småföretag, för information om Priser för Pro, Team eller Företag, se Vanliga frågor och svar om Docker-webbplatsen.

Anmärkning

Vi rekommenderar att du använder Docker Desktop på grund av dess integrering med Windows och Windows Undersystem för Linux. Docker Desktop stöder dock körning av både Linux- och Windows-containrar, men du kan inte köra båda samtidigt. Om du vill köra Linux- och Windows-containrar samtidigt måste du installera och köra en separat Docker-instans i WSL. Om du behöver köra samtidiga containrar eller bara föredrar att installera en containermotor direkt i Linux-distributionen följer du Linux-installationsanvisningarna för containertjänsten, till exempel Installera Docker Engine på Ubuntu eller Installera Podman för att köra Linux-containrar.

Översikt över Docker-containrar

Docker är ett verktyg som används för att skapa, distribuera och köra program med containrar. Containrar gör det möjligt för utvecklare att paketera en app med alla delar den behöver (bibliotek, ramverk, beroenden osv.) och skicka ut allt som ett paket. Om du använder en container ser du till att appen körs på samma sätt oavsett anpassade inställningar eller tidigare installerade bibliotek på datorn som kör den som kan skilja sig från den dator som användes för att skriva och testa appens kod. Detta gör att utvecklare kan fokusera på att skriva kod utan att behöva oroa sig för det system som koden ska köras på.

Docker-containrar liknar virtuella datorer, men skapar inte ett helt virtuellt operativsystem. Docker gör i stället att appen kan använda samma Linux-kernel som det system som den körs på. På så sätt kan apppaketet endast kräva delar som inte redan finns på värddatorn, vilket minskar paketstorleken och förbättrar prestandan.

Kontinuerlig tillgänglighet, med hjälp av Docker-containrar med verktyg som Kubernetes, är en annan orsak till containrarnas popularitet. Detta gör att flera versioner av din appcontainer kan skapas vid olika tidpunkter. I stället för att behöva ta bort ett helt system för uppdateringar eller underhåll kan varje container (och dess specifika mikrotjänster) ersättas i farten. Du kan förbereda en ny container med alla dina uppdateringar, konfigurera containern för produktion och bara peka på den nya containern när den är klar. Du kan också arkivera olika versioner av din app med hjälp av containrar och hålla dem igång som en säkerhetsåterställning om det behövs.

Mer information finns i Introduktion till Docker-containrar.

Förutsättningar

Mer information finns i Docker-dokumenten Systemkrav för att installera Docker Desktop i Windows.

Information om hur du installerar Docker på Windows Server finns i Komma igång: Förbereda Windows för containrar.

Anmärkning

WSL kan köra distributioner i både WSL-version 1- eller WSL 2-läge. Du kan kontrollera detta genom att öppna PowerShell och ange: wsl -l -v. Kontrollera att distributionen är inställd på att använda WSL 2 genom att ange: wsl --set-version <distro> 2. Ersätt <distro> med distributionsnamnet (t.ex. Ubuntu 18.04).

På grund av grundläggande skillnader mellan Windows och Linux i WSL version 1 kunde Docker-motorn inte köras direkt i WSL, så Docker-teamet utvecklade en alternativ lösning med hjälp av Hyper-V virtuella datorer och LinuxKit. Men eftersom WSL 2 nu körs på en Linux-kernel med fullständig systemanropskapacitet kan Docker köras helt i WSL 2. Det innebär att Linux-containrar kan köras internt utan emulering, vilket ger bättre prestanda och samverkan mellan dina Windows- och Linux-verktyg.

Installera Docker Desktop

Med WSL 2-serverdelen som stöds i Docker Desktop för Windows kan du arbeta i en Linux-baserad utvecklingsmiljö och skapa Linux-baserade containrar, samtidigt som du använder Visual Studio Code för kodredigering och felsökning och kör containern i Microsoft Edge-webbläsaren i Windows.

Så här installerar du Docker (efter att du redan har installerat WSL):

  1. Ladda ned Docker Desktop och följ installationsanvisningarna.

  2. När du är installerad startar du Docker Desktop från Start-menyn i Windows och väljer sedan Docker-ikonen från menyn med dolda ikoner i aktivitetsfältet. Högerklicka på ikonen för att visa Docker-kommandomenyn och välj "Inställningar". Docker Desktop-instrumentpanelsikon

  3. Kontrollera att "Använd den WSL 2-baserade motorn" är markerat i Allmänna inställningar>. Allmänna inställningar för Docker Desktop

  4. Välj från de installerade WSL 2-distributionerna som du vill aktivera Docker-integrering på genom att gå till: Inställningar>Resurser>WSL-integrering. Resursinställningar för Docker Desktop

  5. Bekräfta att Docker har installerats genom att öppna en WSL-distribution (t.ex. Ubuntu) och visa versionen och versionsnumret genom att ange: docker --version

  6. Testa att installationen fungerar korrekt genom att köra en enkel inbyggd Docker-avbildning med hjälp av: docker run hello-world

Tips/Råd

Här följer några användbara Docker-kommandon att känna till:

  • Visa en lista över de kommandon som är tillgängliga i Docker CLI genom att ange: docker
  • Lista information för ett specifikt kommando med: docker <COMMAND> --help
  • Lista docker-bilderna på din dator (som för närvarande bara är hello-world-bilden), med: docker image ls --all
  • Lista containrarna på din maskin med: docker container ls --all eller docker ps -a (utan -a visa alla-flaggan, visas endast körande containrar)
  • Lista systemomfattande information om Docker-installationen, inklusive statistik och resurser (CPU och minne) som är tillgängliga för dig i WSL 2-kontexten, med: docker info

Utveckla i fjärrcontainrar med VS Code

För att komma igång med att utveckla appar med Docker med WSL 2 rekommenderar vi att du använder VS Code, tillsammans med tilläggen WSL, Dev Containers och Docker.

  • Installera VS Code WSL-tillägget. Med det här tillägget kan du öppna ditt Linux-projekt som körs på WSL i VS Code (du behöver inte bekymra dig om sökvägsproblem, binär kompatibilitet eller andra utmaningar mellan operativsystem).

  • Installera TILLÄGGET VS Code Dev Containers. Med det här tillägget kan du öppna projektmappen eller lagringsplatsen i en container och dra nytta av Visual Studio Codes fullständiga funktionsuppsättning för att utföra ditt utvecklingsarbete i containern.

  • Installera VS Code Docker-tillägget. Det här tillägget lägger till funktioner för att skapa, hantera och distribuera containerbaserade program inifrån VS Code. (Du behöver Dev Containers-tillägget för att faktiskt använda containern som utvecklingsmiljö.)

Nu ska vi använda Docker för att skapa en utvecklingscontainer för ett befintligt appprojekt.

  1. I det här exemplet använder jag källkoden från min Hello World-självstudiekurs för Django i python-utvecklingsmiljön som har konfigurerats med dokument. Du kan hoppa över det här steget om du föredrar att använda din egen källkod för projektet. Om du vill ladda ned min HelloWorld-Django webbapp från GitHub öppnar du en WSL-terminal (till exempel Ubuntu) och anger: git clone https://github.com/mattwojo/helloworld-django.git

    Anmärkning

    Lagra alltid koden i samma filsystem som du använder verktyg i. Detta resulterar i snabbare prestanda för filåtkomst. I det här exemplet använder vi en Linux-distribution (Ubuntu) och vill lagra våra projektfiler i WSL-filsystemet \\wsl\. Att lagra projektfiler i Windows-filsystemet skulle göra saker och ting betydligt långsammare när du använder Linux-verktyg i WSL för att få åtkomst till dessa filer.

  2. Från WSL-terminalen ändrar du kataloger till källkodsmappen för det här projektet:

    cd helloworld-django
    
  3. Öppna projektet i VS Code som körs på den lokala WSL-tilläggsservern genom att ange:

    code .
    

    Bekräfta att du är ansluten till din WSL Linux-distribution genom att kontrollera den gröna fjärrindikatorn i det nedre vänstra hörnet av VS Code-instansen.

    VS Code WSL-fjärrindikator

  4. Från VS Code-kommandopaletten (Ctrl + Skift + P) anger du: Dev Containers: Öppna igen i containern eftersom vi använder en mapp som redan har öppnats med WSL-tillägget. Du kan också använda Dev Containers: Open Folder in Container... för att välja en WSL-mapp med hjälp av den lokala \\wsl$ resursen (från Windows-sidan). Mer information finns i Snabbstart för Visual Studio Code : Öppna en befintlig mapp i en container . Om dessa kommandon inte visas när du börjar skriva kontrollerar du att du har installerat Dev Containers-tillägget som är länkat ovan.

    VS Code Dev Containers-kommando

  5. Välj den projektmapp som du vill kontainera. I mitt fall är detta \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\

    VS Code-mapp för Dev Containers

  6. En lista över containerdefinitioner visas, eftersom det inte finns någon konfiguration av dev-containern i projektmappen (lagringsplatsen) ännu. Listan över containerkonfigurationsdefinitioner som visas filtreras baserat på din projekttyp. För mitt Django-projekt väljer jag Python 3.

    Konfigurationsdefinitioner för VS Code Dev Containers

  7. En ny instans av VS Code öppnas, börjar skapa vår nya avbildning och när bygget är klart startar containern. Du ser att en ny .devcontainer mapp har dykt upp med information om containerkonfiguration i en Dockerfile och devcontainer.json -fil.

    VS Code .devcontainer-mapp

  8. Bekräfta att projektet fortfarande är anslutet till både WSL och i en container genom att öppna den integrerade VS Code-terminalen (Ctrl + Skift + ~). Kontrollera operativsystemet genom att ange: uname och Python-versionen med: python3 --version. Du kan se att uname kom tillbaka som "Linux", så du är fortfarande ansluten till WSL 2-motorn, och Python-versionsnumret baseras på containerkonfigurationen som kan skilja sig från Python-versionen som är installerad på din WSL-distribution.

  9. Om du vill köra och felsöka din app i containern med Hjälp av Visual Studio Code öppnar du först menyn Kör (Ctrl+Skift+D eller väljer fliken på menyraden längst till vänster). Välj sedan Kör och Felsök för att välja en felsökningskonfiguration och välj den konfiguration som passar ditt projekt bäst (i mitt exempel blir detta "Django"). Då skapas en launch.json fil i mappen för .vscode projektet med instruktioner om hur du kör din app.

    Felsökningskonfiguration för VS Code-körning

  10. Inifrån VS Code väljer du Kör>Starta felsökning (eller tryck bara på F5-tangenten ). Detta öppnar en terminal i VS Code och du bör se ett resultat som säger något i stil med: "Starta utvecklingsservern vid http://127.0.0.1:8000/ Avsluta servern med CONTROL-C." Håll ned kontrollnyckeln och välj den adress som visas för att öppna appen i standardwebbläsaren och se hur projektet körs i containern.

    VS Code som kör en docker-container

Nu har du konfigurerat en fjärrutvecklingscontainer med Docker Desktop, som drivs av WSL 2-serverdelen, som du kan koda i, skapa, köra, distribuera eller felsöka med VS Code!

Felsökning

WSL Docker-kontexten är föråldrad

Om du använde en tidig teknisk förhandsversion av Docker för WSL kan du ha en Docker-kontext med namnet "wsl" som nu är inaktuell och inte längre används. Du kan kontrollera med kommandot: docker context ls. Du kan ta bort den här "wsl"-kontexten för att undvika fel med kommandot: docker context rm wsl eftersom du vill använda standardkontexten för både Windows och WSL2.

Möjliga fel som kan uppstå med den här inaktuella wsl-kontexten är: docker wsl open //./pipe/docker_wsl: The system cannot find the file specified. eller error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_wsl/v1.40/images/json?all=1: open //./pipe/docker_wsl: The system cannot find the file specified.

Mer information om det här problemet finns i Konfigurera Docker i Windows System for Linux (WSL2) på Windows 10.

Problem med att hitta docker-avbildningslagringsmappen

Docker skapar två distributionsmappar för att lagra data:

  • \wsl$\docker-desktop
  • \wsl$\docker-desktop-data

Du hittar dessa mappar genom att öppna din WSL Linux-distribution och ange: explorer.exe . för att visa mappen i Utforskaren i Windows. Ange: \\wsl\<distro name>\mnt\wsl ersätt <distro name> med namnet på din distribution (dvs. Ubuntu-20.04) för att se dessa mappar.

Mer information om hur du hittar docker-lagringsplatser i WSL finns i det här problemet från WSL-lagringsplatsen eller det här StackOverflow-inlägget.

Mer hjälp med allmänna felsökningsproblem i WSL finns i felsökningsdokumentet.

Ytterligare resurser