Размещение образов ASP.NET Core с помощью Docker Compose по протоколу HTTPS

ASP.NET Core использует HTTPS по умолчанию. HTTPS использует сертификаты для доверия, удостоверения и шифрования.

В этом документе объясняется, как запускать предварительно созданные образы контейнеров с помощью HTTPS.

См. статью "Разработка ASP.NET основных приложений с помощью Docker по протоколу HTTPS " для сценариев разработки.

Для работы с этим примером требуется Docker 17.06 или клиент Docker более поздней версии.

Необходимые компоненты

Пакет SDK для .NET Core 2.2 или более поздней версии требуется для некоторых инструкций в этом документе.

Сертификаты

Сертификат из центра сертификации требуется для размещения в рабочей среде для домена. Let's Encrypt — это центр сертификации, который предлагает бесплатные сертификаты.

В этом документе используются самозаверяемые сертификаты разработки для размещения предварительно созданных образовlocalhost. Инструкции аналогичны использованию рабочих сертификатов.

Для рабочих сертификатов:

  • Средство dotnet dev-certs не требуется.
  • Сертификаты не нужно хранить в расположении, используемом в инструкциях. Сохраните сертификаты в любом расположении за пределами каталога сайта.

Инструкции, содержащиеся в следующем разделе тома, подключают сертификаты к контейнерам с помощью volumes свойства в docker-compose.yml. Вы можете добавить сертификаты в образы контейнеров с COPY помощью команды в Dockerfile, но не рекомендуется. Копирование сертификатов в образ не рекомендуется по следующим причинам:

  • Это затрудняет использование того же образа для тестирования с помощью сертификатов разработчика.
  • Это затрудняет использование того же образа для размещения с рабочими сертификатами.
  • Существует значительный риск раскрытия сертификатов.

Запуск контейнера с поддержкой https с помощью docker compose

Используйте следующие инструкции для конфигурации операционной системы.

Windows с помощью контейнеров Linux

Создайте сертификат и настройте локальный компьютер:

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

Предыдущая команда с помощью интерфейса командной строки .NET:

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, должен совпадать с паролем, используемым для сертификата.

Запустите контейнер с ASP.NET Core, настроенной для HTTPS:

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, должен совпадать с паролем, используемым для сертификата.

Запустите контейнер с ASP.NET Core, настроенной для HTTPS:

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, должен совпадать с паролем, используемым для сертификата.

Запустите контейнер с ASP.NET Core, настроенной для HTTPS:

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

См. также