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 バージョン 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 がインストールされ、動作している場合、VS Code の Remote - SSH 拡張機能を Remote Development 拡張機能パックから使用して、リモートマシンに接続し、そこで作業できます。

  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 コンテキストメカニズムを使用して、開発用ワークステーションで実行されている Docker ホスト (エンジン) に CLI を向けることもできます。このアプローチにおける主な懸念事項は、VM からホスト上の Docker エンジンへのネットワーク接続を確保し、それを安全な方法で行うことです。1つのオプションは、開発用ワークステーションへのSSH トンネリングまたはRemote - Tunnelsを使用することです。別のオプションは、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 タスク) を参照してください。

次のステップ

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