開発環境
コンテナーベースのサービスを**ローカル環境**で開発するか、**リモート環境**で開発するかを選択できます。ローカル環境は開発用ワークステーションのオペレーティングシステムです。ローカル環境を使用するということは、ワークステーションにインストールされた Docker を使用してサービスコンテナーをビルドおよび実行することを意味します。Docker は Windows、macOS、およびさまざまな Linux ディストリビューションでサポートされています。システムおよびハードウェア要件については、Docker インストールページを参照してください。
リモート開発環境は開発用ワークステーションとは異なります。SSH 経由でアクセスできるリモートマシン、開発用ワークステーション上で実行される仮想マシン、または開発コンテナーのいずれかです。リモート環境にはローカル環境に比べて利点があり、主な利点は開発中とサービスが本番稼働中に同じオペレーティングシステムを使用できることです。リモート環境を使用するには、docker
コマンド (Docker CLI) がその環境内で利用可能であり、機能していることを確認する必要があります。
2番目に重要な選択は、サービスを通常のプロセスとして実行してデバッグするか、コンテナー内で実行してデバッグするかです。
開発環境を選択するためのガイドライン
-
以下を気にしない場合は、ローカル環境を使用してください。
- 開発用とサービスコンテナー内で同じ OS を使用すること。
- ローカル環境に加えて必要なツールと依存関係をインストールすること。
-
リモート環境が必要な場合は、まず開発コンテナーの使用を検討してください。
- Windows では、Windows Subsystem for Linux (WSL) の使用が優れた選択肢です。
-
コンテナー内で実行されているサービスをデバッグすることは可能ですが、追加の複雑さをもたらします。デフォルトでは通常のデバッグを使用し、必要な場合にのみコンテナー内でのデバッグを使用してください。
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 を有効にするためのグラフィカル設定があります。
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 拡張機能パックから使用して、リモートマシンに接続し、そこで作業できます。
-
VS Code のコマンドパレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) を開き、コマンド Remote-SSH: Add new SSH host... を実行します。プロンプトに従って、ターゲットホストへの接続を設定します。
-
コマンド Remote-SSH: Connect to host... を実行し、ホストに接続します。
-
新しい VS Code ウィンドウが開き、ターゲットマシンのコンテキストで実行されます。パスワード認証を使用している場合は、ここでパスワードが求められます。使いやすさのため、SSH キー認証を設定することを強くお勧めします。
-
拡張機能ビューで、Container Tools 拡張機能を (リモートホストに) インストールします (この手順の後、再読み込みが必要になる場合があります)。
注意: 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
タスク) を参照してください。
次のステップ
詳細については、以下を参照してください。