次の方法で共有


Docker コンテナーで ASP.NET Core アプリを実行する

これは、この記事の最新バージョンではありません。 現在のリリースについては、 この記事の .NET 10 バージョンを参照してください。

警告

このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、 .NET および .NET Core サポート ポリシーを参照してください。 現在のリリースについては、 この記事の .NET 10 バージョンを参照してください。

この記事では、Docker コンテナー内で ASP.NET Core アプリを実行する方法を示します。

Windows Home Edition は Hyper-V をサポートしておらず、Docker には Hyper-V が必要です。

を使ってコンテナー化された .NET アプリについては、「dotnet publish」を参照してください。

ASP.NET Core の Docker イメージ

このチュートリアルでは、ASP.NET Core サンプル アプリをダウンロードして、Docker コンテナー内で実行します。 このサンプルは Linux コンテナーと Windows コンテナーのどちらでも動作します。

サンプル Dockerfile では、 Docker マルチステージ ビルド機能 を使用して、さまざまなコンテナーでビルドおよび実行します。 ビルドと実行のコンテナーは、マイクロソフトが Docker Hub に提供しているイメージから作成されます。

  • dotnet/sdk

    サンプルでは、アプリをビルドするためにこのイメージを使用します。 イメージには、コマンド ライン ツール (CLI) が組み込まれた .NET SDK が含まれています。 イメージはローカル開発、デバッグ、および単体テスト用に最適化されています。 開発とコンパイルのためにツールがインストールされているため、比較的大きなイメージになっています。

  • dotnet/aspnet

    サンプルでは、アプリを実行するためにこのイメージを使用します。 イメージには ASP.NET Core ランタイムとライブラリが含まれており、実稼働環境でアプリを実行するために最適化されています。 デプロイとアプリ起動の速度に対応した設計になっており、Docker レジストリから Docker ホストへのネットワーク パフォーマンスが最適化されていることから、イメージは比較的小さいです。 アプリの実行に必要なバイナリとコンテンツのみが、コンテナーにコピーされます。 コンテンツは実行できる状態になっており、docker run からアプリの起動までを最速で行うことができます。 動的コード コンパイルは Docker モデルで必要ありません。

前提条件

サンプル アプリ をダウンロードする

  • .NET Docker リポジトリを複製してサンプルをダウンロードします。

    git clone https://github.com/dotnet/dotnet-docker
    

アプリをローカルで実行する

  • dotnet-docker/samples/aspnetapp/aspnetapp にあるプロジェクト フォルダーに移動します。

  • 次のコマンドを実行し、アプリをビルドしてローカルで実行します。

    dotnet run
    
  • アプリをテストするには、ブラウザーで http://localhost:<port> に移動します。

  • コマンド プロンプト上で Ctrl +C キーを押して、アプリを停止します。

Linux コンテナーまたは Windows コンテナーで実行する

  • Linux コンテナーで実行するには、システム トレイの Docker クライアント アイコンを右クリックし、[ Linux コンテナーに切り替える] を選択します。

  • Windows コンテナーで実行するには、システム トレイの Docker クライアント アイコンを右クリックし、[ Windows コンテナーに切り替える] を選択します。

  • dotnet-docker/samples/aspnetapp にある Dockerfile フォルダーに移動します。

  • 次のコマンドを実行して、Docker 内でサンプルをビルドして実行します。

    docker build -t aspnetapp .
    docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetapp
    

    build コマンドの引数:

    • イメージに aspnetapp という名前を付けます。
    • 現在のフォルダー内にある Dockerfile を探します (末尾にピリオド)。

    実行コマンドの引数:

    • 擬似端末を割り当てて、接続されていない場合でも開いた状態を保持します。 (--interactive --tty と効果は同じです。)
    • コンテナーが存在する場合は、自動的に削除します。
    • ローカル コンピューター上の <port> をコンテナー内のポート 8080 にマップします。
    • コンテナーに aspnetcore_sample という名前を付けます。
    • aspnetapp イメージを指定します。
  • アプリをテストするには、ブラウザーで http://localhost:<port> に移動します。

手動でビルドしてデプロイする

