VS Codeのエージェントモードを拡張するには、を試してください!

開発環境

ローカル環境でコンテナーベースのサービスを開発するか、リモート環境で開発するかを選択できます。ローカル環境は開発者ワークステーションのオペレーティングシステムであり、ローカル環境を使用するということは、ワークステーションにインストールされた Docker を使用してサービスコンテナーをビルドして実行することを意味します。Docker は Windows、macOS、およびさまざまな Linux ディストリビューションでサポートされています。システムおよびハードウェアの要件については、Docker インストールページを参照してください。

リモート開発環境は、開発者ワークステーションとは異なります。SSH を介してアクセスできるリモートマシン、開発者ワークステーションで実行されている仮想マシン、または開発コンテナーの場合があります。リモート環境はローカル環境よりも利点があり、主な利点は、開発中およびサービスが運用環境で実行されているときに同じオペレーティングシステムを使用できることです。リモート環境を使用するには、docker コマンド (Docker CLI) がその環境内で利用可能で機能することを確認する必要があります。

2番目の重要な選択肢は、通常のプロセスとして実行されているサービスをデバッグするか、コンテナー内で実行されているサービスをデバッグするかです。

開発環境を選択するためのガイドライン

  1. 次の場合にローカル環境を使用します。

    • 開発とサービスコンテナー内で同じ OS を使用している場合。
    • ローカル環境の上に、必要なツールと依存関係をインストールする場合。
  2. リモート環境が必要な場合は、まず開発コンテナーの使用を検討してください。

  3. コンテナー内で実行されているサービスをデバッグすることは可能ですが、追加の複雑さをもたらします。デフォルトでは通常のデバッグを使用し、必要な場合にコンテナー内でデバッグを使用します。

Container Tools 拡張機能は、.NET、Node.js、および Python ベースのサービスのコンテナーデバッグをネイティブにサポートしています。

リモート開発環境内で Docker CLI を有効にする

リモート開発環境内で Docker CLI を有効にする方法は、選択したリモート環境の種類によって異なります。

開発コンテナー

開発コンテナーの場合、コンテナー内の Docker CLI をローカルマシンで実行されている Docker デーモンにリダイレクトする必要があります。

まず、Docker CLI が開発コンテナーにインストールされていることを確認します。正確な手順は、コンテナーが使用している Linux ディストリビューションによって異なります

以下は、Ubuntu ベースのディストリビューションの例です(.devcontainer/Dockerfile から)

    ...
    && apt-get -y install software-properties-common \
    && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - 2>/dev/null \
    && add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" \
    && apt-get update -y \
    && apt-get install -y docker-ce-cli \
    && apt-get install -y python python-pip \
    && pip install docker-compose \
    ...

次に、Docker ソケットが開発コンテナーにマップされていることを確認します(.devcontainer/devcontainer.json で)。

    ...
    "runArgs": [ "-v", "/var/run/docker.sock:/var/run/docker.sock"]
    ...

Windows Subsystem for Linux

Windows Subsystem for Linux は、Windows でコンテナーベースのサービス開発を行うための優れた選択肢です。Windows Subsystem for Linux version 2 (WSL 2) を強くお勧めします。Docker Desktop for Windows は WSL 2 で動作するように更新されており、WSL 2 ディストリビューション内で Docker CLI を有効にするためのグラフィカルな設定があります。

Enable Docker inside WSL 2 distribution

Docker 開発に WSL 2 を使用するには、Windows 10 バージョン 2004 以降、および Docker Desktop for Windows バージョン 2.2.0.5 以降が必要です。

古いバージョンの WSL (WSL 1) では、ホスト上の Docker デーモンに簡単に接続する方法が提供されていません。

リモートマシン

リモートマシンでコンテナー開発を有効にする推奨される方法は、Docker デーモンを含む完全な Docker インストールをマシンに実行することです。

: Docker Desktop 製品は、物理的な Windows および macOS マシンでのみサポートされており、仮想マシンではサポートされていません。仮想マシンをリモート開発環境として使用したい場合は、Docker Engine を搭載した Linux VM を使用することをお勧めします。

