Lab 4.3 Analysera kärndumpfiler på en annan dator – Använd Docker för att öppna kärndumpfiler
Gäller för: .NET Core 2.1, .NET Core 3.1, .NET 5
Den här artikeln beskriver hur du använder Docker för att öppna en kärndumpfil på en virtuell Windows-dator (VM).
Förhandskrav
För att slutföra det här avsnittet bör du ha minst en kärndumpfil kopierad på den virtuella Windows-datorn i valfri mapp.
Målet med den här labbuppgiften
Du får lära dig hur du öppnar en kärndumpfil på en annan virtuell Linux-dator med hjälp av Docker.
Om containrar och Docker
Enligt den officiella dokumentationen för Docker är en container en standardenhet för programvara som paketerar kod och alla dess beroenden så att programmet körs snabbt och tillförlitligt från en datormiljö till en annan. En Docker-containeravbildning är ett enkelt, fristående, körbart programvarupaket som innehåller allt som krävs för att köra ett program: Kod, körning, systemverktyg, systembibliotek och inställningar.
Enkelt uttryckt kan du använda Docker-containrar för att köra och distribuera dina program. Du kan skapa Docker-containrar från olika OS-avbildningar, till exempel Windows Core eller Ubuntu. I den här övningen skapar du en Ubuntu-container för att analysera kärndumpfilen.
Om du vill skapa och använda Docker-containrar på en virtuell Windows-dator installerar du Docker Desktop för Windows. Den länkade artikeln beskriver kraven och installationsstegen. Enligt kraven använder Docker Windows-undersystem för Linux (WSL) för Linux-containrar.
Obs!
Docker kan köra både Windows- och Linux-containrar, men inte på samma gång. Därför måste du byta till Linux-containrar.
Innan du går vidare rekommenderar vi att du läser den här artikeln med vanliga frågor och svar om Docker för att bekanta dig med Docker.
Skapa en dockerfile
När du har installerat Docker Desktop i Windows behöver du en dockerfile. En dockerfile är helt enkelt en uppsättning instruktioner för att skapa containern. Filnamnet "dockerfile" är skiftlägeskänsligt och bör vara gemener utan filnamnstillägg.
Du kan köra kommandon på målcontainern med hjälp av kommandot RUN . Dockerfile i det här avsnittet visar till exempel att du kan använda RUN mkdir /dumps
för att köra ett mkdir /dumps
kommando på målcontainerns operativsystem.
Det här exemplet visar dockerfile-innehåll som gör att du kan uppnå det här avsnittets mål: Skapa en Ubuntu-container med hjälp av den senaste Ubuntu-avbildningen, installera den senaste dotnet-SDK:en, uppdatera operativsystemet, installera dotnet-dump- och dotnet-symbolverktygen, kopiera och extrahera dumpfilerna och ladda ned nödvändiga filer med hjälp av verktyget dotnet-symbol på en av kärndumpfilerna.
Obs!
Kommentarer börjar med ett pundtecken (#). Kommentarer ges för varje rad så att du kan förstå vad varje kommando gör.
# Install the latest Ubuntu container image
FROM ubuntu:latest
# Install the latest dotnet SDK
FROM mcr.microsoft.com/dotnet/core/sdk:latest AS tools-install
# Update the OS, the slash (\) means that the command continues on the next line
RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y
# Install the dotnet-dump and dotnet-symbol tools in the /dotnetcore-tools folder
RUN dotnet tool install --tool-path /dotnetcore-tools dotnet-dump
RUN dotnet tool install --tool-path /dotnetcore-tools dotnet-symbol
# Add the /dotnetcore-tools in the PATH environment variable to run the dotnet-dump and dotnet-symbol tools directly
ENV PATH="/dotnetcore-tools:${PATH}"
# Create a /dumps folder in the Linux container
RUN mkdir /dumps
# Copy the coredumps.tar.gz file from a Windows VM to the /dumps folder on a Linux VM
COPY ./coredumps.tar.gz /dumps/
# Extract the tar file to the /dumps folder
RUN tar -xf /dumps/coredumps.tar.gz -C /dumps
# Run dotnet-symbol against one of the core dump files to download the required files (such as symbols and DAC)
RUN dotnet-symbol --host-only --debugging ~/dumps/coredump.manual.1.11724
Skapa en fil med namnet dockerfile i samma katalog som innehåller arkivfilen coredumps.tar.gz . Kom ihåg: Filnamnet är skiftlägeskänsligt och har inget tillägg.
Skapa och kör Docker-containern
Återigen måste du växla till Linux-containrar i Docker om den kör Windows-containrar.
Öppna sedan ett kommandotolksfönster och ändra till mappen som innehåller filen coredumps.tar.gz och dockerfile. Skapa Docker-containern genom att köra docker build -t dotnettools .
.
Obs!
Parametern -t
betyder "tagg". Du använder det här taggnamnet när du kör docker-containern.
Perioden (.) i slutet av kommandot innebär att Docker build-kommandot använder dockerfile från den aktuella katalogen.
Här är utdata från byggkommandot. Eftersom samma kommando hade körts flera gånger använder det sin interna cache för målbilden. Första gången du kör det här kommandot laddas nödvändiga filer ned och sedan cachelagras för senare användning vid behov. Det kan ta lite tid att skapa avbildningen när du först kör kommandot.
Kör sedan containern med hjälp docker container run -it dotnettools /bin/bash
av kommandot .
Det var allt. Nu är du i den nybyggda Linux-containern. Resten är samma som tidigare: Du öppnar din kärndump med samma dotnet-dump-kommando: dotnet-dump analyze /dumps/coredump.manual.1.11724
. Här är resultatet från exempelmiljön som används för att skapa träningsserien.
Du kan köra SOS-kommandon, till exempel clrthreads
, för att visa de hanterade trådarna.
Nu är du redo att analysera kärndumpfiler i en Linux-container med hjälp av Docker.
Feedback
Skicka och visa feedback för