Partager via


Lab 4.3 Analyser les fichiers de vidage de base sur un autre ordinateur - Utiliser Docker pour ouvrir des fichiers de vidage de base

S’applique à : .NET Core 2.1, .NET Core 3.1, .NET 5

Cet article explique comment utiliser Docker pour ouvrir un fichier de vidage principal sur une machine virtuelle Windows.

Prerequisites

Pour terminer cette section, vous devez avoir au moins un fichier de vidage principal copié sur votre machine virtuelle Windows dans n’importe quel dossier.

Objectif de ce labo

Vous allez apprendre à ouvrir un fichier de vidage principal sur une autre machine virtuelle Linux à l’aide de Docker.

À propos des conteneurs et de Docker

Selon la documentation officielle de Docker, un conteneur est une unité standard de logiciels qui empaquette le code et toutes ses dépendances afin que l’application s’exécute rapidement et de manière fiable d’un environnement informatique à un autre. Une image conteneur Docker est un package logiciel léger, autonome et exécutable qui inclut tout ce qui est nécessaire pour exécuter une application : code, runtime, outils système, bibliothèques système et paramètres.

En d’autres termes, vous pouvez utiliser des conteneurs Docker pour exécuter et déployer vos applications. Vous pouvez créer des conteneurs Docker à partir de différentes images de système d’exploitation, telles que Windows Core ou Ubuntu. Dans cet exercice, vous allez créer un conteneur Ubuntu pour analyser votre fichier de vidage principal.

Pour créer et utiliser des conteneurs Docker sur une machine virtuelle Windows, installez Docker Desktop pour Windows. L’article lié explique les exigences et les étapes d’installation. En fonction des exigences, Docker utilise le sous-système Windows pour Linux (WSL) pour les conteneurs Linux.

Note

Docker peut exécuter à la fois des conteneurs Windows et Linux, mais pas en même temps. Par conséquent, vous devrez basculer vers des conteneurs Linux.

Avant de passer en revue, nous vous recommandons de consulter cet article faq sur Docker pour vous familiariser avec Docker .

Créer un fichier dockerfile

Après avoir installé Docker Desktop sur Windows, vous aurez besoin d’un fichier dockerfile. Un fichier dockerfile est simplement un ensemble d’instructions pour créer le conteneur. Le nom de fichier « dockerfile » respecte la casse et doit être en minuscules sans extension de nom de fichier.

Vous pouvez exécuter des commandes sur le conteneur cible à l’aide de la commande RUN . Par exemple, le fichier dockerfile de cette section montre que vous pouvez utiliser RUN mkdir /dumps pour exécuter une mkdir /dumps commande sur le système d’exploitation du conteneur cible.

Cet exemple montre le contenu dockerfile qui vous permet d’atteindre l’objectif de cette section : création d’un conteneur Ubuntu à l’aide de la dernière image Ubuntu, installation du dernier kit de développement logiciel (SDK) dotnet, mise à jour du système d’exploitation, installation des outils dotnet-dump et dotnet-symbol tools, copie et extraction des fichiers de vidage, téléchargement des fichiers requis à l’aide de l’outil dotnet-symbol sur l’un des fichiers de vidage principaux.

Note

Les commentaires commencent par un signe de livre (#). Les commentaires sont fournis pour chaque ligne afin que vous puissiez comprendre ce que fait chaque commande.

# 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 

Créez un fichier nommé dockerfile dans le même répertoire que celui qui contient le fichier d’archivage coredumps.tar.gz. N’oubliez pas : le nom de fichier respecte la casse et n’a aucune extension.

Générer et exécuter le conteneur Docker

Là encore, vous devez basculer vers des conteneurs Linux dans Docker s’il exécute des conteneurs Windows.

Capture d’écran du menu switch linux.

Ensuite, ouvrez une fenêtre d’invite de commandes et accédez au dossier qui contient le fichier coredumps.tar.gz et dockerfile. Pour générer le conteneur Docker, exécutez docker build -t dotnettools ..

Note

Le -t paramètre signifie « tag ». Vous utiliserez ce nom d’étiquette lorsque vous exécutez votre conteneur Docker.

La période (.) à la fin de la commande signifie que la commande de build Docker utilise le fichier dockerfile à partir du répertoire actif.

Voici la sortie de la commande de build. Étant donné que la même commande avait été exécutée plusieurs fois, elle utilise son cache interne pour l’image cible. La première fois que vous exécutez cette commande, elle télécharge les fichiers nécessaires, puis les met en cache pour une utilisation ultérieure si nécessaire. La génération de l’image peut prendre un certain temps lors de la première exécution de la commande.

Capture d’écran de la commande Docker.

Ensuite, exécutez le conteneur à l’aide de la docker container run -it dotnettools /bin/bash commande.

Capture d’écran de la commande docker container.

Vous avez terminé. Vous êtes maintenant à l’intérieur du conteneur Linux nouvellement créé. Le reste est le même que précédemment : vous allez ouvrir votre vidage principal à l’aide de la même commande dotnet-dump : dotnet-dump analyze /dumps/coredump.manual.1.11724. Voici le résultat de l’exemple d’environnement utilisé pour générer la série d’entraînement.

Capture d’écran de la commande dotnet dump.

Vous pouvez exécuter des commandes SOS, telles que clrthreads, pour afficher les threads managés.

Capture d’écran de la commande clrthreads.

À présent, vous êtes prêt à analyser les fichiers de vidage principaux dans un conteneur Linux à l’aide de Docker.