다음을 통해 공유


HTTPS를 통해 Docker Compose를 사용하여 ASP.NET Core 이미지 호스팅

ASP.NET Core는 기본적으로 HTTPS를 사용합니다. HTTPS는 신뢰 identity및 암호화를 위해 인증서를 사용합니다.

이 문서에서는 HTTPS를 사용하여 미리 작성된 컨테이너 이미지를 실행하는 방법을 설명합니다.

개발 시나리오는 HTTPS를 통해 Docker를 사용하여 ASP.NET Core 애플리케이션 개발을 참조하세요.

이 샘플에서는 Docker 17.06 이상의 Docker 클라이언트가 필요합니다.

필수 조건

이 문서의 지침 중 일부에는 .NET Core 2.2 SDK 이상이 필요합니다.

인증서

도메인에 대한 프로덕션 호스팅을 위해서는 인증 기관의 인증서가 필요합니다. Let's Encrypt는 무료 인증서를 제공하는 인증 기관입니다.

이 문서에서는 자체 서명된 개발 인증서를 사용하여 미리 빌드된 이미지를 localhost에서 호스팅합니다. 지침은 프로덕션 인증서를 사용하는 것과 유사합니다.

프로덕션 인증서의 경우:

  • dotnet dev-certs 도구는 필수 항목이 아닙니다.
  • 지침에 사용되는 위치에 인증서를 저장할 필요는 없습니다. 사이트 디렉터리 외부 임의의 위치에 인증서를 저장합니다.

다음 섹션에 포함된 지침으로 docker-compose.yml에 있는 volumes 속성을 사용하여 인증서를 컨테이너에 탑재할 수 있습니다. Dockerfile에 있는 COPY 명령으로 컨테이너 이미지에 인증서를 추가할 수는 있지만 권장되지는 않습니다. 다음과 같은 이유로 인증서를 이미지로 복사하는 것은 권장되지 않습니다.

  • 개발자 인증서를 사용하여 테스트하는 데 동일한 이미지를 사용하는 것은 어렵습니다.
  • 프로덕션 인증서를 사용하여 호스팅하는 데 동일한 이미지를 사용하는 것은 어렵습니다.
  • 인증서 공개에는 상당한 위험이 있습니다.

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

Linux에서는 dotnet dev-certs https --trust .NET 9 SDK 이상이 필요합니다. .NET 8.0.401 SDK 이하의 Linux의 경우 인증서 신뢰에 대한 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

참고 항목

ASP.NET Core는 기본적으로 HTTPS를 사용합니다. HTTPS는 신뢰 identity및 암호화를 위해 인증서를 사용합니다.

이 문서에서는 HTTPS를 사용하여 미리 작성된 컨테이너 이미지를 실행하는 방법을 설명합니다.

개발 시나리오는 HTTPS를 통해 Docker를 사용하여 ASP.NET Core 애플리케이션 개발을 참조하세요.

이 샘플에서는 Docker 17.06 이상의 Docker 클라이언트가 필요합니다.

필수 조건

이 문서의 지침 중 일부에는 .NET Core 2.2 SDK 이상이 필요합니다.

인증서

도메인에 대한 프로덕션 호스팅을 위해서는 인증 기관의 인증서가 필요합니다. Let's Encrypt는 무료 인증서를 제공하는 인증 기관입니다.

이 문서에서는 자체 서명된 개발 인증서를 사용하여 미리 빌드된 이미지를 localhost에서 호스팅합니다. 지침은 프로덕션 인증서를 사용하는 것과 유사합니다.

프로덕션 인증서의 경우:

  • dotnet dev-certs 도구는 필수 항목이 아닙니다.
  • 지침에 사용되는 위치에 인증서를 저장할 필요는 없습니다. 사이트 디렉터리 외부 임의의 위치에 인증서를 저장합니다.

다음 섹션에 포함된 지침으로 docker-compose.yml에 있는 volumes 속성을 사용하여 인증서를 컨테이너에 탑재할 수 있습니다. Dockerfile에 있는 COPY 명령으로 컨테이너 이미지에 인증서를 추가할 수는 있지만 권장되지는 않습니다. 다음과 같은 이유로 인증서를 이미지로 복사하는 것은 권장되지 않습니다.

  • 개발자 인증서를 사용하여 테스트하는 데 동일한 이미지를 사용하는 것은 어렵습니다.
  • 프로덕션 인증서를 사용하여 호스팅하는 데 동일한 이미지를 사용하는 것은 어렵습니다.
  • 인증서 공개에는 상당한 위험이 있습니다.

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

참고 항목