複数のコンテナーに接続する
現在、Visual Studio Code ウィンドウあたり1つのコンテナにのみ接続できます。ただし、複数のVS Codeウィンドウを立ち上げてそれらにアタッチすることは可能です。
代わりにdevcontainer.json
を使用したい場合で、Docker Composeを使用している場合は、ソースツリー内の各サービスに対して個別のdevcontainer.json
ファイルを作成し、それぞれが共通のdocker-compose.yml
を指すようにすることができます。
これがどのように機能するかを見るために、この例のソースツリーを考えてみましょう。
📁 project-root
📁 .git
📁 .devcontainer
📁 python-container
📄 devcontainer.json
📁 node-container
📄 devcontainer.json
📁 python-src
📄 hello.py
📁 node-src
📄 hello.js
📄 docker-compose.yml
.git
フォルダーの場所は重要です。なぜなら、ソース管理が正しく機能するためには、コンテナがこのパスを見ることができるようにする必要があるからです。
次に、ルートにあるdocker-compose.yml
が以下のようになっていると仮定します。
services:
python-api:
image: mcr.microsoft.com/devcontainers/python:1-3.12-bookworm
volumes:
# Mount the root folder that contains .git
- .:/workspace
command: sleep infinity
# ...
node-app:
image: mcr.microsoft.com/devcontainers/typescript-node:1-20-bookworm
volumes:
# Mount the root folder that contains .git
- .:/workspace
command: sleep infinity
# ...
次に、Python開発のために./devcontainer/python-container/devcontainer.json
を次のように設定できます。
{
"name": "Python Container",
"dockerComposeFile": ["../../docker-compose.yml"],
"service": "python-api",
"shutdownAction": "none",
"workspaceFolder": "/workspace/python-src"
}
次に、workspaceFolder
を変更することで、Node.js開発のために./devcontainer/node-container/devcontainer.json
を設定できます。
{
"name": "Node Container",
"dockerComposeFile": ["../../docker-compose.yml"],
"service": "node-app",
"shutdownAction": "none",
"workspaceFolder": "/workspace/node-src"
}
devcontainer.json
ファイルの"shutdownAction": "none"
はオプションですが、VS Codeが閉じてもコンテナを起動したままにします。これにより、1つのウィンドウを閉じることで両方のコンテナを誤ってシャットダウンすることを防ぎます。
複数のVS Codeウィンドウで複数のコンテナに接続する
- プロジェクトのルートレベルでVS Codeウィンドウを開きます。
- コマンドパレット(F1)からDev Containers: Reopen in Containerを実行し、
Python Container
を選択します。 - VS Codeは両方のコンテナを起動し、現在のウィンドウを再読み込みして、選択したコンテナに接続します。
- 次に、ファイル > 新しいウィンドウを使用して新しいウィンドウを開きます。
- 現在のウィンドウでプロジェクトをルートレベルで開きます。
- コマンドパレット(F1)からDev Containers: Reopen in Containerを実行し、
Node Container
を選択します。 - 現在のVS Codeウィンドウが再読み込みされ、選択したコンテナに接続されます。
これで、別々のウィンドウから両方のコンテナと対話できます。
単一のVS Codeウィンドウで複数のコンテナに接続する
- プロジェクトのルートレベルでVS Codeウィンドウを開きます。
- コマンドパレット(F1)からDev Containers: Reopen in Containerを実行し、
Python Container
を選択します。 - VS Codeは両方のコンテナを起動し、現在のウィンドウを再読み込みして、選択したコンテナに接続します。
- コマンドパレット(F1)からDev Containers: Switch Containerを実行し、
Node Container
を選択します。 - 現在のVS Codeウィンドウが再読み込みされ、選択したコンテナに接続されます。
- 同じコマンドで元に戻すことができます。
2つのコンテナに接続する際のDocker Composeファイルの拡張
開発用にDocker Composeファイルを拡張する場合は、両方のサービス(必要に応じて)を拡張し、両方のdevcontainer.json
ファイルで参照される単一のdocker-compose.yml
を使用する必要があります。
例えば、このdocker-compose.devcontainer.yml
ファイルを考えてみましょう。
services:
python-api:
volumes:
- ~:~/local-home-folder # Additional bind mount
# ...
node-app:
volumes:
- ~/some-folder:~/some-folder # Additional bind mount
# ...
両方の.devcontainer.json
ファイルは次のように更新されます。
"dockerComposeFile": [
"../../docker-compose.yml",
"../../docker-compose.devcontainer.yml",
]
このComposeファイルのリストはコンテナの起動時に使用されるため、各devcontainer.json
で異なるファイルを参照すると予期しない結果が生じる可能性があります。