HTTPS 経由で Docker Compose を使用して ASP.NET Core イメージをホストする

ASP.NET Core では、既定で HTTPS が使用されます。 HTTPS は、信頼、ID、暗号化を証明書に依存します。

このドキュメントでは、HTTPS を使用して構築済みのコンテナー イメージを実行する方法について説明します。

開発シナリオについては、「Docker を使用して HTTPS による ASP.NET Core アプリケーションを開発する」 をご覧ください。

このサンプルには、Docker 17.06 以降の Docker クライアントが必要です。

前提条件

このドキュメントの一部の手順では、.NET Core 2.2 SDK 以降が必要です。

証明書

ドメインの運用環境のホスティングには、証明機関からの証明書が必要です。 Let's Encrypt は、無料の証明書を提供する証明機関です。

このドキュメントでは、localhost 上で構築済みのイメージをホストするために自己署名開発証明書 を使用します。 手順は、運用証明書の使用に似ています。

運用証明書の場合:

  • dotnet dev-certs ツールは不要です。
  • 証明書を、手順で使用されている場所に格納する必要はありません。 サイト ディレクトリの外部の任意の場所に証明書を格納します。

次のセクションに記載されている手順では、docker-compose.ymlvolumes プロパティを使用して、コンテナーへの証明書のボリューム マウントを行います。DockerfileCOPY コマンドを使用して証明書をコンテナー イメージに追加することもできますが、推奨されません。 証明書をイメージにコピーすることは、次の理由からお勧めされません。

  • 開発者証明書を使用したテストに同じイメージを使用するのが難しくなります。
  • 運用証明書を使用したホスティングに同じイメージを使用するのが難しくなります。
  • 証明書の公開には大きなリスクがあります。

Docker Compose を使用した https サポートによるコンテナーの開始

オペレーティング システム構成については、次の手順を使用します。

Linux コンテナーを使用した Windows

証明書を生成してローカル コンピューターを構成します。

dotnet dev-certs https -ep "$env:USERPROFILE\.aspnet\https\aspnetapp.pfx"  -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

.NET CLI を使用した前のコマンド:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

上記のコマンドで、$CREDENTIAL_PLACEHOLDER$ をパスワードに置き換えます。

次の内容を含む docker-compose.debug.yml ファイルを作成します。

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=password
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ~/.aspnet/https:/https:ro

Docker Compose ファイルで指定されたパスワードは、証明書に使用されるパスワードと一致する必要があります。

HTTPS 用に構成された ASP.NET Core を使用してコンテナーを起動します。

docker-compose -f "docker-compose.debug.yml" up -d

macOS または Linux

証明書を生成してローカル コンピューターを構成します。

dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

dotnet dev-certs https --trust は macOS と Windows でのみサポートされています。 お使いのディストリビューションでサポートされている方法で、Linux 上の証明書を信頼する必要があります。 ブラウザーで証明書を信頼する必要があることが考えられます。

上記のコマンドで、$CREDENTIAL_PLACEHOLDER$ をパスワードに置き換えます。

次の内容を含む docker-compose.debug.yml ファイルを作成します。

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=password
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ~/.aspnet/https:/https:ro

Docker Compose ファイルで指定されたパスワードは、証明書に使用されるパスワードと一致する必要があります。

HTTPS 用に構成された ASP.NET Core を使用してコンテナーを起動します。

docker-compose -f "docker-compose.debug.yml" up -d

Windows コンテナーを使用する Windows

証明書を生成してローカル コンピューターを構成します。

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

上記のコマンドで、$CREDENTIAL_PLACEHOLDER$ をパスワードに置き換えます。

次の内容を含む docker-compose.debug.yml ファイルを作成します。

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=password
      - ASPNETCORE_Kestrel__Certificates__Default__Path=C:\https\aspnetapp.pfx
    volumes:
      - ${USERPROFILE}\.aspnet\https:C:\https:ro

Docker Compose ファイルで指定されたパスワードは、証明書に使用されるパスワードと一致する必要があります。

HTTPS 用に構成された ASP.NET Core を使用してコンテナーを起動します。

docker-compose -f "docker-compose.debug.yml" up -d

関連項目