Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: .NET Core 2.1, .NET Core 3.1, .NET 5
В этой статье описывается, как использовать Docker для открытия основного файла дампа на виртуальной машине Windows.
Предварительные требования
Чтобы завершить этот раздел, в любой папке должен быть скопирован по крайней мере один основной файл дампа на виртуальной машине Windows.
Цель этой лаборатории
Вы узнаете, как открыть файл дампа ядра на другой виртуальной машине Linux с помощью Docker.
Сведения о контейнерах и Docker
Согласно официальной документации Docker, контейнер является стандартной единицей программного обеспечения, который упаковает код и все его зависимости, чтобы приложение выполнялось быстро и надежно из одной вычислительной среды в другую. Образ контейнера Docker — это упрощенный, автономный исполняемый пакет программного обеспечения, включающий все, что необходимо для запуска приложения: код, среда выполнения, системные инструменты, системные библиотеки и параметры.
Проще говоря, можно использовать контейнеры Docker для запуска и развертывания приложений. Контейнеры Docker можно создавать из разных образов ОС, таких как Windows Core или Ubuntu. В этом упражнении вы создадите контейнер Ubuntu для анализа основного файла дампа.
Чтобы создать и использовать контейнеры Docker на виртуальной машине Windows, установите Docker Desktop для Windows. В связанной статье описываются требования и действия по установке. В соответствии с требованиями Docker использует подсистему Windows для Linux (WSL) для контейнеров Linux.
Примечание.
Docker может запускать контейнеры Windows и Linux, но не одновременно. Поэтому необходимо переключиться на контейнеры Linux.
Перед переходом мы рекомендуем ознакомиться с этой статьей и ответами о Docker, чтобы ознакомиться с Docker .
Создание dockerfile
После установки Docker Desktop в Windows вам потребуется dockerfile. Dockerfile — это просто набор инструкций для создания контейнера. Имя файла dockerfile учитывает регистр и должно быть в нижнем регистре без расширения имени файла.
Команды можно выполнять в целевом контейнере с помощью команды RUN . Например, dockerfile в этом разделе показывает, что можно использовать RUN mkdir /dumps
для выполнения mkdir /dumps
команды в целевой ОС контейнера.
В этом примере показано содержимое dockerfile, позволяющее достичь цели этого раздела: создание контейнера Ubuntu с помощью последнего образа Ubuntu, установка последнего пакета SDK dotnet, обновление ОС, установка средств dotnet-dump и dotnet-symbol, копирование и извлечение файлов дампа и скачивание необходимых файлов с помощью средства dotnet-symbol в одном из основных файлов дампа.
Примечание.
Комментарии начинаются с знака фунта (#). Комментарии предоставляются для каждой строки, чтобы понять, что делает каждая команда.
# 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
Создайте файл с именем dockerfile в том же каталоге, который содержит файл архива coredumps.tar.gz . Помните: имя файла учитывает регистр и не имеет расширения.
Создание и запуск контейнера Docker
Опять же, необходимо переключиться на контейнеры Linux в Docker, если он работает под управлением контейнеров Windows.
Затем откройте окно командной строки и перейдите в папку, содержащую файл coredumps.tar.gz и dockerfile. Чтобы создать контейнер Docker, выполните команду docker build -t dotnettools .
.
Примечание.
Параметр -t
означает "tag". При запуске контейнера Docker вы будете использовать это имя тега.
Период (.) в конце команды означает, что команда сборки Docker будет использовать dockerfile из текущего каталога.
Ниже приведены выходные данные команды сборки. Так как одна и та же команда выполнялась несколько раз, она использует внутренний кэш для целевого образа. При первом запуске этой команды он скачивает необходимые файлы, а затем кэширует их для последующего использования при необходимости. При первом запуске команды может потребоваться некоторое время для создания образа.
Затем запустите контейнер с помощью docker container run -it dotnettools /bin/bash
команды.
Вот и все. Теперь вы находитесь в недавно созданном контейнере Linux. Остальные же, как и раньше: вы откроете основной дампа с помощью той же команды dotnet-dump: dotnet-dump analyze /dumps/coredump.manual.1.11724
Ниже приведен результат примера среды, которая используется для создания серии обучения.
Вы можете запускать команды SOS, например clrthreads
, для отображения управляемых потоков.
Теперь вы готовы проанализировать файлы основного дампа в контейнере Linux с помощью Docker.