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"]