スキップしてメイン コンテンツに移動

【Day 08】Visual Studio 2022のコンテナツール拡張とDockerサポート追加

Day 08 アイキャッチ
▲ Day 08: Visual Studio 2022 × Docker / 右クリックとF5キーで始めるLinuxコンテナ開発
🐳
皆さん、こんにちは! Docker/コンテナ実践講座の専任講師です。
前回の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)上で動くアプリのデバッグ」は非常にハードルの高い作業でした。

VMリモートデバッグ vs VSコンテナデバッグの進化
▲ 【図解①】旧来のmsvsmonリモートデバッグの苦痛とVS2022コンテナデバッグの完全対比

操作手順は驚くほどシンプルです。

  1. プロジェクトを右クリック: ソリューションエクスプローラー上のC#プロジェクト(例: Web API)を右クリックします。
  2. 「追加」➡「Docker サポート」を選択: ターゲットOSとして「Linux」(世界標準の推奨設定)を選択します。
  3. インフラ定義ファイルの自動生成: プロジェクト直下に Dockerfile と .dockerignore が自動配置され、起動プロファイル(launchSettings.json)に「Docker」が追加されます。
  4. 📊 従来のリモートVMデバッグとVisual Studioコンテナデバッグの対比表

    比較項目 従来のVMリモートデバッグ Visual Studio 2022 × Docker
    事前準備 VM側に msvsmon 配置、FW開放、権限設定 不要(VSがデバッガを自動コンテナ注入)
    起動トリガー VM起動 ➡ ビルド転送 ➡ プロセス手動アタッチ F5キーを押すだけ(1秒起動&自動アタッチ)
    実行環境OS Windows Serverまたは重いLinux VM 本番と完全同一の軽量Linuxコンテナ(Alpine/Debian)
    コード変更時(再デバッグ) 再ビルドしてバイナリをリモートコピー(数分) ホットリロード / 高速ビルド(数秒)

    ③ 右クリックで完了!Dockerサポート追加の3ステップ

    Visual Studio 2022では、ソリューションエクスプローラーから極めて直感的にDocker対応を組み込むことができます。

    右クリックでDockerサポート追加の3ステップ
    ▲ 【図解②】プロジェクト右クリックから Dockerfile と .dockerignore が自動生成される3ステップ

    操作手順は驚くほどシンプルです。

    1. プロジェクトを右クリック: ソリューションエクスプローラー上のC#プロジェクト(例: Web API)を右クリックします。
    2. 「追加」➡「Docker サポート」を選択: ターゲットOSとして「Linux」(世界標準の推奨設定)を選択します。
    3. インフラ定義ファイルの自動生成: プロジェクト直下に Dockerfile と .dockerignore が自動配置され、起動プロファイル(launchSettings.json)に「Docker」が追加されます。

    生成されたこれらのファイルは、ただちにGitリポジトリにコミットすることで、チームメンバー全員が同一のコンテナ定義を共有できるようになります。

    ④ F5キー即デバッグの裏側(Fast Modeの高速メカニズム)

    「毎回Dockerイメージをフルビルドしていたら、デバッグ起動に何十秒もかかるのでは?」という疑問を持つ方も多いでしょう。
    Visual Studioは「Fast Mode(高速モード)」と呼ばれる洗練された仕組みを採用しています。

    F5キー即デバッグの内部メカニズム
    ▲ 【図解③】高速コンパイル・ボリューム共有・vsdbg注入によるF5即時デバッグの仕組み

    Visual Studioで起動ターゲットを「Docker」にして F5キー を押すと、バックグラウンドで以下の超効率的な処理が自動実行されます。

    • ① 開発用ファストコンパイル: ホストWindows側で高速に.NETビルドを行い、成果物(DLL等)を出力します。
    • ② ボリュームマウント(共有): コンテナイメージを再作成せず、ホストのビルド出力フォルダをコンテナ内の /app ディレクトリに直結マウントします。
    • ③ リモートデバッガ(vsdbg)の自動注入: Linux用の軽量デバッガ vsdbg をコンテナ内に自動配置してプロセスに即時アタッチし、ブレークポイントで確実に一時停止させます。

    ⑤ Visual Studio「コンテナウィンドウ」の4大機能

    Visual Studio 2022のメニュー「表示」➡「その他のウィンドウ」➡「コンテナ」(ショートカット: Ctrl + K, Ctrl + O)を開くと、Docker DesktopのGUIを凌駕する強力な診断コンソールが現れます。

    Visual Studio コンテナウィンドウの4大機能
    ▲ 【図解④】ログ・環境変数・ポート・内部ファイルをGUIで完全透視するコンテナウィンドウ

    コンテナウィンドウには、開発者が喉から手が出るほど欲しい情報がタブ形式で美しく整理されています。

    • ① [環境・状態] タブ: コンテナの稼働状況や注入された環境変数(ASPNETCORE_ENVIRONMENT やDB接続文字列など)を一覧確認できます。
    • ② [ログ] タブ: コンテナの標準出力(ASP.NET Coreの ILogger や Console.WriteLine)がリアルタイムでストリーミング表示されます。
    • ③ [ポート] タブ: コンテナの内部ポートとホストWindowsの公開ポートの対応関係を確認し、ハイパーリンクをクリックして即座にブラウザアクセスできます。
    • ④ [ファイル・端末] タブ: 実行中のLinuxコンテナ内のディレクトリ構造をGUI閲覧し、1クリックでターミナル接続(sh/bash)できます。

    ⑥ 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エージェントへの指示プロンプト例

    🤖 Antigravity / Claude Code への指示プロンプト:

    「Visual Studio 2022で開発しているASP.NET Core 8.0 Web APIプロジェクトにDockerサポートを追加したいです。ビルドキャッシュを最適化し、非rootユーザー(appユーザー)でセキュアに動作するマルチステージDockerfileと、適切な.dockerignoreを作成してください。」

    ⚠️ 30年選手がハマりやすい現場の落とし穴

    「Docker Desktopが起動していない状態でF5キーを押してビルドエラーになる罠」
    Visual StudioでDockerプロファイルを選択してF5キーを押した際、Docker Desktopが起動していないと『Docker command failed with exit code 1』というエラーが発生します。
    また、ソリューション直下に複数のプロジェクトがある場合、Dockerfileのビルドコンテキスト(パス指定)が狂いやすいため、必ず「ソリューションのルートディレクトリ」を基準としてパスが指定されているか確認しましょう!

    📌 本日のまとめ & 明日へのステップ
    • プロジェクト右クリック ➡「Dockerサポート」で、最適なマルチステージ Dockerfile が即座に自動生成される。
    • F5キーを押すだけで、本物のLinuxコンテナ内でアプリが立ち上がり、ローカル同様のデバッグが可能。
    • 「コンテナウィンドウ(Ctrl+K, Ctrl+O)」を活用すれば、ログ・環境変数・ポート・内部ファイルをGUIで完全把握できる。
    • 自動生成された Dockerfile と .dockerignore は必ずGitコミットしてチーム共有する。
    次回【Day 09】予告:
    『VS Code + Docker拡張機能 + WSL2ターミナル連携』〜軽量エディタで操るコンテナ開発の極意〜

