다음을 통해 공유


Docker 컨테이너에서 ASP.NET Core 앱 실행

참고 항목

이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 9 버전을 참조 하세요.

Warning

이 버전의 ASP.NET Core는 더 이상 지원되지 않습니다. 자세한 내용은 .NET 및 .NET Core 지원 정책을 참조 하세요. 현재 릴리스는 이 문서의 .NET 8 버전을 참조 하세요.

Important

이 정보는 상업적으로 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적, 또는 묵시적인 보증을 하지 않습니다.

현재 릴리스는 이 문서의 .NET 9 버전을 참조 하세요.

이 문서에서는 Docker 컨테이너에서 ASP.NET Core 앱을 실행하는 방법을 보여 줍니다.

Windows Home Edition은 Hyper-V를 지원하지 않으며 Docker에는 Hyper-V가 필요합니다.

.NET 앱을 사용하여 컨테이너화된 .NET 앱에 대한 자세한 내용은 dotnet 게시를 사용하여 .NET 앱 dotnet publish컨테이너화를 참조하세요.

ASP.NET Core Docker 이미지

이 자습서의 경우 ASP.NET Core 샘플 앱을 다운로드하고 Docker 컨테이너에서 실행합니다. 샘플은 Linux 컨테이너와 Windows 컨테이너 둘 다에서 작동합니다.

샘플 Dockerfile은 Docker 다단계 빌드 기능을 사용하여 서로 다른 컨테이너에서 빌드 및 실행합니다. 빌드 및 실행 컨테이너는 Microsoft에서 Docker 허브에 제공한 이미지를 기반으로 만들어집니다.

  • dotnet/sdk

    샘플에서는 앱을 빌드하는 데 이 이미지를 사용합니다. 이미지는 CLI(명령줄 도구)가 포함된 .NET SDK를 포함합니다. 이미지는 로컬 개발, 디버깅 및 유닛 테스트에 최적화되어 있습니다. 개발 및 컴파일용으로 설치된 도구는 이미지를 비교적 크게 만듭니다.

  • dotnet/aspnet

    샘플에서는 앱을 실행하는 데 이 이미지를 사용합니다. 이 이미지는 ASP.NET Core 런타임 및 라이브러리를 포함하며 프로덕션에서 실행 중인 앱에 최적화되어 있습니다. 배포 및 앱 시작 속도를 위해 디자인된 이 이미지는 비교적 작기 때문에 Docker 레지스트리에서 Docker 호스트까지 네트워크 성능이 최적화됩니다. 앱을 실행하는 데 필요한 이진 파일 및 콘텐츠만 컨테이너에 복사됩니다. 콘텐츠를 실행할 준비가 되면 docker run부터 앱 시작까지 가장 빠른 시간에 수행할 수 있습니다. 동적 코드 컴파일은 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을 찾습니다.

    실행 명령 인수:

    • 의사 TTY를 할당하고 연결되지 않은 경우에도 열어 둡니다. (--interactive --tty와 결과가 동일함)
    • 종료될 때 자동으로 컨테이너를 제거합니다.
    • 로컬 머신을 컨테이너의 포트 8080에 매핑 <port> 합니다.
    • 컨테이너 이름을 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> 찾습니다 home .

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 명령에서 사용되는 Dockerfile은 다음과 같습니다. 이 섹션에서 빌드 및 배포하기 위해 사용한 것과 동일한 방식으로 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 명령은 이미지를 빌드할 때 기본 제공 캐시를 사용합니다. docker build 명령을 마지막으로 실행한 후 *.csproj 파일이 변경되지 않았다면 dotnet restore 명령을 다시 실행할 필요가 없습니다. 대신 해당 dotnet restore 계층에 대한 기본 제공 캐시가 다시 사용됩니다. 자세한 내용은 Dockerfiles 작성에 대한 모범 사례를 참조하세요.

추가 리소스

다음 단계

샘플 앱이 포함된 Git 리포지토리도 문서를 포함합니다. 리포지토리에서 사용 가능한 리소스의 개요를 보려면 README 파일을 참조하세요. 특히, HTTPS를 구현하는 방법을 알아봅니다.

Developing ASP.NET Core Applications with Docker over HTTPS(HTTPS를 통해 Docker를 사용하여 ASP.NET Core 애플리케이션 개발)

ASP.NET Core Docker 이미지

이 자습서의 경우 ASP.NET Core 샘플 앱을 다운로드하고 Docker 컨테이너에서 실행합니다. 샘플은 Linux 컨테이너와 Windows 컨테이너 둘 다에서 작동합니다.

