diadia

興味があることをやってみる。自分のメモを残しておきます。

docker環境でデバッグする方法を調べた

同期と所感

vscodeデバッグできれば様々な言語、フレームワークでも同じようにデバッグ環境を構築できるのではと期待している。 そんなわけで今回はvscodeでdockerのデバッグ環境構築を調査し、やってみた。

デバッグ環境構築して感じのは、コンテナのリモートデバッグと言われるジャンルでも、特別なやり方をせず、ローカルのデバッグ方法の延長線上にあったことだった。(vscode拡張機能を1つ追加し、組み合わせてデバッグを実現していると感じた。) 段階を踏んで試みれば、この類のデバッグは難しい作業ではないと感じた。

採用したデバッグ方法

調べてみて分かったことは、コンテナ環境でデバッグする種類には大きく分けて2種類ある。細かく見れば4種類あることが分かった。 他の言語やフレームワークでも同じようにデバッグしたいと思うので、ソースコードをいじって言語特有のライブラリを仕込んでデバッグする方法は避けた。ライブラリを使わないで実現しようとするとvscode拡張機能を使う方法に絞られた。

1.拡張機能を利用しない方法(ptvsdの利用)

2.拡張機能を利用しない方法(debugpyの利用)

3.拡張機能を利用する方法(Remote Containersをの利用)

4.拡張機能を利用する方法(Remote Developmentの利用)

こんな事書いてあった。

This Remote Development extension pack includes three extensions:

  • Remote - SSH
  • Remote - Containers
  • Remote - WSL

環境構築概要

.devcontainer/devcontainer.jsonを作成し、その後に再度remote-containersでコンテナ内部に入る。コンテナに入ったらローカルでデバッグ環境作るようにlaunch.jsonを作成し、デバッグを実行する。これだけだった。
コンテナ内に入ると拡張機能をインストールする作業があるがdevcontainer.jsonは設定ファイルで、毎回インストールする拡張機能を登録するとインストールしなくても済むようにできる。 最初のコンテナに入ることをRemote Containersは可能にしてくれてる。 Remote Containersはこのコンテナに入ることと,.devcontainerディレクトリ以下を作ってくれるのが役割だと今の所認識している。

手順

1 docker-composeで動くものを作っておく。serviceはdjangoのアプリだけではなくpostgresも合わせたdocker-compose.ymlで問題ない。

2 Remote Container拡張機能をインストールする

3 コマンドパレットを開き、でremote containers extensionを探す。選択肢として Add Development Container Configuration Filesがあるはずなのでそれを選択する。そしてFrom docker-compose.ymlを選択。そうするとdocker-compose.ymlに書かれているserviceの選択を迫られるのでdjangoアプリを選択する。 f:id:torajirousan:20210624175512p:plain

その結果.devcontainer以下が作られる。 f:id:torajirousan:20210624180002p:plain

4 次に緑部分を押すとメニューが表示されるのでRepen in Container を選択し、起動したコンテナ内に入る。 f:id:torajirousan:20210624180108p:plain f:id:torajirousan:20210624180253p:plain

5 コンテナに入ればその後はいつもどおりローカルでデバッグする手順を踏めば良い。(launch.jsonがなければ作成してデバッグ)

注意点

f:id:torajirousan:20210624181730p:plain

コンテナで起動しているサービスにアクセスする場合はターミナルに書かれているようにhttp://127.0.0.1:8000/にアクセスすれば良いというわけではない、ポート番号はランダム?に設定されているのでcommand+クリックでブラウザを開くこと。今回のケースはポートは49114番だった。