コンテナーは、アプリケーションが独自の環境内で実行するために必要なコードと依存関係を含むソフトウェアの一部として定義されます。その結果、コンテナは互いに分離され、同じホスト オペレーティング システムを共有します。Docker ランタイムは、ホスト オペレーティング システム (Windows または Linux) にインストールする必要があります。 この .NET プログラミング チュートリアルでは、コンテナー化、Docker、および ASP.NET 6 アプリケーションを Docker にデプロイする方法について説明します。 読む: .NET 開発者向けの生産性向上ツール
コンテナ化とは?
コンテナー化は、アプリケーションを実行するための仮想環境を作成するテクノロジーです。アプリケーションをコンテナー化すると、アプリケーションは分離された空間で実行され、実行に必要なものはすべて含まれ、外部の依存関係はありません。 これにより、構成を変更せずに (同じ OS をサポートしている限り) コンテナーをマシン間またはパブリック クラウド プロバイダー間で移動できるため、コンテナーは軽量でポータブルになります。コンテナを使用すると、開発者はリソースを共有しながら、アプリケーションを互いに分離できます。 コンテナー化は、アイテムの発送に似ていると考えることができます。イメージは、アプリケーションのすべてのファイルを含む箱のようなものです。イメージを使用してアプリケーションの新しいインスタンスを作成すると、それらのすべてのファイルにアクセスできるインスタンスになります。中身。 これは、あるインスタンスで何かが発生した場合 (誰かがそれに侵入した場合)、プログラマーは他のインスタンスで問題が発生することを心配する必要がないことを意味します。
ドッカーとは?なぜそれが必要なのですか?
Docker は、アプリケーションの構築、展開、および管理を簡素化するオープンソースのコンテナー プラットフォームです。Docker コンテナーは、仮想コンピューターに代わる、よりポータブルで軽量な代替手段を提供できます。コンテナーは、多くの場合、アプリケーション、そのランタイム、および依存ライブラリをカプセル化します。 Docker は、開発者がアプリケーション、その依存関係、およびその構成を標準化されたユニットにパッケージ化できるようにするツールキットです。Docker がインストールされていると仮定すると、そのユニットをコンピューターで実行できます。Docker を使用すると、開発、テスト、ステージング、本番環境など、複数の環境にわたってアプリケーションを簡単に配布および複製できます。 Docker を使用すると、開発者のソフトウェア アプリケーションを分離されたコンテナーにパッケージ化できます。Docker を使用すると、Docker をサポートするすべてのプラットフォームでアプリケーションを実行できます。ASP.NET 6 でアプリケーションを開発し、Docker コンテナーにデプロイすると、プログラマーは、複数のコンテナーを操作したり、開発環境と運用環境の間でアプリケーションを簡単に共有したりできるなど、多くの利点を得ることができます。
Docker のインストール方法
ここから Docker for Windows をダウンロードできます: https://docs.docker.com/desktop/windows/install/ Docker がコンピューターにインストールされたら、次のコマンドを使用して、インストールされている Docker のバージョンを確認できます。
docker --バージョン
読む: .NET 開発者向けのプロジェクト管理ソフトウェア
Visual Studio で新しい ASP.NET Web API プロジェクトを作成する
このセクションでは、Visual Studio で新しい ASP.NET Web API プロジェクトを構築する方法について説明します。
- Visual Studio IDE を開く
- 「コードなしで続行」をクリックします。
- ファイルに移動| 新しい | 計画
- 「ASP.NET Core Web API」プロジェクト テンプレートを選択します。
- [次へ] をクリックして次の画面に進みます
- 作成するプロジェクトの名前と作成するディスク上の場所を指定します
- ソリューション ファイルをプロジェクトと同じディレクトリに作成する場合は、「ソリューションとプロジェクトを同じディレクトリに配置する」というチェックボックスを選択します。それ以外の場合は、選択を解除したままにしてください。
- [次へ] をクリックして先に進みます
- 「追加情報」画面で、使用するターゲット フレームワークを指定します。
- 認証タイプを指定するか、必要ない場合は「なし」を選択します。
- 図 1 に示すように、 [ Dockerを有効にする] チェックボックスがオンになっていることを確認します。
- 他のチェックボックスの選択を解除できます
- [作成]をクリックしてプロセスを完了し、前に指定したパスに新しい ASP.NET Web アプリケーション プロジェクトが作成されるようにします。
Docker で ASP.NET アプリケーションをデプロイする方法
Docker を使用して ASP.NET アプリケーションをデプロイするには、最初にDockerfileをビルドする必要があります。このファイルは、Docker コンテナーで使用するためにアプリケーションを開発およびパッケージ化する方法を指定します。「docker build」コマンドを使用すると、Dockerfile をビルドした後にコンテナー イメージを生成できます。イメージが作成されたら、「docker run」コマンドでコンテナーを起動できます。
Dockerfile の内容を編集する
Dockerfile は使いやすく、バージョン管理とカスタマイズが容易です。これらは、Docker コンテナー イメージを作成するプロセスを定義するために使用されます。Dockerfile は、Docker がイメージをビルドするための一連の指示を含むテキスト ファイルです。次のセクションで構成されています。
- FROM – イメージを構築するベース イメージを指定します。
- MAINTAINER – このリポジトリおよび/またはそのコンテンツを管理する人を識別します (オプション)
- COPY – 実行時にローカル マシンのパスからコンテナの新しく作成されたレイヤーにファイルをコピーします
- RUN – COPYステートメントまたはADDコマンドで作成された新しいレイヤー内でコマンドを実行します。
Dockerfile が Visual Studio でどのように表示されるかを次に示します。
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS ベース WORKDIR /アプリ 露出80 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS ビルド WORKDIR /src COPY ["DockerDemo.csproj", "."] dotnet restore "./DockerDemo.csproj" を実行します。 コピー 。. WORKDIR "/src/." RUN dotnet build "DockerDemo.csproj" -c Release -o /app/build FROM ビルド AS パブリッシュ RUN dotnet publish "DockerDemo.csproj" -c Release -o /app/publish FROM ベース AS 最終 WORKDIR /アプリ COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "DockerDemo.dll"]
Docker Composeを使用すると、マルチコンテナー アプリケーションを作成して実行できます。これは、Web アプリケーションとデータベースを実行している場合など、複数のコンテナーを実行する必要がある状況で役立ちます。 読む: C# と ASP.NET で Serilog を使用する方法
ASP.NET アプリケーションを Docker にデプロイするコマンド
アプリケーションを正常にビルドしたら、管理者モードでコマンド ウィンドウを開き、次のコマンドを実行して Docker イメージを作成します。
docker build -t dockerdemo .
そして、それだけです!
Docker イメージを実行する方法
前に作成した Docker イメージを実行するには、コマンド ウィンドウで次のコマンドを使用できます。
docker run -d -p 8080:80 --name testapp dockerdemo
ASP.NET と Docker に関する最終的な考え
ASP.NET 6 は .NET Core ランタイムで実行されるため、macOS、Linux、Windows などの複数のプラットフォームで実行できます。このプログラミング チュートリアルでは、コンテナー化、その利点、および ASP.NET 6 アプリケーションを Docker にデプロイする方法について調べました。 ASP.NET プログラミング チュートリアルとソフトウェア開発ガイドの詳細をご覧ください。 物事がうまくいったとしたら、それは素晴らしいことではないでしょうか? 特に、絶え間なく変化するソフトウェアの世界では。依存関係の問題を追跡し、不可解なオペレーティング システム エラーをデバッグすることは、時間の無駄です。 「機能する」ことの重要な側面の 1 つは、信頼性です。最近、ソフトウェア コミュニティはテスト駆動型開発と継続的インテグレーション プロセスで進歩を遂げ、品質を向上させ、もちろん信頼性を向上させています。しかし、それはここまでしかできません。オペレーティング システムは多くの機能を実行し、多くの機能を組み込んでいるため、それらを確実に実行することは非常に困難な作業です。信頼性向上の核となる秘密は、可動部品が少ないことです。この投稿では、Docker を使用して、可動部分が少ない、隔離された最小限の環境でアプリケーションを実行する方法について説明します。
サンプル アプリの依存関係: ASP.Net Core および Docker パッケージ
Docker でアプリをビルドするには、まず Dockerize するアプリが必要です。このチュートリアルでは、ASP.NET Core MVC アプリへのログインの追加に関する以前のブログ投稿の ASP.Net Core プロジェクトを使用します。
このブログ投稿では、ID 管理に Okta を使用する単純な .Net Core アプリケーションを構築する方法を示しています。そのブログ投稿に取り組むか、少なくともそれを読んでレポを複製する必要があります。 また、次のものが必要です。
- ドッカー
- Docker Compose
- OpenSSL
ASP.NET Core アプリケーションをビルドする
Docker を使用すると、ローカル マシンで実行するアプリケーションを作成するのとほぼ同じ方法でアプリケーションを構築できます。すぐに始めるには、この git リポジトリをクローンします。
git clone https://github.com/oktadeveloper/okta-aspnet-mvc-core-sqlite-example.git
ASP.NET Core アプリの ID 管理を構成する
まず最初に、Okta 開発者コンソールを使用して ID 管理を提供するアプリケーションをセットアップします。
- Okta 開発者コンソールにログインします
- トップメニューからアプリケーションを選択します
- アプリケーションの追加ボタンをクリックします
- プラットフォームとしてWebを選択し、[次へ] をクリックします。
- [設定]ページで:
- 名前: MyOktaApp
- ベース URI:
https://localhost:5001
- ログイン リダイレクト URI:
https://localhost:5001/authorization-code/callback
- [完了]をクリックしてアプリケーションを作成します
アプリを作成したら、[編集] をクリックしていくつかの設定を変更します。
- ログアウト リダイレクト URI:
https://localhost:5001/signout-callback-oidc
- ログイン URI を開始します。
https://localhost:5001/authorization-code/callback
ページの下部に、ClientID と Client secret を含む Client Credentials が表示されます。後で使用するために、これらをメモしておいてください。
ASP.NET Core アプリの設定を更新する
作成したサンプル アプリケーションにはappsettings.json
、完全な投稿を実行するのではなく、上記のリポジトリを複製しない限り、ID 管理構成が に保存されています。実際には、セキュリティ上の理由から、この構成をソース コードに保存しないでください。この投稿では、アプリケーションに動的構成を確実に渡し、このセキュリティ ギャップを埋める方法を示します。設定を削除することから始めます。 編集appsettings.json
して削除:
"Okta": { "ClientId": "{OktaClientId}", "ClientSecret": "{OktaClientSecret}", "Domain": "https://{yourOktaDomain}.okta.com" },
この変更をテストするには: 返す必要があります:
An exception of type 'System.ArgumentNullException' occurred in Okta.AspNet.Abstractions.dll but was not handled in user code: 'Your Okta URL is missing. Okta URLs should look like: https://{yourOktaDomain}. You can copy your domain from the Okta Developer Console.'
よくやった!
Docker を使用して ASP.NET Core アプリをコンテナー化する
Docker は、使いやすいパッケージにまとめられた仮想化テクノロジのコレクションです。ただし、「仮想化」につまずかないようにしてください。Docker は仮想マシンを扱いません。代わりに、複数の分離されたコンテナー間でカーネルを共有することによって機能します。これらのコンテナはそれぞれ、同じカーネルを共有している可能性のある他のコンテナをまったく認識せずに動作します。対照的に、仮想マシンは、それ自体がホスト オペレーティング システム上で実行される仮想化されたハードウェア プラットフォーム上で、複数の個別のオペレーティング システムを実行します。Docker ははるかに軽量であり、多数の Docker コンテナを単一のホスト マシンで実行できます。
Docker を使用して ASP.NET Core アプリをビルドする
Docker を動かしてみましょう。アプリケーションを Docker 化する鍵は、Dockerfile
. プロジェクトのルートに次の内容を追加して開始します。
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build WORKDIR /src COPY ["OktaMvcLogin.csproj", "./"] RUN dotnet restore "./OktaMvcLogin.csproj" COPY . . RUN dotnet build "OktaMvcLogin.csproj" -c Release -o /app
大文字は Docker コマンドです。その数は多くありませんが、Docker の Web サイトですべての詳細を確認できます。 FROM
コンテナーに使用するイメージを Docker に指示します。イメージは、圧縮されたファイル システムのスナップショットです。また、ビルドの結果はDockerfile
新しいイメージです。したがって、a をDockerfile
1 つのイメージからアプリケーションを含む別のイメージに変換する一連の変換と見なす 1 つの方法があります。
WORKDIR
後続のコマンドを実行するために使用するディレクトリを Docker に指示します。COPY
ローカル ファイル システムからコンテナー イメージにファイルをコピーするように Docker に指示します。RUN
コンテナ イメージ内でコマンドを実行します。
つまり、平易な英語で言えば、これはでホストされている画像Dockerfile
に基づいています。Docker はローカルの作業ディレクトリからファイルをコピーしてイメージを作成し、参照されているすべてのパッケージを復元します。それが完了すると、Docker は残りのファイルを作業ディレクトリからコピーし、リリースビルドを に作成します。dotnet/core/sdk
mcr.microsoft.com
.csproj
dotnet restore
dotnet build
/app
Docker で依存関係を効率的に管理する
restore
これを読んで、ソース コードをコピーして実行する前に、わざわざプロジェクト ファイルをコピーして実行する必要があると思うかもしれませんbuild
。すべてをコピーしてから、ビルドと復元をワンステップで実行してみませんか? 答えはキャッシングです。Dockerfile
Docker イメージが変更されるたびに、Docker はスナップショットを作成します。ファイルをコピーするか、コマンドを実行してパッケージをインストールすると、Docker は新しいスナップショットの違いをキャプチャします。イメージが変更されていない場合、Docker はスナップショットをキャッシュして再利用します。そのため、依存関係を別の手順として復元することで、依存関係が変更されていない限り、イメージ スナップショットをすべてのビルドで再利用できます。依存関係のダウンロードには時間がかかる場合があるため、このプロセスによりビルドが大幅に高速化されます。
Docker コンテナーで ASP.NET Core アプリを実行する
前述のように、Dockerfile
一連のファイルシステム変換と見なすことができます。現在のファイルは、Microsoft 提供の SDK コンテナーを新しいコンテナーに変換し、Microsoft SDK とアプリケーションのリリース ビルドの両方が に格納され/app
ます。 これを試してください::
# Build an image using the Dockerfile in the current directory docker build --target build -t oktamvclogin . # Run the image, executing the command 'ls /app' docker run -it oktamvclogin ls /app
app
コンテナー イメージ内のフォルダーに、プロジェクトのリリース ビルド出力が含まれていることがわかります。 ここまでで、Docker コンテナー内にアプリケーションを構築しました。よくやった! ただし、Docker はツールとして、アプリケーション内の可動部分の数を減らすことを忘れないでください。不要な依存関係を排除して信頼性を向上させるには、開発ツールも削除する必要があります。これにより、競合が発生し、セキュリティ リスクが生じる可能性があります。Microsoft が提供する SDK イメージには開発ツールが含まれているため、それらを削除する方法を見てみましょう。 に次の行を追加しますDockerfile
。
FROM build AS publish RUN dotnet publish "OktaMvcLogin.csproj" -c Release -o /app FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS base WORKDIR /app EXPOSE 5001 FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "OktaMvcLogin.dll"]
それぞれに節があるいくつかのFROM
コマンドが表示されます。AS
この構文は、不要な依存関係を取り除くための鍵となるマルチステージ ビルドを提供します。簡単に言えば、ビルド プロセスは次のようになります。
- SDK イメージを使用して、アプリケーションのリリース ビルドを作成します。このステージを「ビルド」と呼びます
- ‘build’ ステージ イメージを使用して、アプリケーションを ‘app’ フォルダーに公開します。このステージを「公開」と呼びます
- ランタイム コンポーネントのみを含む Microsoft 提供の ASP.NET コア イメージをダウンロードします。このステージを「ベース」と呼びます
- 「ベース」ステージ イメージを使用して、「発行」ステージから「アプリ」ディレクトリの内容をコピーします。この段階を「最終」と呼ぶ
そのためDockerfile
、SDK イメージを使用してアプリケーションをビルドしてから、そのイメージを破棄し、ランタイム イメージを使用してアプリケーションを実行します。
Docker で ASP.NET Core アプリケーションを実行する
このENTRYPOINT
コマンドには特に注意が必要です。これまで、Dockerfile が一連のファイルシステム変換を定義する方法を見てきましたが、多くの場合、Docker コンテナーは実行可能です。つまり、Docker でコンテナーを実行すると、完全に構成された実行中のアプリケーションが得られるということです。ENTRYPOINT
それを機能させるメカニズムの1つです。コンテナを実行すると、Docker は で指定されたコマンドを実行しますENTRYPOINT
。アプリケーションの場合、そのコマンドはdotnet OktaMVCLogin.dll
. だから今…
docker build -t oktamvclogin . docker run oktamvclogin
… 前と同じ例外をスローします。
Unhandled Exception: System.ArgumentNullException: Your Okta URL is missing. Okta URLs should look like: https://{yourOktaDomain}. You can copy your domain from the Okta Developer Console.
今回だけ Dockerized です。進捗状況はどうですか? から機密性の高い構成を削除したため、アプリケーションは機能しませんappsettings.json
。
構成を Docker に渡す
この問題を解決するには、構成を環境変数として Docker コンテナーに渡す必要があります。ASP.NET Core は、プレフィックスが付いたすべての環境変数を取得しASPNETCORE_
、に変換__
し:
ます。の構成値を渡し、Okta:ClientId
コマンドを次のようOkta:ClientSecret
にOkta:Domain
変更するには:
docker run -e ASPNETCORE_Okta__ClientId="{yourClientId}" \ -e ASPNETCORE_Okta__ClientSecret="{yourClientSecret}" \ -e ASPNETCORE_Okta__Domain="https://{yourOktaDomain}" \ oktamvclogin
今回は、結果が少し健康的になります。
Hosting environment: Production Content root path: /app Now listening on: 'http://[::]:80' Application started. Press Ctrl+C to shut down.
注: 「XML 暗号化がありません」という警告が表示される場合もあります。このウォークスルーではそれを無視できます。
Docker ネットワークの構成
http://localhost
このメッセージから、アプリにアクセスしてそのすべての栄光を見ることができると思うかもしれません. ただし、アプリはコンテナー内で実行され、ポート 80 でリッスンしますが、既定では、ローカル コンピューターはコンテナーのポート 80 にアクセスできません。コンテナは独自の小さな世界で実行されることを忘れないでください。その世界には独自の仮想ネットワークがあり、デフォルトでロックダウンされています。 ありがたいことに、ローカル マシンのポートをコンテナーのポートにマッピングすることで、コンテナーの仮想ネットワークにすばやくアクセスできます。
docker run -e ASPNETCORE_Okta__ClientId="{yourClientId}-" \ -e ASPNETCORE_Okta__ClientSecret="{yourClientSecret}" \ -e ASPNETCORE_Okta__Domain="{yourOktaDomain}" \ -p 5001:80 \ oktamvclogin
ここで、ブラウザーを開いてhttp://localhost:5001
(コンテナー内でポート 5001 をポート 80 にマップしたため) に移動すると、ほら! 注: このアプローチは開発に適しています。ただし、実稼働ワークロードの場合、Docker は仮想ネットワークを管理するために設計された包括的なオプション セットを提供します。詳細については、Docker のドキュメントのネットワークの概要を参照してください。
Docker イメージの SSL/TLS を構成する
アプリケーションの [ログイン] リンクをクリックすると、Okta から次のメッセージを含むエラーが表示される可能性があります。
Description: The 'redirect_uri' parameter must be an absolute URI that is whitelisted in the client app settings.
この問題は、Okta ダッシュボードでアプリケーションを構成したときに、リダイレクト URL が HTTPS であることを指定したために発生します。HTTP を使用してサイトにアクセスしたため、リダイレクト URL が一致せず、このエラーが発生します。1 つの解決策は、Okta アプリケーションでリダイレクト URL を更新することです。それはうまくいきますが、それは悪い考えです。リダイレクトには機密情報が含まれており、転送中に読み取られないようにするには、TLS チャネルを使用して保護する必要があります。
自己署名証明書を作成する
TLS をセットアップするには、証明書が必要です。実生活では、評判の良いプロバイダーから証明書を購入しますが、このウォークスルーでは、自己署名証明書が役に立ちます。 証明書を生成します。
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
Kestrel (ASP.NET Core Web サーバー) で証明書を使用するにはpfx
、公開キーと秘密キーの両方を含むファイルを作成する必要があります。次を使用してそれを行うことができます。
openssl pkcs12 -export -out webserver.pfx -inkey key.pem -in cert.pem
証明書作成プロセスの一環として、エクスポート パスワードを作成するよう求められます。後で証明書を使用する際に必要になるため、必ずメモしておいてください。また、構成プロセス (国名、州または州など) についても説明します。
証明書を Docker イメージに追加する
ローカル ファイル システムに証明書を作成しました。Docker コンテナで使用するには、Dockerfile を変更して最終的なイメージにコピーします。 「最終」ステージを次のように変更します。
FROM base AS final ENV ASPNETCORE_URLS="https://+" ENV ASPNETCORE_Kestrel__Certificates__Default__Path="./webserver.pfx" WORKDIR /app COPY --from=publish /app . COPY webserver.pfx . ENTRYPOINT ["dotnet", "OktaMvcLogin.dll"]
ASPNETCORE_URLS 環境変数を設定しhttps://+
て、Web サーバーが https 要求のみをリッスンするようにします。 Dockerfile を変更したので、イメージを再構築して実行できます。
docker build -t oktamvclogin . docker run -e ASPNETCORE_Okta__ClientId="{yourClientId}" \ -e ASPNETCORE_Okta__ClientSecret="{yourClientSecret}" \ -e ASPNETCORE_Okta__Domain="{yourOktaDomain}" \ -e ASPNETCORE_Kestrel__Certificates__Default__Password="{yourExportPassword}" \ -p 5001:443 \ oktamvclogin
証明書のエクスポート パスワードを含む追加の環境変数と、ポート マッピングがポート 80 からポート 443 に変更されていることに注意してください。 に移動できるhttps://localhost:5001
ようになりました。今度は、ログインしてサンプル アプリケーションを正しく使用できるようになります。 注: 自己署名証明書を使用しているため、ブラウザに警告ページが表示される場合があります。この警告は無視しても問題ありません。
Docker コンテナを起動する最良の方法ではない
アプリケーションを Docker で実行するように変換することは比較的簡単で、大きなメリットがあります。ただし、構成の負荷全体を に渡すことdocker run
は、特にユーザーフレンドリーではなく、エラーが発生しやすくなります。ありがたいことに、Docker の優秀な人々は、この問題に対する解決策をすでに考え出しています — docker-compose
. Docker Compose の使用は非常に簡単です。ソースコードとdocker-compose.yml
同じフォルダーに名前の付いたファイルを作成し、次を追加します。Dockerfile
version: "3" services: web: build: . image: oktamvclogin ports: - "5001:443" environment: - ASPNETCORE_Okta__ClientId: "{yourClientId}" - ASPNETCORE_Okta__ClientSecret: "{yourClientSecret}" - ASPNETCORE_Okta__Domain: "{yourOktaDomain}" - ASPNETCORE_Kestrel__Certificates__Default__Password: "{yourExportPassword}"
このdocker-compose
ファイルには、以前にコマンドに渡したすべての値が含まれていますdocker run
。 次に、アプリケーションを実行します。 そして、それはすべて機能します。幸せな日々。 もちろん、これは Docker Compose でできることのほんの一部にすぎません。詳細については、Docker Compose の公式概要をご覧ください。
Docker を使用して ASP.NET Core アプリをコンテナー化し、構成する
この投稿を通じて、次の方法を学びました。
- Docker を使用して ASP.NET Core アプリケーションをコンテナー化する
- 設定を Docker コンテナに渡す
- コンテナー化された ASP.NET Core アプリケーション用に SSL/TLS を構成する
docker-compose
特定の構成で Docker コンテナを効率的に実行するために使用します
ソース コードにを含めることDockerfile
で、開発者はアプリを確実に構築できます。Docker がインストールされている限り、どの環境でもビルドでき、まったく同じように機能します。毎回、例外なく。依存関係の問題も、オペレーティング システムの問題もありません。それはうまくいくでしょう。それだけでなく、さらに変更を加えることなく、同じコンテナーを本番環境に直接デプロイできます。
Docker と ASP.NET Core の詳細
ASP.NET Core、Okta、または Docker について詳しく知りたい場合は、これらの他の投稿をチェックしてください。
- Docker の開発者ガイド — 穏やかな紹介
- Docker 開発者ガイド — Dockerfile
- Docker 開発者ガイド — Docker Compose
- ASP.NET Core MVC アプリにログインを追加する
いつものように、この投稿について質問がある場合は、下のコメント欄に残してください。Okta の開発者向けコンテンツを入手するには、Twitter でフォローし、YouTube チャンネルに登録してください。
.NET の Docker 化
Microsoft は、.NET アプリケーションを実行するためのビルド済みの基本イメージを提供しています。アプリケーションが使用する .NET のバージョンの Microsoft の基本イメージから簡単に拡張できるため、Docker コンテナーに .NET ランタイムまたは SDK をインストールする必要はありません。 Windows サーバーに Windows コンテナーをデプロイする計画がない限り、.NET Core または .NET 5 を使用する必要があります。古い .NET Framework ランタイムはクロスプラットフォームではなく、Linux ベースのコンテナーでは実行されません。 開発マシンに Docker がインストールされていない場合は、CLI にアクセスできるように Docker Desktop をインストールする必要があります。Windows で WSL を使用している場合は、より優れたパフォーマンスを提供する WSL 2 ベースのエンジンを有効にする必要があります。
テストするために、新しい ASP.NET API アプリケーションを作成します。Docker が行っているのは、コンテナをビルドするたびにビルドを実行し、エントリポイント コマンドでアプリケーションを起動することだけなので、同じ一般的な手順があらゆる種類のアプリケーションに適用されます。
Dockerfile
ソリューションが配置されているプロジェクトのルートに、という名前の新しいファイルを作成します。次の構成に貼り付けます。
FROM mcr.microsoft.com/dotnet/core/sdk AS build-env WORKDIR /アプリ # csproj をコピーして復元 COPY *.csproj ./ dotnet 復元を実行します # 他のすべてをコピーしてビルド コピー 。./ dotnet publish -o out を実行します # ランタイム イメージのビルド FROM mcr.microsoft.com/dotnet/core/runtime WORKDIR /アプリ COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "DockerTest.dll"]
この Dockerfile は、.NET Core SDK イメージをプルしてビルドを実行します。全体をコピーし.csproj
て復元し、それ以外をすべてコピーしてビルドを実行します。次に、.NET ランタイム イメージから新しいイメージをビルドし、ビルド アーティファクトをコピーします。 最後に、エントリポイントはここで として定義されdotnet DockerTest.dll
ます。これにより、ASP.NET Web サーバーが起動しますが、アプリケーションのパラメーターを変更するか、まったく異なるエントリポイント コマンドを指定する必要がある場合があります。 docker container run
ビルド コンテナーの ID に渡して、コンテナーをテスト実行できます。
docker コンテナを実行する containerid
ASP.NET アプリケーションの場合、ホストのポートをコンテナーのポートにマッピングして、ポートを開く必要があります。
docker run -p 80:80 コンテナ ID
詳細については、Docker と Dockerfiles を使用するためのガイドをご覧ください。 次を読む
- › AMD の新しい RX 7000 GPU は本当に良くて本当に安い
- › Amazon の Fire TV 4K はわずか 25 ドルで史上最安値
- › クアルコムによると、ARM Windows PC は 2024 年に購入する価値がある
- › ソニー WH-1000XM5 ヘッドフォンが史上最低価格に戻る
- › 新しいコンピュータで古い PSU を再利用できますか?
- › Instagramでフォロワーを削除する方法
How-To Geek は、専門家にテクノロジーを説明してもらいたいときに頼る場所です。2006 年の開始以来、私たちの記事は 10 億回以上読まれています。もっと知りたい?