一部のシナリオでは、実行時に必要なアプリのアセットをコピーすることで、アプリをコンテナーにデプロイする方がよい場合があります。 このセクションでは、手動によるデプロイの方法を示します。

  • dotnet-docker/samples/aspnetapp/aspnetapp にあるプロジェクト フォルダーに移動します。

  • dotnet publish コマンドを実行します。

    dotnet publish -c Release -o published
    

    コマンドの引数:

    • リリース モードでアプリをビルドします (既定はデバッグ モードです)。
    • 発行されたフォルダーにアセットを作成します。
  • アプリを実行します。

    • Windows の場合:

      dotnet published\aspnetapp.dll
      
    • Linux:

      dotnet published/aspnetapp.dll
      
  • http://localhost:<port> に移動してホームページを表示します。

Docker コンテナー内で手動で発行されたアプリを使用するには、新しい Dockerfile を作成し、 docker build . コマンドを使用してイメージをビルドします。

FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

新しいイメージを確認するには、docker images コマンドを使用します。

Dockerfile

ここに示すのは、先ほど実行した コマンドで使用された docker build です。 このセクションで実行したときと同じ方法で dotnet publish を使用して、ビルドとデプロイを行います。

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:10.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

上記の Dockerfile では、 *.csproj ファイルがコピーされ、個別 のレイヤーとして復元されます。 docker build コマンドを使用してイメージをビルドすると、組み込みのキャッシュが使用されます。 *.csproj コマンドが最後に実行されてからdocker build ファイルが変更されなかった場合、dotnet restore コマンドを再度実行する必要はありません。 代わりに、対応する dotnet restore レイヤーの組み込みキャッシュが再利用されます。 詳細については、「 Dockerfile を記述するためのベスト プラクティス」を参照してください。

その他の技術情報

次のステップ

同じアプリを格納している Git リポジトリにも、ドキュメントが用意されています。 リポジトリで使用可能なリソースの概要については、 README ファイルを参照してください。 特に、HTTPS を実装する方法について確認してください。

ASP.NET Core の Docker イメージ

このチュートリアルでは、ASP.NET Core サンプル アプリをダウンロードして、Docker コンテナー内で実行します。 このサンプルは Linux コンテナーと Windows コンテナーのどちらでも動作します。

サンプル Dockerfile では、 Docker マルチステージ ビルド機能 を使用して、さまざまなコンテナーでビルドおよび実行します。 ビルドと実行のコンテナーは、マイクロソフトが Docker Hub に提供しているイメージから作成されます。

  • dotnet/sdk

    サンプルでは、アプリをビルドするためにこのイメージを使用します。 イメージには、コマンド ライン ツール (CLI) が組み込まれた .NET SDK が含まれています。 イメージはローカル開発、デバッグ、および単体テスト用に最適化されています。 開発とコンパイルのためにツールがインストールされているため、比較的大きなイメージになっています。

  • dotnet/aspnet

    サンプルでは、アプリを実行するためにこのイメージを使用します。 イメージには ASP.NET Core ランタイムとライブラリが含まれており、実稼働環境でアプリを実行するために最適化されています。 デプロイとアプリ起動の速度に対応した設計になっており、Docker レジストリから Docker ホストへのネットワーク パフォーマンスが最適化されていることから、イメージは比較的小さいです。 アプリの実行に必要なバイナリとコンテンツのみが、コンテナーにコピーされます。 コンテンツは実行できる状態になっており、docker run からアプリの起動までを最速で行うことができます。 動的コード コンパイルは Docker モデルで必要ありません。

前提条件

サンプル アプリ をダウンロードする

  • .NET Docker リポジトリを複製してサンプルをダウンロードします。

    git clone https://github.com/dotnet/dotnet-docker
    

アプリをローカルで実行する

  • dotnet-docker/samples/aspnetapp/aspnetapp にあるプロジェクト フォルダーに移動します。

  • 次のコマンドを実行し、アプリをビルドしてローカルで実行します。

    dotnet run
    
  • アプリをテストするには、ブラウザーで http://localhost:<port> に移動します。

  • コマンド プロンプト上で Ctrl +C キーを押して、アプリを停止します。

