前回のDay 07では、
.wslconfig を用いたリソース制御やディスク容量管理を行い、Windowsマシンをサクサク快適に保つインフラ設定をマスターしました。いよいよ本日からは、「C#エンジニアの主戦場であるVisual Studio 2022」にDockerを完全融合させます!
かつてリモート仮想マシン(VM)に
msvsmon を仕掛け、ファイアウォールと格闘しながらデバッグしていたベテランの皆さん、「F5キーを押すだけで本物のLinuxコンテナ内でブレークポイントが止まる」現代の圧倒的開発体験をぜひ体感してください!
① 導入・本日の達成目標
多くのエンジニアが「Dockerを使うには、まず複雑なDockerfileの構文を全部暗記して、黒い画面(CLI)からコマンドを打ち込まなければならない」と考えがちです。
しかし、Visual Studio 2022のコンテナ開発ツールを使えば、マウス操作わずか数クリックで業界標準のマルチステージDockerfileが自動生成され、即座にコンテナ実行・デバッグを開始できます。
本日の講義を終える頃には、以下の3つの目標を完全にクリアできるようになります。
- 仮想マシンのリモートデバッグとVS2022コンテナデバッグの決定的違いを理解し、開発生産性を10倍に高める。
- 既存のC# / ASP.NET Coreプロジェクトへ「Dockerサポート」を正しく追加し、自動生成される設定ファイル(
Dockerfile,.dockerignore)をGit管理する。 - F5キーによるコンテナ内デバッグの仕組みと「コンテナウィンドウ」を活用して、ログ・環境変数・ファイルシステム・ポートをGUIから瞬時に診断・操作できるようになる。
② リモートVMデバッグの苦痛 vs VSコンテナ即時デバッグ
ベテランエンジニアにとって、従来の「別サーバーや仮想マシン(Hyper-V/VMware)上で動くアプリのデバッグ」は非常にハードルの高い作業でした。
操作手順は驚くほどシンプルです。
- プロジェクトを右クリック: ソリューションエクスプローラー上のC#プロジェクト(例: Web API)を右クリックします。
- 「追加」➡「Docker サポート」を選択: ターゲットOSとして「Linux」(世界標準の推奨設定)を選択します。
- インフラ定義ファイルの自動生成: プロジェクト直下に
Dockerfileと.dockerignoreが自動配置され、起動プロファイル(launchSettings.json)に「Docker」が追加されます。 - プロジェクトを右クリック: ソリューションエクスプローラー上のC#プロジェクト(例: Web API)を右クリックします。
- 「追加」➡「Docker サポート」を選択: ターゲットOSとして「Linux」(世界標準の推奨設定)を選択します。
- インフラ定義ファイルの自動生成: プロジェクト直下に
Dockerfileと.dockerignoreが自動配置され、起動プロファイル(launchSettings.json)に「Docker」が追加されます。 - ① 開発用ファストコンパイル: ホストWindows側で高速に.NETビルドを行い、成果物(DLL等)を出力します。
- ② ボリュームマウント(共有): コンテナイメージを再作成せず、ホストのビルド出力フォルダをコンテナ内の
/appディレクトリに直結マウントします。 - ③ リモートデバッガ(vsdbg)の自動注入: Linux用の軽量デバッガ
vsdbgをコンテナ内に自動配置してプロセスに即時アタッチし、ブレークポイントで確実に一時停止させます。 - ① [環境・状態] タブ: コンテナの稼働状況や注入された環境変数(
ASPNETCORE_ENVIRONMENTやDB接続文字列など)を一覧確認できます。 - ② [ログ] タブ: コンテナの標準出力(ASP.NET Coreの
ILoggerやConsole.WriteLine)がリアルタイムでストリーミング表示されます。 - ③ [ポート] タブ: コンテナの内部ポートとホストWindowsの公開ポートの対応関係を確認し、ハイパーリンクをクリックして即座にブラウザアクセスできます。
- ④ [ファイル・端末] タブ: 実行中のLinuxコンテナ内のディレクトリ構造をGUI閲覧し、1クリックでターミナル接続(
sh/bash)できます。 - プロジェクト右クリック ➡「Dockerサポート」で、最適なマルチステージ
Dockerfileが即座に自動生成される。 - F5キーを押すだけで、本物のLinuxコンテナ内でアプリが立ち上がり、ローカル同様のデバッグが可能。
- 「コンテナウィンドウ(Ctrl+K, Ctrl+O)」を活用すれば、ログ・環境変数・ポート・内部ファイルをGUIで完全把握できる。
- 自動生成された
Dockerfileと.dockerignoreは必ずGitコミットしてチーム共有する。
📊 従来のリモートVMデバッグとVisual Studioコンテナデバッグの対比表
③ 右クリックで完了!Dockerサポート追加の3ステップ
Visual Studio 2022では、ソリューションエクスプローラーから極めて直感的にDocker対応を組み込むことができます。
操作手順は驚くほどシンプルです。
生成されたこれらのファイルは、ただちにGitリポジトリにコミットすることで、チームメンバー全員が同一のコンテナ定義を共有できるようになります。
④ F5キー即デバッグの裏側(Fast Modeの高速メカニズム)
「毎回Dockerイメージをフルビルドしていたら、デバッグ起動に何十秒もかかるのでは?」という疑問を持つ方も多いでしょう。
Visual Studioは「Fast Mode(高速モード)」と呼ばれる洗練された仕組みを採用しています。
Visual Studioで起動ターゲットを「Docker」にして F5キー を押すと、バックグラウンドで以下の超効率的な処理が自動実行されます。
⑤ Visual Studio「コンテナウィンドウ」の4大機能
Visual Studio 2022のメニュー「表示」➡「その他のウィンドウ」➡「コンテナ」(ショートカット: Ctrl + K, Ctrl + O)を開くと、Docker DesktopのGUIを凌駕する強力な診断コンソールが現れます。
コンテナウィンドウには、開発者が喉から手が出るほど欲しい情報がタブ形式で美しく整理されています。
⑥ Git管理とコンテナオーケストレーション拡張
Dockerサポートを追加すると生成されるファイル群は、チーム開発において最も重要なインフラ資産です。
[1] .dockerignore の重要性
Visual Studioは自動的に .dockerignore を生成します。ここには bin/ や obj/、.git など「コンテナイメージのビルドに含めてはならないファイル」が記述されています。
これをGitコミットしておくことで、不要な大容量ファイルがDockerデーモンに転送されるのを防ぎ、ビルド時間を大幅に短縮できます。
[2] コンテナオーケストレーションサポート(docker-compose)への拡張
Web API単体だけでなく、SQL ServerやRedisも同時に立ち上げてデバッグしたい場合は、プロジェクトを右クリックして「追加」➡「コンテナ オーケストレーター サポート」を選択します。
ソリューション直下に docker-compose.dcproj と docker-compose.yml が自動生成され、複数コンテナを束ねたF5デバッグが一発で可能になります!
⑦ C# / .NET 現場での実践アプローチ
Visual Studioが自動生成する標準的な Dockerfile の構造と、起動設定(launchSettings.json)のポイントを確認しましょう。
[A] Visual Studioが生成するマルチステージ Dockerfile
# 1. 実行ベースイメージ(軽量ランタイム) FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base USER app WORKDIR /app EXPOSE 8080 EXPOSE 8081 # 2. ビルド用ステージ(SDKを用いてコンパイル) FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src COPY ["MyWebApi/MyWebApi.csproj", "MyWebApi/"] RUN dotnet restore "./MyWebApi/MyWebApi.csproj" COPY . . WORKDIR "/src/MyWebApi" RUN dotnet build "./MyWebApi.csproj" -c $BUILD_CONFIGURATION -o /app/build # 3. 発行用ステージ FROM build AS publish ARG BUILD_CONFIGURATION=Release RUN dotnet publish "./MyWebApi.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false # 4. 最終製品ステージ(SDKを排除し軽量化) FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "MyWebApi.dll"]
[B] launchSettings.json の Docker プロファイル
Dockerサポートを追加すると、Properties/launchSettings.json に以下の設定が追加され、Visual Studioの起動ボタンから選択できるようになります。
{
"profiles": {
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_HTTP_PORTS": "8080",
"ASPNETCORE_ENVIRONMENT": "Development"
},
"publishAllPorts": true,
"useSSL": false
}
}
}
[C] 4大AIエージェントへの指示プロンプト例
「Visual Studio 2022で開発しているASP.NET Core 8.0 Web APIプロジェクトにDockerサポートを追加したいです。ビルドキャッシュを最適化し、非rootユーザー(appユーザー)でセキュアに動作するマルチステージDockerfileと、適切な.dockerignoreを作成してください。」
「Docker Desktopが起動していない状態でF5キーを押してビルドエラーになる罠」
Visual StudioでDockerプロファイルを選択してF5キーを押した際、Docker Desktopが起動していないと『Docker command failed with exit code 1』というエラーが発生します。
また、ソリューション直下に複数のプロジェクトがある場合、Dockerfileのビルドコンテキスト(パス指定)が狂いやすいため、必ず「ソリューションのルートディレクトリ」を基準としてパスが指定されているか確認しましょう!
『VS Code + Docker拡張機能 + WSL2ターミナル連携』〜軽量エディタで操るコンテナ開発の極意〜
コメント
コメントを投稿