なにがあったか
docker-composeで立ち上げたpythonコンテナをデバッグするときに、VSCodeからDockerで立ち上げたコンテナにattachしてデバッグするのが面倒だと思っていた。
普通にフォルダが表示されるまで時間がかかるし、ソースコードを削除しているコンテナの場合、追加でボリュームをマウントしてとかの作業も発生する。
(このあたりも実はdevcontainer.jsonとかに書けば自動でやってくれるのかな)
生産性が低いのでなんとかしたいと思っていて、VSCodeのドキュメントを読み返していた。
解法
以下は簡単なサンプルコード
github.com
やっていることとしては、docker-compose.debug.yamlを>|-f|<オプションに与えることで、既存の設定を置き換えている。
主な変更点は下記
- entrypointを専用の実行スクリプトで置き換える(debugpyのインストールとdebupyのサーバを実行)
- 専用の実行スクリプトをDocker volumeでマウント
- ポート5678番をホストと共有(debugpyの通信用)
Dockerfileでentrypointを定義している場合もdocker-composeから置き換えるので、release用のコードを変更する必要は全くない。
また、Release用のコンテナではコンテナ容量削減のためにインストールに使ったPythonソース等を削除することは(pip installとかでフォルダをまるごとインストールされたパッケージを`python -m module_name`とかで実行するような使い方)
自分調べではよくやられていると思うが、この場合、深層にあるソースコードをわざわざ探しに行く羽目になるが、それははっきり言って大変なので避けたい。
これについてもDocker volumeでソースディレクトリをコンテナ内のカレントディレクトリにマウントしてやれば良い気がする。
>|python -m module_name|<とするとインストールしたパッケージではなくカレントディレクトリのモジュールがインポートされてそのままデバッグされるはずだ。