Linux コンテナーまたは Windows コンテナーで実行する

  • Linux コンテナーで実行するには、システム トレイの Docker クライアント アイコンを右クリックし、[ Linux コンテナーに切り替える] を選択します。

  • Windows コンテナーで実行するには、システム トレイの Docker クライアント アイコンを右クリックし、[ Windows コンテナーに切り替える] を選択します。

  • dotnet-docker/samples/aspnetapp にある Dockerfile フォルダーに移動します。

  • 次のコマンドを実行して、Docker 内でサンプルをビルドして実行します。

    docker build -t aspnetapp .
    docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetapp
    

    build コマンドの引数:

    • イメージに aspnetapp という名前を付けます。
    • 現在のフォルダー内にある Dockerfile を探します (末尾にピリオド)。

    実行コマンドの引数:

    • 擬似端末を割り当てて、接続されていない場合でも開いた状態を保持します。 (--interactive --tty と効果は同じです。)
    • コンテナーが存在する場合は、自動的に削除します。
    • ローカル コンピューター上の <port> をコンテナー内のポート 8080 にマップします。
    • コンテナーに aspnetcore_sample という名前を付けます。
    • aspnetapp イメージを指定します。
  • アプリをテストするには、ブラウザーで http://localhost:<port> に移動します。

手動でビルドしてデプロイする

一部のシナリオでは、実行時に必要なアプリのアセットをコピーすることで、アプリをコンテナーにデプロイする方がよい場合があります。 このセクションでは、手動によるデプロイの方法を示します。

  • dotnet-docker/samples/aspnetapp/aspnetapp にあるプロジェクト フォルダーに移動します。

  • dotnet publish コマンドを実行します。

    dotnet publish -c Release -o published
    

    コマンドの引数:

    • リリース モードでアプリをビルドします (既定はデバッグ モードです)。
    • 発行されたフォルダーにアセットを作成します。
  • アプリを実行します。

    • Windows の場合:

      dotnet published\aspnetapp.dll
      
    • Linux:

      dotnet published/aspnetapp.dll
      
  • http://localhost:<port> に移動してホームページを表示します。

Docker コンテナー内で手動で発行されたアプリを使用するには、新しい Dockerfile を作成し、 docker build . コマンドを使用してイメージをビルドします。

FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

新しいイメージを確認するには、docker images コマンドを使用します。

Dockerfile

ここに示すのは、先ほど実行した コマンドで使用された docker build です。 このセクションで実行したときと同じ方法で dotnet publish を使用して、ビルドとデプロイを行います。

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:9.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

上記の Dockerfile では、 *.csproj ファイルがコピーされ、個別 のレイヤーとして復元されます。 docker build コマンドを使用してイメージをビルドすると、組み込みのキャッシュが使用されます。 *.csproj コマンドが最後に実行されてから docker build ファイルが変更されていない場合、dotnet restore コマンドを再度実行する必要はありません。 代わりに、対応する dotnet restore レイヤーの組み込みキャッシュが再利用されます。 詳細については、「 Dockerfile を記述するためのベスト プラクティス」を参照してください。

その他の技術情報

次のステップ

同じアプリを格納している Git リポジトリにも、ドキュメントが用意されています。 リポジトリで使用可能なリソースの概要については、 README ファイルを参照してください。 特に、HTTPS を実装する方法について確認してください。

ASP.NET Core の Docker イメージ

このチュートリアルでは、ASP.NET Core サンプル アプリをダウンロードして、Docker コンテナー内で実行します。 このサンプルは Linux コンテナーと Windows コンテナーのどちらでも動作します。

サンプル Dockerfile では、 Docker マルチステージ ビルド機能 を使用して、さまざまなコンテナーでビルドおよび実行します。 ビルドと実行のコンテナーは、マイクロソフトが Docker Hub に提供しているイメージから作成されます。

  • dotnet/sdk

    サンプルでは、アプリをビルドするためにこのイメージを使用します。 イメージには、コマンド ライン ツール (CLI) が組み込まれた .NET SDK が含まれています。 イメージはローカル開発、デバッグ、および単体テスト用に最適化されています。 開発とコンパイルのためにツールがインストールされているため、比較的大きなイメージになっています。

  • dotnet/aspnet

    サンプルでは、アプリを実行するためにこのイメージを使用します。 イメージには ASP.NET Core ランタイムとライブラリが含まれており、実稼働環境でアプリを実行するために最適化されています。 デプロイとアプリ起動の速度に対応した設計になっており、Docker レジストリから Docker ホストへのネットワーク パフォーマンスが最適化されていることから、イメージは比較的小さいです。 アプリの実行に必要なバイナリとコンテンツのみが、コンテナーにコピーされます。 コンテンツは実行できる状態になっており、docker run からアプリの起動までを最速で行うことができます。 動的コード コンパイルは Docker モデルで必要ありません。

前提条件

