ホームページ >バックエンド開発 >Python チュートリアル >Docker コンテナ内で Python および Django アプリケーションをデバッグする方法

Docker コンテナ内で Python および Django アプリケーションをデバッグする方法

王林
王林オリジナル
2024-08-06 20:21:101047ブラウズ

How to debug a Python and Django application inside a Docker container

システム開発中に経験した感情のジェットコースターは、これに少しでも遭遇したことがある人なら誰でも強く言うことができます。ただし、さまざまなプロジェクトやアプリケーションにわたって豊富な経験を持つ人にとって、システムをゼロから構築することは夢のような状況であると考えられることがよくあります。

本当の悪夢は、場合によっては数千人、数百万人のユーザーがいる既存の実行システムを保守、サポート、または進化させる必要があるときに発生します。そして、ソフトウェア開発におけるダンテの地獄の最も深い層は、問題を修正するためにコードをデバッグする必要があるです。

時々、特に始めたばかりのときは、最も単純で非公式な print() や他の言語での同等のものに頼ることがあると思います。 心配しないでください、私たちの秘密はここに安全です。ただし、最も厄介で扱いにくいバグには、効率的で強力かつ包括的なデバッグ ツールを使用する必要があることもわかっています。

私は仕事でいくつかのパフォーマンスの問題を分析するよう求められています。関数/クラスの戻り値や Grafana による時間追跡の浅い調査では、すべての絡み合ったコードの本当の問題を見つけるには十分ではありません。それでは...デバッグしてみましょう!

デバッグ

Python には、コードをデバッグするための簡単なライブラリである PDB があります。これを使用するには、pip を使用してインストールするだけです。例:

pip install pdb 

次に、デバッグするコードに 1 行を追加します。

import pdb; pdb.set_trace()

これが ブレークポイントになります。これで、アプリケーションを再度実行できるようになります。追加した行の直後に実行が一時停止されます。その後、コードを 1 行ずつ、関数ごとにステップ実行して、対処する必要がある問題を見つけます。

ドッカーを使用する

Django、Flask、または FastAPI を使用した単純な Python プロジェクトには、上記のセットアップで十分です。ただし、ここまで来て、Docker コンテナ内でアプリケーションを実行していて問題に直面しているのであれば、私も同じ道を歩んできたはずです。落ち着いて次のいくつかの手順に従ってください:

1 - 通常の PDB の代わりに、リモート デバッガー をインストールする必要があります。 Docker コンテナ内で実行します (または依存関係マネージャーにライブラリを含めます):

pip install remote-pdb 

2 - docker-compose.yml ファイルに、新しいポートを追加して PDB エントリポイントを公開します:

...
services:
  your-app:
    ...
    ports:
      - 8000:8000 # already existing port of your application
      - 4444:4444 # NEW LINE TO EXPOSE PDB PORT
    ...
...

3 - docker-compose.yml ファイルに 次の 2 行を追加して、Docker の外部から実行中のコンテナにコマンドを送信できるようにします。

...
services:
  your-app:
    ...
    ports:
      - 8000:8000
      - 4444:4444
    stdin_open: true # THIS
    tty: true        # AND THIS
    ...
...

4 - 最後に、コード内のブレークポイント行を次のように変更します。

__import__("remote_pdb").set_trace(host='0.0.0.0', port=4444)

これで、Docker イメージも実行し、好みの端末で簡単な Telnet コマンドを使用して、開いた ポート 4444 から PDB デバッガーに接続できるようになります。

telnet 0.0.0.0 4444

PDBコマンド

コードの海を賢く航行するには、PDB が提供する 便利なコマンド を使用する必要があります。ここでその一部を見てみましょう:

私は通常、コマンド step (s)next (n) だけを使用します。両者の違いは、ステップは、現在の行で呼び出される関数内の行も含めて、各行を実行することです。次に、現在の関数内の行のみを実行し、呼び出された関数が返されるのを待ちます。

他の 2 つの便利なコマンドは、関数が戻るまですべての関数を実行する return (r) と、次のブレークポイントまですべてを実行する Continue (c) です。

結論

この内容がお役に立てば幸いです。重大なパフォーマンスの問題を調査し、このテキストを執筆しながら学習を強化することで、次のことを保証できます

「適切な仕事に適切なツールを使用する」

は、ソフトウェア開発者として決して忘れてはいけないものです。それは私たちのキャリアをより効果的なレベルに引き上げ、このジェットコースターのような状況により多くの喜びをもたらすことができます。

以上がDocker コンテナ内で Python および Django アプリケーションをデバッグする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。