Erstellen eines bpftrace-Container-Images mit Dockerfile
BPFtrace ist ein leistungsstarkes Systemtracing-Tool basierend auf eBPF, das zur Verfolgung von System- und Anwendungsebenen-Dynamiken verwendet werden kann. Dieser Artikel führt ein, wie mit Dockerfile ein Docker-Image erstellt wird, das BPFtrace unterstützt, sodass dieses Tool in einer containerisierten Umgebung verwendet werden kann.
Dockerfile-Erläuterung
FROM r.j3ss.co/bcc
Das Basis-Image ist r.j3ss.co/bcc
, ein vorgefertigtes Image, das die BCC-Toolsammlung (BPF Compiler Collection) enthält.
ENV PATH /usr/share/bcc/tools:$PATH
Setzen der PATH
-Umgebungsvariable, damit BCC-Tools später direkt ausgeführt werden können.
RUN sed -i "s#deb http://deb.debian.org/debian buster main#deb http://deb.debian.org/debian buster main contrib non-free#g" /etc/apt/sources.list
Ändern der APT-Quellenliste, Hinzufügen von contrib
- und non-free
-Quellen, um die Installation einiger nicht-freier Softwarepakete zu gewährleisten.
RUN apt-get update && apt-get install -y \
ca-certificates \
clang \
curl \
gcc \
git \
g++ \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
Installation einer Reihe von Abhängigkeiten, die zum Erstellen von BPFtrace erforderlich sind, einschließlich clang
, gcc
, git
usw. Die Option --no-install-recommends
vermeidet die Installation empfohlener Pakete und verringert die Image-Größe. Abschließend wird der APT-Cache gelöscht, um die Image-Größe weiter zu verringern.
ENV BPFTRACE_VERSION v0.10.0
RUN git clone --depth 1 --branch "$BPFTRACE_VERSION" https://github.com/iovisor/bpftrace.git /usr/src/bpftrace \
&& ( \
cd /usr/src/bpftrace \
&& mkdir build \
&& cd build \
&& cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr .. \
&& make -j8 \
&& make install \
) \
&& rm -rf /usr/src/bpftrace
Setzen der zu installierenden BPFtrace-Version und Klonen des Quellcodes von GitHub. Anschließend wird das Quellcode-Verzeichnis betreten, cmake
generiert die Build-Dateien und der make
-Befehl kompiliert und installiert BPFtrace. Die Option -j8
kann mehrere Kerne nutzen, um den Kompiliervorgang zu beschleunigen. Abschließend werden die temporären Build-Dateien bereinigt, um die Image-Größe zu verringern.
ENTRYPOINT ["bpftrace"]
Setzen des Einstiegspunkts des Containers auf den bpftrace
-Befehl, sodass BPFtrace direkt beim Starten des Containers ausgeführt werden kann und die erforderlichen Parameter und Probe-Skripte übergeben werden können.
Image erstellen und verwenden
Verwenden Sie den folgenden Befehl, um basierend auf diesem Dockerfile ein Image zu erstellen:
docker build -t bpftrace:latest .
Nach Abschluss des Builds können Sie den Container mit dem folgenden Befehl starten und BPFtrace ausführen:
docker run --rm -it --privileged bpftrace:latest /usr/share/bcc/tools/execsnoop
Dieser Befehl führt das execsnoop
-Tool aus, mit dem die Erstellung neuer Prozesse verfolgt werden kann. Die Option --privileged
ist erforderlich, da BPFtrace auf Kernelfunktionen zugreifen muss.
Mit diesem Image können wir BPFtrace in einer kontrollierten und wiederholbaren Container-Umgebung für Leistungsanalysen, Fehlerbehebungen und andere Szenarien ausführen, was die Arbeitseffizienz erheblich steigert.
Vollständiges Skript
FROM r.j3ss.co/bcc
ENV PATH /usr/share/bcc/tools:$PATH
# Nicht-freie APT-Quellen hinzufügen
RUN sed -i "s#deb http://deb.debian.org/debian buster main#deb http://deb.debian.org/debian buster main contrib non-free#g" /etc/apt/sources.list
RUN apt-get update && apt-get install -y \
ca-certificates \
clang \
curl \
gcc \
git \
g++ \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
# BPFtrace erstellen
ENV BPFTRACE_VERSION v0.10.0
RUN git clone --depth 1 --branch "$BPFTRACE_VERSION" https://github.com/iovisor/bpftrace.git /usr/src/bpftrace \
&& ( \
cd /usr/src/bpftrace \
&& mkdir build \
&& cd build \
&& cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr .. \
&& make -j8 \
&& make install \
) \
&& rm -rf /usr/src/bpftrace
ENTRYPOINT ["bpftrace"]