サンプル アプリ をダウンロードする

  • .NET Docker リポジトリを複製してサンプルをダウンロードします。

    git clone https://github.com/dotnet/dotnet-docker
    

アプリをローカルで実行する

  • dotnet-docker/samples/aspnetapp/aspnetapp にあるプロジェクト フォルダーに移動します。

  • 次のコマンドを実行し、アプリをビルドしてローカルで実行します。

    dotnet run
    
  • アプリをテストするには、ブラウザーで http://localhost:<port> に移動します。

  • コマンド プロンプト上で Ctrl +C キーを押して、アプリを停止します。

Linux コンテナーまたは Windows コンテナーで実行する

  • Linux コンテナーで実行するには、システム トレイの Docker クライアント アイコンを右クリックし、[ Linux コンテナーに切り替える] を選択します。

  • Windows コンテナーで実行するには、システム トレイの Docker クライアント アイコンを右クリックし、[ Windows コンテナーに切り替える] を選択します。

  • dotnet-docker/samples/aspnetapp にある Dockerfile フォルダーに移動します。

  • 次のコマンドを実行して、Docker 内でサンプルをビルドして実行します。

    docker build -t aspnetapp .
    docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetapp
    

    build コマンドの引数:

    • イメージに aspnetapp という名前を付けます。
    • 現在のフォルダー内にある Dockerfile を探します (末尾にピリオド)。

    実行コマンドの引数:

    • 擬似端末を割り当てて、接続されていない場合でも開いた状態を保持します。 (--interactive --tty と効果は同じです。)
    • コンテナーが存在する場合は、自動的に削除します。
    • ローカル コンピューター上の <port> をコンテナー内のポート 8080 にマップします。
    • コンテナーに aspnetcore_sample という名前を付けます。
    • aspnetapp イメージを指定します。
  • アプリをテストするには、ブラウザーで http://localhost:<port> に移動します。

手動でビルドしてデプロイする

一部のシナリオでは、実行時に必要なアプリのアセットをコピーすることで、アプリをコンテナーにデプロイする方がよい場合があります。 このセクションでは、手動によるデプロイの方法を示します。

  • dotnet-docker/samples/aspnetapp/aspnetapp にあるプロジェクト フォルダーに移動します。

  • dotnet publish コマンドを実行します。

    dotnet publish -c Release -o published
    

    コマンドの引数:

    • リリース モードでアプリをビルドします (既定はデバッグ モードです)。
    • 発行されたフォルダーにアセットを作成します。
  • アプリを実行します。

    • Windows の場合:

      dotnet published\aspnetapp.dll
      
    • Linux:

      dotnet published/aspnetapp.dll
      
  • http://localhost:<port> に移動してホームページを表示します。

Docker コンテナー内で手動で発行されたアプリを使用するには、新しい Dockerfile を作成し、 docker build . コマンドを使用してイメージをビルドします。

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

新しいイメージを確認するには、docker images コマンドを使用します。

Dockerfile

ここに示すのは、先ほど実行した コマンドで使用された docker build です。 このセクションで実行したときと同じ方法で dotnet publish を使用して、ビルドとデプロイを行います。

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

上記の Dockerfile では、 *.csproj ファイルがコピーされ、個別 のレイヤーとして復元されます。 docker build コマンドを使用してイメージをビルドすると、組み込みのキャッシュが使用されます。 *.csproj コマンドが最後に実行されてから docker build ファイルが変更されていない場合、dotnet restore コマンドを再度実行する必要はありません。 代わりに、対応する dotnet restore レイヤーの組み込みキャッシュが再利用されます。 詳細については、「 Dockerfile を記述するためのベスト プラクティス」を参照してください。

その他の技術情報

次のステップ

同じアプリを格納している Git リポジトリにも、ドキュメントが用意されています。 リポジトリで使用可能なリソースの概要については、 README ファイルを参照してください。 特に、HTTPS を実装する方法について確認してください。

ASP.NET Core の Docker イメージ

このチュートリアルでは、ASP.NET Core サンプル アプリをダウンロードして、Docker コンテナー内で実行します。 このサンプルは Linux コンテナーと Windows コンテナーのどちらでも動作します。