샘플 Dockerfile은 Docker 다단계 빌드 기능을 사용하여 서로 다른 컨테이너에서 빌드 및 실행합니다. 빌드 및 실행 컨테이너는 Microsoft에서 Docker 허브에 제공한 이미지를 기반으로 만들어집니다.

  • dotnet/sdk

    샘플에서는 앱을 빌드하는 데 이 이미지를 사용합니다. 이미지는 CLI(명령줄 도구)가 포함된 .NET SDK를 포함합니다. 이미지는 로컬 개발, 디버깅 및 유닛 테스트에 최적화되어 있습니다. 개발 및 컴파일용으로 설치된 도구는 이미지를 비교적 크게 만듭니다.

  • dotnet/aspnet

    샘플에서는 앱을 실행하는 데 이 이미지를 사용합니다. 이 이미지는 ASP.NET Core 런타임 및 라이브러리를 포함하며 프로덕션에서 실행 중인 앱에 최적화되어 있습니다. 배포 및 앱 시작 속도를 위해 디자인된 이 이미지는 비교적 작기 때문에 Docker 레지스트리에서 Docker 호스트까지 네트워크 성능이 최적화됩니다. 앱을 실행하는 데 필요한 이진 파일 및 콘텐츠만 컨테이너에 복사됩니다. 콘텐츠를 실행할 준비가 되면 docker run부터 앱 시작까지 가장 빠른 시간에 수행할 수 있습니다. 동적 코드 컴파일은 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을 찾습니다.

    실행 명령 인수:

    • 의사 TTY를 할당하고 연결되지 않은 경우에도 열어 둡니다. (--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 찾습니다 home .

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 명령에서 사용되는 Dockerfile은 다음과 같습니다. 이 섹션에서 빌드 및 배포하기 위해 사용한 것과 동일한 방식으로 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 명령은 이미지를 빌드할 때 기본 제공 캐시를 사용합니다. docker build 명령을 마지막으로 실행한 후 *.csproj 파일이 변경되지 않았다면 dotnet restore 명령을 다시 실행할 필요가 없습니다. 대신 해당 dotnet restore 계층에 대한 기본 제공 캐시가 다시 사용됩니다. 자세한 내용은 Dockerfiles 작성에 대한 모범 사례를 참조하세요.

추가 리소스

다음 단계

샘플 앱이 포함된 Git 리포지토리도 문서를 포함합니다. 리포지토리에서 사용 가능한 리소스의 개요를 보려면 README 파일을 참조하세요. 특히, HTTPS를 구현하는 방법을 알아봅니다.

Developing ASP.NET Core Applications with Docker over HTTPS(HTTPS를 통해 Docker를 사용하여 ASP.NET Core 애플리케이션 개발)

ASP.NET Core Docker 이미지

이 자습서의 경우 ASP.NET Core 샘플 앱을 다운로드하고 Docker 컨테이너에서 실행합니다. 샘플은 Linux 컨테이너와 Windows 컨테이너 둘 다에서 작동합니다.

샘플 Dockerfile은 Docker 다단계 빌드 기능을 사용하여 서로 다른 컨테이너에서 빌드 및 실행합니다. 빌드 및 실행 컨테이너는 Microsoft에서 Docker 허브에 제공한 이미지를 기반으로 만들어집니다.

  • 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 모델에 필요하지 않습니다.

필수 조건

샘플 앱 다운로드

로컬에서 앱 실행하기

  • 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을 찾습니다.

    실행 명령 인수:

    • 의사 TTY를 할당하고 연결되지 않은 경우에도 열어 둡니다. (--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 찾습니다 home .

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 명령에서 사용되는 Dockerfile은 다음과 같습니다. 이 섹션에서 빌드 및 배포하기 위해 사용한 것과 동일한 방식으로 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 명령에서 사용되는 Dockerfile은 다음과 같습니다. 이 섹션에서 빌드 및 배포하기 위해 사용한 것과 동일한 방식으로 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 명령은 이미지를 빌드할 때 기본 제공 캐시를 사용합니다. docker build 명령을 마지막으로 실행한 후 *.csproj 파일이 변경되지 않았다면 dotnet restore 명령을 다시 실행할 필요가 없습니다. 대신 해당 dotnet restore 계층에 대한 기본 제공 캐시가 다시 사용됩니다. 자세한 내용은 Dockerfiles 작성에 대한 모범 사례를 참조하세요.

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

Dockerfile

이전에 실행한 docker build 명령에서 사용되는 Dockerfile은 다음과 같습니다. 이 섹션에서 빌드 및 배포하기 위해 사용한 것과 동일한 방식으로 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 명령은 이미지를 빌드할 때 기본 제공 캐시를 사용합니다. docker build 명령을 마지막으로 실행한 후 *.csproj 파일이 변경되지 않았다면 dotnet restore 명령을 다시 실행할 필요가 없습니다. 대신 해당 dotnet restore 계층에 대한 기본 제공 캐시가 다시 사용됩니다. 자세한 내용은 Dockerfiles 작성에 대한 모범 사례를 참조하세요.

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

Dockerfile

이전에 실행한 docker build 명령에서 사용되는 Dockerfile은 다음과 같습니다. 이 섹션에서 빌드 및 배포하기 위해 사용한 것과 동일한 방식으로 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 명령은 이미지를 빌드할 때 기본 제공 캐시를 사용합니다. docker build 명령을 마지막으로 실행한 후 *.csproj 파일이 변경되지 않았다면 dotnet restore 명령을 다시 실행할 필요가 없습니다. 대신 해당 dotnet restore 계층에 대한 기본 제공 캐시가 다시 사용됩니다. 자세한 내용은 Dockerfiles 작성에 대한 모범 사례를 참조하세요.

추가 리소스

다음 단계

샘플 앱이 포함된 Git 리포지토리도 문서를 포함합니다. 리포지토리에서 사용 가능한 리소스의 개요를 보려면 README 파일을 참조하세요. 특히, HTTPS를 구현하는 방법을 알아봅니다.

Developing ASP.NET Core Applications with Docker over HTTPS(HTTPS를 통해 Docker를 사용하여 ASP.NET Core 애플리케이션 개발)