コメント

このブログの人気の投稿

【Perfume】Perfume 3rd Tour 「JPN」さいたまスーパーアリーナに行って参りました~

Perfume 3rd Tour 「JPN」1月28日、29日の2daysで参戦して参りました。 ファンクラブ会員の選考抽選会に28日、29日の両日で申し込んでいたんですが、両方とも当選していたという嬉しい誤算。 仕事だぁ、なんだかんだと紆余曲折ありまして28日の参戦は危ぶまれていたのですが、なんとかかんとか28日は40分遅刻しながらも参戦、29日はフル参戦する事が出来ました(∩´∀`)∩

Perfume、2025年末で“コールドスリープ(活動休止)”へ──東京ドーム2daysの記録と、公式・各界・ファンの声

  1) 公式発表・基本情報 活動休止(コールドスリープ)を正式発表 2025年9月21日、公式サイト「 Perfumeより 」で、2026年から一度コールドスリープに入ると発表。再始動の意思(“新しいPerfume”として戻る)も明記。 Perfume Official Site 今後の運用告知(配信・上映など) 同21日付の「 今後のPerfumeに関して 」で、9/23(火・祝)東京ドーム公演の LIVESHIP全世界生配信 および 全国ディレイビューイング 決定を案内。特設サイトも併記。 Perfume Official Site +1 公式グッズ **「Perfume Calendar 2026」**発売決定(B2壁掛け/表紙+2カ月1枚×6枚+ポスター)。テーマは“フルーツ”。 Perfume Official Site 2) 東京ドーム2days(9/22・23)要点 公演タイトル: ZO/Z5 Anniversary “ネビュラロマンス” Episode TOKYO DOME 。日程・開場/開演・会場・物販等の実務情報は特設で公開。 Perfume Official Site 9/23公演を世界配信(LIVESHIP) /ディレイビューイング実施。 Perfume Official Site 海外向け報道(英語)も「 indefinite hiatus 」として広く配信。 The Times of India 国内英字メディアも速報。 朝日新聞 3) 現地レポ( メリ爺 )から見える空気 あなたの現地記録(9/24公開)を、ファクトと現場情景の両面で反映: 両日参戦 。22日は アリーナ 、23日は 1階席から俯瞰 。前日の発表を受け、開演前のザワつき→MC後に“いつもの一体感”へ。開演は22日 18:45 頃。オープニングは**P³ツアー東京ドーム(2020/2)**と同趣向で“回収”の演出。 メリ爺のゲーム万歳 MC所感 :解散ではなく前向きな休止で不安を和らげる内容。 かしゆか の涙、 のっち の気丈さ、 あ〜ちゃん の思い出語り──3人の結束と「 また戻る 」約束が強く刻まれた。 メリ爺のゲーム万歳 体感時間 : “3時間弱”級のボリューム ながら“過去一...

ニンテンドースイッチでオンラインゲームを遊ぶには?

モンスターハンターライズが発売になって、家族でモンハン楽しみたい人が増えたみたいですね。 某ブログの検索キーワードを調べると、モンハンを家族でやるにはどうしたらいいのか?を調べている人が沢山いるのがわかります。 ※これでも一部  家族で協力するにはSwitch2台、ソフトも2つ購入する必要があります。 1台のスイッチでは遊べませんし、ソフト1つでも遊べません。 でも、1台のスイッチで別々アカウントがあれば交代で遊ぶこともできますよ。セーブデータもしっかり分かれます。 Switchのオンラインゲームを家族で遊ぶ方法については以下の記事にまとめてますのでよろしければ参考にしてみてくださいね。 家族でモンスターハンターライズDL版のオンラインプレーを楽しむ方法