サンプル Dockerfile では、 Docker マルチステージ ビルド機能 を使用して、さまざまなコンテナーでビルドおよび実行します。 ビルドと実行のコンテナーは、マイクロソフトが Docker Hub に提供しているイメージから作成されます。

  • dotnet/sdk

    サンプルでは、アプリをビルドするためにこのイメージを使用します。 イメージには、コマンド ライン ツール (CLI) が組み込まれた .NET SDK が含まれています。 イメージはローカル開発、デバッグ、および単体テスト用に最適化されています。 開発とコンパイルのためにツールがインストールされているため、比較的大きなイメージになっています。

  • dotnet/aspnet

    サンプルでは、アプリを実行するためにこのイメージを使用します。 イメージには ASP.NET Core ランタイムとライブラリが含まれており、実稼働環境でアプリを実行するために最適化されています。 デプロイとアプリ起動の速度に対応した設計になっており、Docker レジストリから Docker ホストへのネットワーク パフォーマンスが最適化されていることから、イメージは比較的小さいです。 アプリの実行に必要なバイナリとコンテンツのみが、コンテナーにコピーされます。 コンテンツは実行できる状態になっており、docker run からアプリの起動までを最速で行うことができます。 動的コード コンパイルは Docker モデルで必要ありません。

前提条件

サンプル アプリ をダウンロードする

  • .NET Docker リポジトリを複製してサンプルをダウンロードします。

    git clone https://github.com/dotnet/dotnet-docker
    

アプリをローカルで実行する

  • dotnet-docker/samples/aspnetapp/aspnetapp にあるプロジェクト フォルダーに移動します。

  • 次のコマンドを実行し、アプリをビルドしてローカルで実行します。

    dotnet run
    
  • アプリをテストするには、ブラウザーで http://localhost:5000 に移動します。

  • コマンド プロンプト上で Ctrl +C キーを押して、アプリを停止します。

Linux コンテナーまたは Windows コンテナーで実行する

  • Linux コンテナーで実行するには、システム トレイの Docker クライアント アイコンを右クリックし、[ Linux コンテナーに切り替える] を選択します。

  • Windows コンテナーで実行するには、システム トレイの Docker クライアント アイコンを右クリックし、[ Windows コンテナーに切り替える] を選択します。

  • dotnet-docker/samples/aspnetapp にある Dockerfile フォルダーに移動します。

  • 次のコマンドを実行して、Docker 内でサンプルをビルドして実行します。

    docker build -t aspnetapp .
    docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
    

    build コマンドの引数:

    • イメージに aspnetapp という名前を付けます。
    • 現在のフォルダー内にある Dockerfile を探します (末尾にピリオド)。

    実行コマンドの引数:

    • 擬似端末を割り当てて、接続されていない場合でも開いた状態を保持します。 (--interactive --tty と効果は同じです。)
    • コンテナーが存在する場合は、自動的に削除します。
    • ローカル コンピューター上のポート 5000 をコンテナー内のポート 80 にマップします。
    • コンテナーに aspnetcore_sample という名前を付けます。
    • aspnetapp イメージを指定します。
  • アプリをテストするには、ブラウザーで http://localhost:5000 に移動します。

手動でビルドしてデプロイする

一部のシナリオでは、実行時に必要なアプリのアセットをコピーすることで、アプリをコンテナーにデプロイする方がよい場合があります。 このセクションでは、手動によるデプロイの方法を示します。

  • dotnet-docker/samples/aspnetapp/aspnetapp にあるプロジェクト フォルダーに移動します。

  • dotnet publish コマンドを実行します。

    dotnet publish -c Release -o published
    

    コマンドの引数:

    • リリース モードでアプリをビルドします (既定はデバッグ モードです)。
    • 発行されたフォルダーにアセットを作成します。
  • アプリを実行します。

    • Windows の場合:

      dotnet published\aspnetapp.dll
      
    • Linux:

      dotnet published/aspnetapp.dll
      
  • http://localhost:5000 に移動してホームページを表示します。

Docker コンテナー内で手動で発行されたアプリを使用するには、新しい Dockerfile を作成し、 docker build . コマンドを使用してイメージをビルドします。

FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

新しいイメージを確認するには、docker images コマンドを使用します。

Dockerfile

ここに示すのは、先ほど実行した コマンドで使用された docker build です。 このセクションで実行したときと同じ方法で dotnet publish を使用して、ビルドとデプロイを行います。

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

