🚀 Docker Debug のために課金しようと思った話

🚀 Docker Debug のために課金しようと思った話

はじめに

github copilot とか使って半分くらい書いてもらってます

背景

docker exec を用いた際に下記のメッセージが出たので調べてみた

nix-shell-env ❯ docker exec -ti                                                                                                                                                                              ✘ 130 

What's next:
    Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 
    Learn more at https://docs.docker.com/go/debug-cli/
docker: 'docker exec' requires at least 2 arguments

Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

See 'docker exec --help' for more information

📌 Docker Debug とは?

特徴 内容
💡 目的 稼働中コンテナを “そのまま” デバッグ
🛠️ 方式 稼働中コンテナには名前空間 join で直接シェルを挿入。停止中コンテナ/イメージにはデバッグツール付き一時コンテナを生成してアタッチ
🗓️ 歴史 2024 年 8 月以前の記事は β 版が中心。Docker Desktop 4.33 (2024-07-29) で GA へ昇格
📦 プリインストール vimcurl などの開発用ツールが同梱され、nix で追加インストールも可能

Docker Debug は、稼働中のコンテナを再ビルドすることなくデバッグを可能にするツールです。
この仕組みでは、ターゲットコンテナとは別にデバッグ用のコンテナを作成し、以下の方法でリソースを結合します:

  1. MergerFS: デバッグ用コンテナとターゲットコンテナのファイルシステムを統合し、両者が同じファイルシステムを共有できるようにします。
  2. PID 名前空間: デバッグシェルプロセスをターゲットコンテナの PID 名前空間に参加させることで、ターゲットコンテナ内のプロセスを操作可能にします。
  3. ネットワーク名前空間 (任意): ネットワーク関連のコマンドを使用する場合、ネットワーク名前空間にも参加させます。

これにより、デバッグ用コンテナからターゲットコンテナの環境にシームレスにアクセスでき、効率的なデバッグが可能になります。


⚙️ 動作フロー

graph TD
    subgraph ユーザ
        A([docker debug 実行])
    end
    subgraph Docker Engine
        B{{デバッグ<br>コンテナ起動}}
        D[(ターゲット<br>コンテナ)]
    end
    subgraph デバッグ空間
        C[(Debug Shell<br>+ Tools)]
    end

    A --> B
    B --> C
    B --> D
    C -- MergerFS で FS 統合 --> D
    C -- PID NS 参加 --> D
    C -- (任意) NET NS 参加 --> D

MergerFS とは?

MergerFS は複数のファイルシステムを1つに統合して扱えるようにするオープンソースのユーティリティです。
例えば、複数のディスクやディレクトリを1つの仮想的なファイルシステムとしてマウントし、透過的にアクセスできるようにします。
Docker Debug では、この機能を利用してデバッグ用コンテナとターゲットコンテナのファイルシステムを統合しています。

公式サイト: https://github.com/trapexit/mergerfs

最終的に

  • まだ課金していないです
この記事をシェア

弊社では、一緒に会社を面白くしてくれる仲間を募集しています。
お気軽にお問い合わせください!