Dockerfileを使ったbpftraceコンテナイメージの構築
BPFtraceはeBPFに基づいた強力なシステムトレースツールであり、システムおよびアプリケーションレベルの動的な操作を追跡するために使用できます。この記事では、Dockerfileを使用してbpftraceをサポートするDockerイメージを構築する方法を紹介し、このツールをコンテナ化された環境で使用できるようにします。
Dockerfileの説明
FROM r.j3ss.co/bcc
ベースイメージはr.j3ss.co/bccで、BCC(BPF Compiler Collection)ツールセットを含む事前に構築されたイメージです。
ENV PATH /usr/share/bcc/tools:$PATH
環境変数PATHを設定して、後でBCCツールを直接実行できるようにします。
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
APTソースリストを修正し、contribおよびnon-freeソースを追加して、一部の非フリーソフトウェアパッケージがインストールできるようにします。
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のビルドに必要な依存関係のシリーズをインストールします。これにはclang、gcc、gitなどが含まれます。--no-install-recommendsオプションは推奨パッケージをインストールしないことにより、イメージのサイズを減らします。最後に、APTキャッシュをクリアしてイメージのサイズをさらに削減します。
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
インストールするBPFtraceのバージョンを設定し、GitHubからソースコードをクローンします。その後、ソースコードディレクトリに入り、cmakeを使用してビルドファイルを生成し、makeコマンドでBPFtraceをコンパイルおよびインストールします。-j8オプションは、複数のコアを使用してコンパイルプロセスを加速することができます。最後に、イメージのサイズを減らすために中間ビルドファイルを削除します。
ENTRYPOINT ["bpftrace"]
コンテナのエントリポイントをbpftraceコマンドに設定し、コンテナを起動するときにBPFtraceを直接実行し、必要なパラメータとプローブスクリプトを渡すことができます。
イメージのビルドと使用
以下のコマンドを使用して、このDockerfileに基づいてイメージをビルドします。
docker build -t bpftrace:latest .
ビルドが完了したら、以下のコマンドでコンテナを起動し、BPFtraceを実行できます。
docker run --rm -it --privileged bpftrace:latest /usr/share/bcc/tools/execsnoop
このコマンドは、新しいプロセスの作成を追跡するexecsnoopツールを実行します。--privilegedオプションは、BPFtraceがカーネル機能にアクセスする必要があるため必要です。
このイメージを通じて、パフォーマンス分析、トラブルシューティングなどのシナリオで、制御可能で繰り返し可能なコンテナ環境でBPFtraceを実行することができ、作業効率を大幅に向上させることができます。
全スクリプト
FROM r.j3ss.co/bcc
ENV PATH /usr/share/bcc/tools:$PATH
# Add non-free apt sources
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/*
# Build 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"]