上記の Dockerfile では、 *.csproj ファイルがコピーされ、個別 のレイヤーとして復元されます。 docker build コマンドを使用してイメージをビルドすると、組み込みのキャッシュが使用されます。 *.csproj コマンドが最後に実行されてから docker build ファイルが変更されていない場合、dotnet restore コマンドを再度実行する必要はありません。 代わりに、対応する dotnet restore レイヤーの組み込みキャッシュが再利用されます。 詳細については、「 Dockerfile を記述するためのベスト プラクティス」を参照してください。

その他の技術情報

次のステップ

同じアプリを格納している Git リポジトリにも、ドキュメントが用意されています。 リポジトリで使用可能なリソースの概要については、 README ファイルを参照してください。 特に、HTTPS を実装する方法について確認してください。

ASP.NET Core の Docker イメージ

このチュートリアルでは、ASP.NET Core サンプル アプリをダウンロードして、Docker コンテナー内で実行します。 このサンプルは Linux コンテナーと Windows コンテナーのどちらでも動作します。

サンプル Dockerfile では、 Docker マルチステージ ビルド機能 を使用して、さまざまなコンテナーでビルドおよび実行します。 ビルドと実行のコンテナーは、マイクロソフトが Docker Hub に提供しているイメージから作成されます。

  • dotnet/sdk

    サンプルでは、アプリをビルドするためにこのイメージを使用します。 イメージには、コマンド ライン ツール (CLI) が組み込まれた .NET SDK が含まれています。 イメージはローカル開発、デバッグ、および単体テスト用に最適化されています。 開発とコンパイルのためにツールがインストールされているため、比較的大きなイメージになっています。

  • dotnet/core/sdk

    サンプルでは、アプリをビルドするためにこのイメージを使用します。 イメージには、コマンド ライン ツール (CLI) が組み込まれた .NET Core SDK が含まれています。 イメージはローカル開発、デバッグ、および単体テスト用に最適化されています。 開発とコンパイルのためにツールがインストールされているため、比較的大きなイメージになっています。

  • dotnet/aspnet

    サンプルでは、アプリを実行するためにこのイメージを使用します。 イメージには ASP.NET Core ランタイムとライブラリが含まれており、実稼働環境でアプリを実行するために最適化されています。 デプロイとアプリ起動の速度に対応した設計になっており、Docker レジストリから Docker ホストへのネットワーク パフォーマンスが最適化されていることから、イメージは比較的小さいです。 アプリの実行に必要なバイナリとコンテンツのみが、コンテナーにコピーされます。 コンテンツは実行できる状態になっており、docker run からアプリの起動までを最速で行うことができます。 動的コード コンパイルは Docker モデルで必要ありません。

  • dotnet/core/aspnet

    サンプルでは、アプリを実行するためにこのイメージを使用します。 イメージには ASP.NET Core ランタイムとライブラリが含まれており、実稼働環境でアプリを実行するために最適化されています。 デプロイとアプリ起動の速度に対応した設計になっており、Docker レジストリから Docker ホストへのネットワーク パフォーマンスが最適化されていることから、イメージは比較的小さいです。 アプリの実行に必要なバイナリとコンテンツのみが、コンテナーにコピーされます。 コンテンツは実行できる状態になっており、docker run からアプリの起動までを最速で行うことができます。 動的コード コンパイルは Docker モデルで必要ありません。

前提条件

サンプル アプリ をダウンロードする

  • .NET Docker リポジトリを複製してサンプルをダウンロードします。

    git clone https://github.com/dotnet/dotnet-docker
    

アプリをローカルで実行する

  • dotnet-docker/samples/aspnetapp/aspnetapp にあるプロジェクト フォルダーに移動します。

  • 次のコマンドを実行し、アプリをビルドしてローカルで実行します。

    dotnet run
    
  • アプリをテストするには、ブラウザーで http://localhost:5000 に移動します。

  • コマンド プロンプト上で Ctrl +C キーを押して、アプリを停止します。

Linux コンテナーまたは Windows コンテナーで実行する

  • Linux コンテナーで実行するには、システム トレイの Docker クライアント アイコンを右クリックし、[ Linux コンテナーに切り替える] を選択します。

  • Windows コンテナーで実行するには、システム トレイの Docker クライアント アイコンを右クリックし、[ Windows コンテナーに切り替える] を選択します。

  • dotnet-docker/samples/aspnetapp にある Dockerfile フォルダーに移動します。

  • 次のコマンドを実行して、Docker 内でサンプルをビルドして実行します。

    docker build -t aspnetapp .
    docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
    

    build コマンドの引数:

    • イメージに aspnetapp という名前を付けます。
    • 現在のフォルダー内にある Dockerfile を探します (末尾にピリオド)。

    実行コマンドの引数:

    • 擬似端末を割り当てて、接続されていない場合でも開いた状態を保持します。 (--interactive --tty と効果は同じです。)
    • コンテナーが存在する場合は、自動的に削除します。
    • ローカル コンピューター上のポート 5000 をコンテナー内のポート 80 にマップします。
    • コンテナーに aspnetcore_sample という名前を付けます。
    • aspnetapp イメージを指定します。
  • アプリをテストするには、ブラウザーで http://localhost:5000 に移動します。

