Laboratorio 4.3 Analizar archivos de volcado de datos principales en otra máquina: use Docker para abrir archivos de volcado de datos principales
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 datos principal en una máquina virtual (VM) Windows base de datos.
Requisitos previos
Para completar esta sección, debe tener al menos un archivo de volcado de memoria copiado en la máquina virtual Windows en cualquier carpeta.
Objetivo de este laboratorio
Aprenderá a abrir un archivo de volcado de memoria en otra máquina virtual linux mediante Docker.
Acerca de los contenedores y Docker
De acuerdo con 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 de 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ás un contenedor de Ubuntu para analizar el archivo de volcado de datos 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 Windows Subsystem For Linux (WSL) para contenedores linux.
Nota
Docker puede ejecutar contenedores Windows y Linux, pero no al mismo tiempo. Por lo tanto, tendrá que cambiar a contenedores linux.
Antes de seguir adelante, te recomendamos que revises este artículo de preguntas más frecuentes sobre Docker para familiarizarte con Docker.
Crear un dockerfile
Después de instalar el escritorio de Docker 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 para ejecutar un comando en el sistema operativo RUN mkdir /dumps mkdir /dumps del contenedor de destino.
En este ejemplo se muestra el contenido de dockerfile que permite lograr el objetivo de esta sección: crear un contenedor de Ubuntu mediante la última imagen de Ubuntu, 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 y descargar los archivos necesarios mediante la herramienta dotnet-symbol en uno de los archivos de volcado principales.
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 del archivo distingue mayúsculas de minúsculas y no tiene ninguna extensión.
Compilar y ejecutar el contenedor de Docker
De nuevo, debe cambiar a contenedores Linux en Docker si se está ejecutando Windows contenedores.
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 crear el contenedor docker, ejecute docker build -t dotnettools . .
Nota
El -t parámetro significa "tag". Usará este nombre de etiqueta cuando ejecute el contenedor de docker.
El punto (.) al final del comando significa que el comando de compilación de Docker usará el dockerfile del directorio actual.
Este es el resultado del comando build. 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. Puede llevar algún tiempo compilar la imagen cuando ejecute el comando por primera vez.
A continuación, ejecute el contenedor mediante el docker container run -it dotnettools /bin/bash comando.
Eso es todo. Ahora está dentro del contenedor linux recién creado. El resto es el mismo que antes: se abrirá el volcado 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 crear la serie de aprendizaje.
Puede ejecutar comandos SOS, como clrthreads , para mostrar los subprocesos administrados.
Ahora, ya está listo para analizar los archivos de volcado de datos principales en un contenedor linux mediante Docker.