Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WindowsコンテナDojo : 第1回 Visual StudioでWindowsコンテナアプリ作成

WindowsコンテナDojo : 第1回 Visual StudioでWindowsコンテナアプリ作成

Windowsアプリ開発の定番開発環境であるVisual StudioとDocker Desktop for Windowsを使って、テンプレートからアプリをビルドし、Windowsコンテナ対応のアプリ開発とデバッグの基礎を学びます。

2022/4/28 18:00からのイベントの最中に、Windowsコンテナ対応アプリがビルドされない問題を見つけました。繰り返し試し、回避方法の一つを見つけましたので、資料に反映しています。

E5eb221d34d4ffbe973f8542b4c3a00e?s=128

Akira Onishi (IBM)
PRO

April 28, 2022
Tweet

More Decks by Akira Onishi (IBM)

Other Decks in Programming

Transcript

  1. ೔ຊΞΠɾϏʔɾΤϜגࣜձࣾ ςΫϊϩδʔࣄۀຊ෦ ΧελϚʔɾαΫηε ϓϦϯγύϧɾϚωʔδϟʔ ݉ 8JOEPXT$POUBJOFS1PSUJOH1SPHSBNਪਐϦʔμʔ େ੢ জ "LJSB0OJTIJ!JCNDPN 5XJUUFS!POJBL

     IUUQTXXXGBDFCPPLDPNBLJSBPOJTIJ IUUQTXXXMJOLFEJODPNJOPOJBL Windows ίϯςφ %PKP ୈճ Visual Studio Ͱ Windows ίϯςφΞϓϦ࡞੒ ߋ৽ ηογϣϯதʹίϯςφରԠ ΞϓϦ͕Ϗϧυ͞Εͳ͍໰୊Λ ݟ͚ͭ·ͨ͠ɻ ճආํ๏ͷҰͭΛࢿྉʹ࢒ͯ͠ ͍·͢
  2. ࣗݾ঺հ 1SPQFSUZ 7BMVF ࢯ໊ େ੢ জ 5XJUUFS-JOLFE*O POJBL *5ۀքྺ ೥໨

    ௚ۙͷ৬ྺ Microsoft ೥ *#.೥໨ )BTI5BH ͍͍Ͷ͐੩Ԭੜ׆ ࠲ӈͷ໏ ౿·Εͯ΋ͳ্ཱ͓͕ͪΔಓͷ૲ Α͘࢖͏ٕ ೴಺ม׵Ͱࣗ෼ΛϙδςΟϒʹ IUUQTXXXGBDFCPPLDPNBLJSBPOJTIJ 'BDFCPPLʮ͓ʹ͋͘ʯͰݕࡧ
  3. ୈճͷൣғ Windows ίϯςφͷ։ൃ͔Β࣮ߦɺશମ૾ Visual Studio ͱ Windows ίϯςφΞϓϦ։ൃ Windows ίϯςφ

    %PKP४උฤʹࢀՃ͞Εͨํ Λ૝ఆͯ͠࿩ΛਐΊ͍͖ͯ·͢ɻ IUUQTWJEFPJCNDPNSFDPSEFE
  4. Windows ίϯςφ http://aka.ms/windowscontainers ೥݄ʹൃද ϗετ04 Windows Server 2016 Windows Server

    2019 Windows Server 2022 Windows 10 Windows 11 ࠔͬͨ࣌͸ɺ ඞͣެࣜυΩϡϝϯτΛ ࢀর͠·͠ΐ͏
  5. コンテナレジストリ (第2回Dojo) docker hub 開発/テスト環境 (第1回/第3回Dojo) Docker Desktop for Windows

    Visual Studio 2022 ίϯςφͷ։ൃ͔Β࣮ߦ·Ͱͷશମ૾ コンテナ実⾏環境 (第2回Dojo) Windows Server 2019 マシンA: Windows 10 Pro (Enterprise) / Windows 11 Pro (Enterprise) Hyper-V イメージの公開 イメージから 展開 マシンB (仮想マシン)
  6. 開発/テスト環境 (第1回Dojo) Docker Desktop for Windows Visual Studio 2022 ࠓ೔ͷ࿩୊

    マシンA: Windows 10 Pro (Enterprise) / Windows 11 Pro (Enterprise) 1. Docker Desktop for Windows Windows コンテナモード 2. Visual Studio Container Tools for Docker 3. テンプレートによる ASP.NET アプリの開発 4. Dockerfile について 5. Docker 上で動作するアプリの デバッグ
  7. Docker Desktop for Windows ͷઃఆ Windows ίϯςφ ࣮ߦϞʔυ ͪ͜ΒΛར༻ -JOVY

    ίϯςφ ࣮ߦϞʔυ
  8. Docker ίϚϯυͷ࣮ߦ https://docs.docker.com/engine/reference/commandline/cli/ 何も指定せずに docker コマンドだけを実⾏すると CLI (コマンドラインインターフェイス)の 説明が表⽰されます

  9. Visual Studio ͷ Docker αϙʔτ IUUQTEPDTNJDSPTPGUDPNKBKQWJTVBMTUVEJPDPOUBJOFSTPWFSWJFX WJFXWT ඞਢίϯϙʔωϯτ Docker Desktop

    for Windows Visual Studio 2022 対応プロジェクト ASP.NET ASP.NET Core コンソール (.NET Framework, .NET Core)
  10. Windows ίϯςφରԠΞϓϦͷ։ൃ  ⼿順2: Visual Studio 2022を起動し、 [新しいプロジェクトの作成]を クリックします ⼿順1:

    Docker Desktop for Windowsを Windows コンテナモードにします。 マシンA
  11. Windows ίϯςφରԠΞϓϦͷ։ൃ  ⼿順3: [ASP.NET Web アプリケーション (.NET Framework)]テンプレートを 選択し、[次へ]をクリックします

    マシンA
  12. Windows ίϯςφରԠΞϓϦͷ։ൃ  ⼿順4: プロジェクト名: HelloContainer01 と⼊⼒ フレームワーク: .NET Framework

    4.8 を選択し、[作成]をクリックします マシンA
  13. Windows ίϯςφରԠΞϓϦͷ։ൃ  ⼿順5: 左側のリストから[Web Forms]を選択 詳細設定: [HTTPS⽤の構成] チェックを外す [Dockerのサポート]

    チェックを⼊れる 最後に[作成]をクリックします マシンA
  14. Windows ίϯςφରԠΞϓϦͷ։ൃ  ⼿順6: Visual Studio の[出⼒] ウィンドウを 開いて、 [出⼒元]

    から [コンテナ ツール]を 選択します ⼿順7: 「コンテナが正常に開始されました。」 と表⽰されていることを確認します マシンA 準備編でお伝えしたようにASP.NET コンテナを⼀度でも実⾏していれば この⼿順はすぐに完了します ASP.NETコンテナを実⾏していない 場合は、イメージの読み込みと展開 を忍耐強くお待ちください
  15. Windows ίϯςφରԠΞϓϦͷ։ൃ  ⼿順8: [F5]キーを押す、あるいは [Docker]ボタンをクリックし、 プロジェクトをデバッグ実⾏します マシンA

  16. ˞ΞϓϦͷϏϧυ͕ਐߦ͠ͳ͍৔߹ ⼿順1: [ビルド] – [キャンセル] を実⾏、 あるいは [Ctrl] + [Break]

    キーを押す ⼿順2︓[ビルド]-[ソリューションのクリーン]を実⾏ ⼿順3: [Docker]ボタン、 または[F5]キーを押して、デバッグ実⾏ 「進⾏中のコンテナーのウォームアップが完了する のを待機しています。」を表⽰したまま、 デバッグ実⾏の際に、ビルドが進まないケースが セッション中に⾒つかりました。 イベント終了後に、何回か試して回避する⽅法が 作れたので、メモとして残しておきます。
  17. Windows ίϯςφରԠΞϓϦͷ։ൃ  ⼿順9: ブラウザが⾃動的に開き、ASP.NETと 書かれたページが表⽰されることを 確認します ⼿順10: ⼿順9で開いたブラウザを終了します。 マシンA

  18. Windows ίϯςφରԠΞϓϦͷ։ൃ  ⼿順11: ブラウザが終了すると、Visual Studioの デバッグ実⾏が終了することを 確認します [出⼒]ウインドウの [出⼒元]が[デバッグ]に変わり、

    「w3wp.exe' はコード 0 (0x0) で 終了しました。」と表⽰されているのを 確認します ※ w3wp.exe は Internet Information Services (IIS) のワーカープロセス マシンA
  19. %PDLFSGJMFͷ֬ೝ ⼿順1: [ソリューション エクスプローラー]から [Dockerfile]を⾒つけ、ダブルクリック します ⼿順2: Dockerfileの内容をテキストエディタで 確認します マシンA

  20. %PDLFSGJMF ͷ಺༰ FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019 ARG source WORKDIR /inetpub/wwwroot COPY ${source:-obj/Docker/publish}

    . https://docs.docker.com/engine/reference/builder/ FROM <コンテナのイメージ名>:<バージョンの指定> ARG <設定したい環境変数> WORKDIR <コマンドを実⾏する作業ディレクトリ> COPY <コピー元> <コピー先> シェルパラメータ拡張/展開 ${source:-obj/Docker/publish} 環境変数 sourceが未設定/Nullの場合: obj/Docker/publish が参照される そうでなければ 環境変数 source が参照される
  21. ίϯςφରԠΞϓϦͷσόοά  ⼿順1: Visual Studioの [ソリューション エクスプローラー]を 開きます ⼿順2: [Contact.aspx]のツリーを⾒つけ、

    展開します ⼿順3: [Contact.aspx.cs] をダブルクリックして エディタで開きます ⼿順4: コードの13⾏⽬( { 記号があるところ)に カーソルを移動し、[F9]キーを押します ⼿順5: エディタの左端に⾚い丸印を確認します マシンA
  22. ίϯςφରԠΞϓϦͷσόοά  ⼿順6: [F5]キーを押して、デバッグ実⾏します ⼿順7: ブラウザが開き、アプリが表⽰されたら ページの上側にある[問い合わせ] を クリックします マシンA

  23. ίϯςφରԠΞϓϦͷσόοά  ⼿順8: Visual Studioのテキスト エディターが 開き、⼿順5で設定した ブレークポイント で実⾏が⽌まります ⼿順9:

    [ローカル]ウィンドウを開いて、 アプリ内のオブジェクト(変数)を 確認します ⼿順10: [コマンド ウィンドウ]を開いて、 sender と⼊⼒し、[Enter]キーを押します。 ⼿順11: senderの内容が出⼒されるのを 確認します マシンA
  24. ίϯςφରԠΞϓϦͷσόοά  ⼿順12: [F10]キーを押します ⼿順13: ブレークポイントから次のステップに 進んだことを確認します この場合はPage_Loadメソッドの 終了位置にカーソルが進みます ⼿順14:

    [F5]キーを押して、アプリを続⾏します ⼿順15: ブラウザを終了して、デバッグ実⾏を 終了します マシンA
  25. 開発/テスト環境 (第1回Dojo) Docker Desktop for Windows Visual Studio 2022 ·ͱΊ

    マシンA: Windows 10 Pro (Enterprise) / Windows 11 Pro (Enterprise) 1. Docker Desktop for Windows Windows コンテナモード 2. Visual Studio Container Tools for Docker 3. テンプレートによるASP.NET アプリの開発 4. Dockerfileについて 5. Docker上で動作するアプリの デバッグ
  26. ワークショップ、セッション、および資料は、IBMまたはセッション発表者によって準備され、それぞれ独⾃の⾒解を反映したものです。それらは情報 提供の⽬的のみで提供されており、いかなる参加者に対しても法律的またはその他の指導や助⾔を意図したものではなく、またそのような結果を⽣むも のでもありません。本講演資料に含まれている情報については、完全性と正確性を期するよう努⼒しましたが、「現状のまま」提供され、明⽰または暗 ⽰にかかわらずいかなる保証も伴わないものとします。本講演資料またはその他の資料の使⽤によって、あるいはその他の関連によって、いかなる損害 が⽣じた場合も、IBMは責任を負わないものとします。 本講演資料に含まれている内容は、IBMまたはそのサプライヤーやライセンス交付者からいかな る保証または表明を引きだすことを意図したものでも、IBMソフトウェアの使⽤を規定する適⽤ライセンス契約の条項を変更することを意図したもので もなく、またそのような結果を⽣むものでもありません。 本講演資料でIBM製品、プログラム、またはサービスに⾔及していても、IBMが営業活動を⾏っているすべての国でそれらが使⽤可能であることを暗⽰ するものではありません。本講演資料で⾔及している製品リリース⽇付や製品機能は、市場機会またはその他の要因に基づいてIBM独⾃の決定権をもっ

    ていつでも変更できるものとし、いかなる⽅法においても将来の製品または機能が使⽤可能になると確約することを意図したものではありません。本講 演資料に含まれている内容は、参加者が開始する活動によって特定の販売、売上⾼の向上、またはその他の結果が⽣じると述べる、または暗⽰すること を意図したものでも、またそのような結果を⽣むものでもありません。 パフォーマンスは、管理された環境において標準的なIBMベンチマークを使⽤し た測定と予測に基づいています。ユーザーが経験する実際のスループットやパフォーマンスは、ユーザーのジョブ・ストリームにおけるマルチプログラ ミングの量、⼊出⼒構成、ストレージ構成、および処理されるワークロードなどの考慮事項を含む、数多くの要因に応じて変化します。したがって、 個々のユーザーがここで述べられているものと同様の結果を得られると確約するものではありません。 記述されているすべてのお客様事例は、それらのお客様がどのようにIBM製品を使⽤したか、またそれらのお客様が達成した結果の実例として⽰された ものです。実際の環境コストおよびパフォーマンス特性は、お客様ごとに異なる場合があります。 IBM、IBM ロゴ、ibm.com、IBM Cloud、IBM Cloud Paksは、 世界の多くの国で登録されたInternational Business Machines Corporationの商標です。他 の製品名およびサービス名等は、それぞれIBMまたは各社の商標である場合があります。現時点での IBM の商標リストについては、 www.ibm.com/legal/copytrade.shtmlをご覧ください。 Microsoft, Windows, Windows Server, .NET Framework, .NET, .NET Coreは、Microsoft Corporationの商標または登録商標です。