Construyendo una imagen de contenedor bpftrace con Dockerfile
BPFtrace es una poderosa herramienta de trazado de sistemas basada en eBPF, que se puede utilizar para rastrear la dinámica de sistemas y aplicaciones. Este artículo presentará cómo construir una imagen de Docker que admita BPFtrace utilizando Dockerfile, de modo que esta herramienta pueda utilizarse en un entorno containerizado.
Explicación del Dockerfile
FROM r.j3ss.co/bcc
La imagen base es r.j3ss.co/bcc
, que es una imagen precompilada que contiene el conjunto de herramientas BCC (BPF Compiler Collection).
ENV PATH /usr/share/bcc/tools:$PATH
Establece la variable de entorno PATH
, para que las herramientas BCC puedan ejecutarse directamente más adelante.
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
Modifica la lista de fuentes de APT, agregando las fuentes contrib
y non-free
para asegurar que se puedan instalar algunos paquetes de software no gratuitos.
RUN apt-get update && apt-get install -y \
ca-certificates \
clang \
curl \
gcc \
git \
g++ \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
Instala una serie de dependencias requeridas para construir BPFtrace, incluyendo clang
, gcc
, git
, etc. La opción --no-install-recommends
evita instalar paquetes recomendados, reduciendo el tamaño de la imagen. Finalmente, limpia el caché de APT para reducir aún más el tamaño de la imagen.
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
Establece la versión de BPFtrace a instalar y clona el código fuente desde GitHub. Luego, ingresa al directorio del código fuente, usa cmake
para generar archivos de compilación y usa el comando make
para compilar e instalar BPFtrace. La opción -j8
puede utilizar múltiples núcleos para acelerar el proceso de compilación. Finalmente, limpia los archivos de compilación intermedios para reducir el tamaño de la imagen.
ENTRYPOINT ["bpftrace"]
Establece el punto de entrada del contenedor en el comando bpftrace
, de modo que BPFtrace se pueda ejecutar directamente al iniciar el contenedor, y se puedan pasar los parámetros y scripts de sonda requeridos.
Construyendo y utilizando la imagen
Utilice el siguiente comando para construir la imagen basada en este Dockerfile:
docker build -t bpftrace:latest .
Después de que se complete la compilación, puede iniciar el contenedor y ejecutar BPFtrace con el siguiente comando:
docker run --rm -it --privileged bpftrace:latest /usr/share/bcc/tools/execsnoop
Este comando ejecuta la herramienta execsnoop
, que puede rastrear la creación de nuevos procesos. La opción --privileged
es requerida porque BPFtrace necesita acceder a las características del kernel.
A través de esta imagen, podemos ejecutar BPFtrace en un entorno de contenedor controlado y repetible para análisis de rendimiento, solución de problemas y otros escenarios, mejorando enormemente la eficiencia del trabajo.
Script completo
FROM r.j3ss.co/bcc
ENV PATH /usr/share/bcc/tools:$PATH
# Agregar fuentes apt no gratuitas
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/*
# Construir 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"]