Compartir a través de


Laboratorio 4.3 Análisis de archivos de volcado de núcleo en otra máquina: uso de Docker para abrir archivos de volcado de núcleo

Se aplica a: .NET Core 2.1, .NET Core 3.1, .NET 5

En este artículo se describe cómo usar Docker para abrir un archivo de volcado de núcleo en una máquina virtual (VM) Windows.

Requisitos previos

Para completar esta sección, debe tener al menos un archivo de volcado de núcleo copiado en la máquina virtual Windows en cualquier carpeta.

Objetivo de este laboratorio

Aprenderá a abrir un archivo de volcado de núcleo en otra máquina virtual Linux mediante Docker.

Acerca de los contenedores y Docker

Según la documentación oficial de Docker, un contenedor es una unidad estándar de software que empaqueta el código y todas sus dependencias para que la aplicación se ejecute de forma rápida y confiable desde un entorno informático a otro. Una imagen de contenedor de Docker es un paquete de software ejecutable ligero, independiente que incluye todo lo necesario para ejecutar una aplicación: Código, tiempo de ejecución, herramientas del sistema, bibliotecas del sistema y configuración.

En pocas palabras, puede usar contenedores de Docker para ejecutar e implementar las aplicaciones. Puede crear contenedores de Docker a partir de diferentes imágenes del sistema operativo, como Windows Core o Ubuntu. En este ejercicio, creará un contenedor de Ubuntu para analizar el archivo de volcado principal.

Para crear y usar contenedores de Docker en una máquina virtual Windows, instale Docker Desktop para Windows. En el artículo vinculado se explican los requisitos y los pasos de instalación. Según los requisitos, Docker usa el Subsistema de Windows para Linux (WSL) para contenedores de Linux.

Nota:

Docker puede ejecutar contenedores de Windows y Linux, pero no al mismo tiempo. Por lo tanto, tendrá que cambiar a contenedores de Linux.

Antes de continuar, se recomienda revisar este artículo de preguntas más frecuentes sobre Docker para familiarizarse con Docker.

Creación de un dockerfile

Después de instalar Docker Desktop en Windows, necesitará un dockerfile. Un dockerfile es simplemente un conjunto de instrucciones para crear el contenedor. El nombre de archivo "dockerfile" distingue mayúsculas de minúsculas y debe estar en minúsculas sin ninguna extensión de nombre de archivo.

Puede ejecutar comandos en el contenedor de destino mediante el comando RUN . Por ejemplo, el dockerfile de esta sección muestra que puede usar RUN mkdir /dumps para ejecutar un mkdir /dumps comando en el sistema operativo del contenedor de destino.

En este ejemplo se muestra el contenido de dockerfile que le permite lograr el objetivo de esta sección: Crear un contenedor de Ubuntu mediante la imagen de Ubuntu más reciente, instalar el SDK de dotnet más reciente, actualizar el sistema operativo, instalar las herramientas dotnet-dump y dotnet-symbol, copiar y extraer los archivos de volcado de memoria y descargar los archivos necesarios mediante la herramienta dotnet-symbol en uno de los archivos de volcado principal.

Nota:

Los comentarios comienzan con un signo de libra (#). Se proporcionan comentarios para cada línea para que pueda comprender lo que hace cada comando.

# 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 

Cree un archivo denominado dockerfile en el mismo directorio que contiene el archivo de archivo coredumps.tar.gz . Recuerde: el nombre de archivo distingue mayúsculas de minúsculas y no tiene ninguna extensión.

Compilación y ejecución del contenedor de Docker

De nuevo, tendrá que cambiar a contenedores de Linux en Docker si ejecuta contenedores de Windows.

Captura de pantalla del menú switch linux.

A continuación, abra una ventana del símbolo del sistema y cambie a la carpeta que contiene el archivo coredumps.tar.gz y dockerfile. Para compilar el contenedor de Docker, ejecute docker build -t dotnettools ..

Nota:

El -t parámetro significa "tag". Usará este nombre de etiqueta al ejecutar el contenedor de Docker.

El punto (.) al final del comando significa que el comando de compilación de Docker usará el dockerfile desde el directorio actual.

Esta es la salida del comando de compilación. Dado que el mismo comando se ha ejecutado varias veces, usa su caché interna para la imagen de destino. La primera vez que ejecute este comando, descargará los archivos necesarios y, a continuación, los almacenará en caché para usarlos posteriormente cuando sea necesario. Es posible que tarde algún tiempo en compilar la imagen cuando ejecute el comando por primera vez.

Captura de pantalla del comando docker.

A continuación, ejecute el contenedor mediante el docker container run -it dotnettools /bin/bash comando .

Captura de pantalla del comando docker container.

Eso es todo. Ahora está dentro del contenedor de Linux recién compilado. El resto es el mismo que antes: se abrirá el volcado de memoria principal con el mismo comando dotnet-dump: dotnet-dump analyze /dumps/coredump.manual.1.11724. Este es el resultado del entorno de ejemplo que se usa para compilar la serie de entrenamiento.

Captura de pantalla del comando dotnet dump.

Puede ejecutar comandos SOS, como clrthreads, para mostrar los subprocesos administrados.

Captura de pantalla del comando clrthreads.

Ahora, está listo para analizar los archivos de volcado de memoria principal en un contenedor de Linux mediante Docker.