Docker がリモートマシンにインストールされて動作した後、Remote Development 拡張機能パックの Remote - SSH 拡張機能を使用して、リモートマシンに接続して作業できます。

  1. VS Code コマンドパレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) を開き、コマンド Remote-SSH: Add new SSH host... を実行します。プロンプトに従って、ターゲットホストへの接続を設定します。

  2. コマンド Remote-SSH: Connect to host... を実行し、ホストに接続します。

  3. 新しい VS Code ウィンドウが開き、ターゲットマシンのコンテキストで実行されます。パスワード認証を使用している場合は、ここでパスワードが要求されます。使いやすさのために、SSH キー認証を設定することを強くお勧めします。

  4. 拡張機能ビューで Container Tools 拡張機能 (リモートホスト上) をインストールします (このステップの後にリロードが必要な場合があります)

    Screenshot - Installing the Container Tools extension

: Container Tools 拡張機能を使用してコンテナーイメージをビルドし、ソースコードがある場合、上記のアプローチは、ソースのエンリストメントが開発者ワークステーションではなくリモートホストにあることを意味する可能性があります。Container Tools 拡張機能を Container Explorer 機能のみに使用している場合は、この点は無視してかまいません。

ローカル Linux VM

開発者ワークステーションで実行されている Linux 仮想マシンを使用するには、リモートマシンにインストールするのと同じ方法で VM にDocker をインストールし、VS Code Remote-SSH 拡張機能を使用して VM に接続する必要があります。

あるいは、開発環境内に Docker CLI のみをインストールし、Docker コンテキストメカニズムを使用して、CLI を開発者ワークステーションで実行されている Docker ホスト(エンジン)にポイントすることもできます。このアプローチの主な懸念事項は、VM からホスト上の Docker エンジンへのネットワーク接続を安全な方法で確保することです。1つのオプションは、開発者ワークステーションへのSSH トンネリングまたはRemote - Tunnelsを使用することです。もう1つのオプションは、Docker エンジンを HTTPS ポートでリッスンさせることです。VM 内で実行されている Docker CLI からホストの Docker エンジンを使用するには、SSH と公開鍵インフラストラクチャ(PKI)に習熟している必要があります。ほとんどのユーザーには、仮想マシン内に完全な Docker インストールを推奨します。

コンテナー内でのデバッグ

Container Tools 拡張機能は、コンテナー内で実行されている .NET および Node.js ベースのサービスのデバッグをサポートしています。他のプログラミング言語は現時点ではサポートされていません。

コンテナー内でのデバッグは、コンテナーがプロセスよりも強力な分離メカニズムであるため、通常のデバッグよりも設定が難しい場合があります。特に、

  • VS Code プロセス内で実行されているデバッグエンジンは、デバッグされているサービスプロセスと通信する必要があります。コンテナー内で実行されているサービスの場合、これは共通ネットワーク(通常は Docker ホストネットワーク)を介したネットワーク通信を意味します。デバッグエンジンがサービスプロセス(Node.js)またはコンテナー内で実行されているデバッガプロキシ(.NET)に接続できるように、コンテナーは適切なポートを Docker ホストネットワークを介して公開する必要があります。
  • ビルド時に生成されるソースファイル情報は、ビルド環境(VS Code が実行されている場所)のコンテキストで有効です。コンテナーのファイルシステムはビルド環境のファイルシステムとは異なり、ブレークポイントにヒットしたときにデバッガが正しいソースファイルを表示できるように、ソースファイルへのパスを再マップする必要があります。

上記の懸念があるため、一般的に通常のデバッグを使用し、必要な場合にコンテナー内でのデバッグを使用することをお勧めします。

コンテナー内でのデバッグの設定方法の詳細については、ASP.NET Core クイックスタートNode.js クイックスタート、およびContainer Tools 拡張機能タスクプロパティdocker-build および docker-run タスク)を参照してください。

次のステップ

詳細については、以下を参照してください。