Aller au contenu principal

Construire une image de conteneur bpftrace avec Dockerfile

BPFtrace est un puissant outil de traçage du système basé sur eBPF, qui peut être utilisé pour tracer la dynamique des systèmes et des applications. Cet article présentera comment construire une image Docker prenant en charge BPFtrace à l'aide de Dockerfile, afin que cet outil puisse être utilisé dans un environnement conteneurisé.

Explication du Dockerfile

FROM r.j3ss.co/bcc

L'image de base est r.j3ss.co/bcc, qui est une image pré-construite contenant l'ensemble d'outils BCC (BPF Compiler Collection).

ENV PATH /usr/share/bcc/tools:$PATH

Définit la variable d'environnement PATH, afin que les outils BCC puissent être exécutés directement par la suite.

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

Modifie la liste des sources APT, en ajoutant les sources contrib et non-free pour s'assurer que certains packages logiciels non gratuits peuvent être installés.

RUN apt-get update && apt-get install -y \
ca-certificates \
clang \
curl \
gcc \
git \
g++ \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*

Installe une série de dépendances requises pour la construction de BPFtrace, y compris clang, gcc, git, etc. L'option --no-install-recommends évite d'installer les paquets recommandés, réduisant ainsi la taille de l'image. Enfin, efface le cache APT pour réduire davantage la taille de l'image.

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

Définit la version de BPFtrace à installer, et clone le code source à partir de GitHub. Ensuite, entre dans le répertoire du code source, utilise cmake pour générer les fichiers de construction, et utilise la commande make pour compiler et installer BPFtrace. L'option -j8 peut utiliser plusieurs cœurs pour accélérer le processus de compilation. Enfin, nettoie les fichiers de construction intermédiaires pour réduire la taille de l'image.

ENTRYPOINT ["bpftrace"]

Définit le point d'entrée du conteneur sur la commande bpftrace, afin que BPFtrace puisse être exécuté directement au démarrage du conteneur, et que les paramètres et les scripts de sonde requis puissent être passés.

Construire et utiliser l'image

Utilisez la commande suivante pour construire l'image basée sur ce Dockerfile :

docker build -t bpftrace:latest .

Une fois la construction terminée, vous pouvez démarrer le conteneur et exécuter BPFtrace avec la commande suivante :

docker run --rm -it --privileged bpftrace:latest /usr/share/bcc/tools/execsnoop

Cette commande exécute l'outil execsnoop, qui peut tracer la création de nouveaux processus. L'option --privileged est requise car BPFtrace a besoin d'accéder aux fonctionnalités du noyau.

Grâce à cette image, nous pouvons exécuter BPFtrace dans un environnement conteneurisé contrôlé et reproductible pour l'analyse des performances, le dépannage et d'autres scénarios, améliorant grandement l'efficacité du travail.

Script complet

FROM r.j3ss.co/bcc

ENV PATH /usr/share/bcc/tools:$PATH

# Ajouter les sources apt non gratuites
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/*

# Construire bpftrace
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"]