こんにちは!
今回は、Docker環境をvscodeでデバックする方法をご紹介したいと思います。
やり方としては、vscodeからDockerにリモート接続をして、デバックをしていきます。
環境がWindowsでもMacでも、やり方は同じになります。
目次
環境
今回の環境
- vscodeインストール済
- Dockerインストール済
DockerでPythonの環境構築
例としてpython環境でデバックしていこうと思います。
まずは簡単にDockerでpythonの環境を作ります。
最終的なディレクトリ構成は以下のようになります。
python/
├──.devcontainer/
│ └── devcontainer.json
├── Dockerfile
├── docker-compose.yml
├── bootstrap
└── test.py
Dockerfile
Dockerfileの中身は以下のようにします。
vscodでデバック方法を確認するだけなので、pythonイメージのみにしました。
FROM python:3
docker-compose.yml
docker-compose.ymlは以下のようにしました。
こちらもデバックするだけなので、必要最低限の設定をしています。
version: '3'
services:
py-debug:
restart: always
build: .
working_dir: '/var/www/python'
tty: true
volumes:
- ./:/var/www/python
devcontainer.json
「.devcontainer」 ディレクトリを新しく作成し、その階層に「devcontainer.json」を作成してください。
「devcontainer.json」の書き方ですが、Dockerfileのみでデバックする方法と、docker-compose.ymlでデバックする方法で、指定の仕方が異なるので、それぞれの方法を解説していきます。
Dockerfileを指定する場合
Docker環境をdockerfileで作る場合は、以下のようになります。
「extensions」を設定してあげると、vscodeからリモートでDocker環境に接続したときに、自動で拡張機能をダウンロードしてくれます。
以下の例の場合、pythonの拡張機能がダウンロードされます。
{
"name": "vscode debug",
// Dockerfileのファイルパスを指定
"dockerFile": "../Dockerfile",
// リモート先にpythonの拡張機能追加
"extensions": [
"ms-python.python"
],
}
docker-compose.ymlを指定する場合
Dockerの環境をdocker-compose.ymlで作る場合は、以下のようになります。
dockerfileの時とは違い、docker-compose.ymlで設定している、service名を指定する必要があります。
今回の場合は、py-debugというservice名を指定しています。
また、workspaceFolderを指定することにより、リモート接続した際、そのフォルダにvscodeが接続しに行きます。
{
"name": "vscode debug",
// docker-compose.ymlのファイルパスを指定
"dockerComposeFile": "../docker-compose.yml",
// docker-compose.ymlで指定しているpythonのservice名を指定
"service": "py-debug",
// 指定したserviceのworkspaceフォルダを指定
"workspaceFolder": "/var/www/python",
// リモート先にpythonの拡張機能追加
"extensions": [
"ms-python.python"
]
}
devcontainer.jsonの書き方に関しては、公式のリファレンスを見ると、詳しく書かれているので、確認してみてください
devcontainer.json reference
vscodeでデバックする
拡張機能「Dev Containers」のインストール
まずは、vscodeで「Dev Containers」という拡張機能をインストールしてください。

vscodeからDockerコンテナにリモート接続する
vscodeの左下にあるアイコンをクリックします。

以下のように表示されるので、「Open Folder in Container…」を選択します。

そうすると、エクスプローラーが表示されるので、デバック対象のディレクトリを選択すると、以下のようにvscodeで接続できるようになります。

pythonのコードをデバックしてみる
それでは適当にpythonファイルを作って、デバックしていきましょう。
例として「test.py」というpythonファイルを作ってみました。
まずはブレイクポイントを適当な位置で貼ります。

「F5」を押したら以下のようなメニューが表示されるので、「pythonファイル」を選択します。

そうすると、以下のようにブレイクポイントのところで止まってくれました!

これでデバックが出来るようになります!