手動でビルドしてデプロイする

一部のシナリオでは、実行時に必要なアプリのアセットをコピーすることで、アプリをコンテナーにデプロイする方がよい場合があります。 このセクションでは、手動によるデプロイの方法を示します。

  • dotnet-docker/samples/aspnetapp/aspnetapp にあるプロジェクト フォルダーに移動します。

  • dotnet publish コマンドを実行します。

    dotnet publish -c Release -o published
    

    コマンドの引数:

    • リリース モードでアプリをビルドします (既定はデバッグ モードです)。
    • 発行されたフォルダーにアセットを作成します。
  • アプリを実行します。

    • Windows の場合:

      dotnet published\aspnetapp.dll
      
    • Linux:

      dotnet published/aspnetapp.dll
      
  • http://localhost:5000 に移動してホームページを表示します。

Docker コンテナー内で手動で発行されたアプリを使用するには、新しい Dockerfile を作成し、 docker build . コマンドを使用してイメージをビルドします。

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

新しいイメージを確認するには、docker images コマンドを使用します。

Dockerfile

ここに示すのは、先ほど実行した コマンドで使用された docker build です。 このセクションで実行したときと同じ方法で dotnet publish を使用して、ビルドとデプロイを行います。

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

新しいイメージを確認するには、docker images コマンドを使用します。

Dockerfile

ここに示すのは、先ほど実行した コマンドで使用された docker build です。 このセクションで実行したときと同じ方法で dotnet publish を使用して、ビルドとデプロイを行います。

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

上記の Dockerfile では、 *.csproj ファイルがコピーされ、個別 のレイヤーとして復元されます。 docker build コマンドを使用してイメージをビルドすると、組み込みのキャッシュが使用されます。 *.csproj コマンドが最後に実行されてから docker build ファイルが変更されていない場合、dotnet restore コマンドを再度実行する必要はありません。 代わりに、対応する dotnet restore レイヤーの組み込みキャッシュが再利用されます。 詳細については、「 Dockerfile を記述するためのベスト プラクティス」を参照してください。

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Dockerfile

ここに示すのは、先ほど実行した コマンドで使用された docker build です。 このセクションで実行したときと同じ方法で dotnet publish を使用して、ビルドとデプロイを行います。

FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

上記の Dockerfile で説明したように、 *.csproj ファイルは個別の レイヤーとしてコピーおよび復元されます。 docker build コマンドを使用してイメージをビルドすると、組み込みのキャッシュが使用されます。 *.csproj コマンドが最後に実行されてから docker build ファイルが変更されていない場合、dotnet restore コマンドを再度実行する必要はありません。 代わりに、対応する dotnet restore レイヤーの組み込みキャッシュが再利用されます。 詳細については、「 Dockerfile を記述するためのベスト プラクティス」を参照してください。

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Dockerfile

ここに示すのは、先ほど実行した コマンドで使用された docker build です。 このセクションで実行したときと同じ方法で dotnet publish を使用して、ビルドとデプロイを行います。

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

上記の Dockerfile では、 *.csproj ファイルがコピーされ、個別 のレイヤーとして復元されます。 docker build コマンドを使用してイメージをビルドすると、組み込みのキャッシュが使用されます。 *.csproj コマンドが最後に実行されてから docker build ファイルが変更されていない場合、dotnet restore コマンドを再度実行する必要はありません。 代わりに、対応する dotnet restore レイヤーの組み込みキャッシュが再利用されます。 詳細については、「 Dockerfile を記述するためのベスト プラクティス」を参照してください。

その他の技術情報

次のステップ

同じアプリを格納している Git リポジトリにも、ドキュメントが用意されています。 リポジトリで使用可能なリソースの概要については、 README ファイルを参照してください。 特に、HTTPS を実装する方法について確認してください。