.NET Core 앱 컨테이너화
적용 대상: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016
이 항목에서는 시작:컨테이너에 대한 Windows 준비 및 첫 번째 Windows 컨테이너 실행설명한 대로 첫 번째 컨테이너를 실행하여 환경을 설정한 후 Windows 컨테이너로 배포할 기존 샘플 .NET 앱을 패키지하는 방법에 대해 설명합니다.
컴퓨터에 Git 소스 제어 시스템도 설치되어 있어야 합니다. 설치하려면 Git방문하세요.
GitHub에서 샘플 코드 복제
모든 컨테이너 샘플 소스 코드는 windows-container-samples
폴더의 Virtualization-Documentation git 리포지토리 아래에 유지됩니다.
PowerShell 세션을 열고 디렉터리를 이 리포지토리를 저장할 폴더로 변경합니다. (다른 명령 프롬프트 창 형식도 작동하지만 예제 명령은 PowerShell을 사용합니다.)
리포지토리를 현재 작업 디렉터리에 복제합니다.
git clone https://github.com/MicrosoftDocs/Virtualization-Documentation.git
다음 명령을 사용하여
Virtualization-Documentation\windows-container-samples\asp-net-getting-started
아래에 있는 샘플 디렉터리로 이동하고 Dockerfile을 만듭니다.Dockerfile 메이크파일과 비슷합니다. 컨테이너 엔진에 컨테이너 이미지를 빌드하는 방법을 알려주는 지침 목록입니다.
# Navigate into the sample directory Set-Location -Path Virtualization-Documentation\windows-container-samples\asp-net-getting-started # Create the Dockerfile for our project New-Item -Name Dockerfile -ItemType file
Dockerfile 작성
원하는 텍스트 편집기를 사용하여 방금 만든 Dockerfile을 열고 다음 콘텐츠를 추가합니다.
FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build-env
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "asp-net-getting-started.dll"]
이를 줄별로 분석하고 각 지침이 수행하는 작업을 설명해 보겠습니다.
FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build-env
WORKDIR /app
첫 번째 줄 그룹은 컨테이너를 빌드하는 데 사용할 기본 이미지를 선언합니다. 로컬 시스템에 이 이미지가 아직 없으면 docker가 자동으로 시도하여 가져옵니다. 이 mcr.microsoft.com/dotnet/core/sdk:2.1
.NET Core 2.1 SDK가 설치된 패키지로 제공되므로 버전 2.1을 대상으로 하는 ASP .NET Core 프로젝트를 빌드해야 합니다. 다음 명령은 컨테이너의 작업 디렉터리를 /app
변경하므로 이 명령 다음에 오는 모든 명령은 이 컨텍스트에서 실행됩니다.
COPY *.csproj ./
RUN dotnet restore
다음으로 이러한 지침은 .csproj 파일을 통해 build-env
컨테이너의 /app
디렉터리에 복사합니다. 이 파일을 복사한 후 .NET은 파일을 읽은 다음, 나가서 프로젝트에 필요한 모든 종속성 및 도구를 가져옵니다.
COPY . ./
RUN dotnet publish -c Release -o out
.NET에서 모든 종속성을 build-env
컨테이너로 끌어오면 다음 명령은 모든 프로젝트 원본 파일을 컨테이너에 복사합니다. 그런 다음 릴리스 구성을 사용하여 애플리케이션을 게시하고 출력 경로를 지정하도록 .NET에 지시합니다.
컴파일이 성공해야 합니다. 이제 최종 이미지를 빌드해야 합니다.
팁
이 빠른 시작에서는 원본에서 .NET Core 프로젝트를 빌드합니다. 컨테이너 이미지를 빌드할 때 프로덕션 페이로드와 그 종속성만을 포함하는 것이 좋습니다. .NET Core 런타임만 필요하기 때문에 .NET Core SDK를 최종 이미지에 포함하지 않기 때문에 dockerfile은 앱을 빌드하기 위해 build-env
라는 SDK로 패키지된 임시 컨테이너를 사용하도록 작성됩니다.
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "asp-net-getting-started.dll"]
애플리케이션이 ASP.NET 있으므로 이 런타임이 포함된 이미지를 지정합니다. 그런 다음 임시 컨테이너의 출력 디렉터리에서 최종 컨테이너로 모든 파일을 복사합니다. 컨테이너가 시작될 때 새 앱을 진입점으로 실행하도록 컨테이너를 구성합니다.
다단계 빌드수행하기 위해 dockerfile을 작성했습니다. dockerfile이 실행되면 .NET Core 2.1 SDK와 함께 build-env
임시 컨테이너를 사용하여 샘플 앱을 빌드한 다음 출력된 이진 파일을 .NET Core 2.1 런타임만 포함하는 다른 컨테이너에 복사하여 최종 컨테이너의 크기를 최소화합니다.
앱 빌드 및 실행
Dockerfile을 작성하면 Docker에서 해당 Dockerfile을 지정하고 이미지를 빌드한 후 실행하도록 지시할 수 있습니다.
명령 프롬프트 창에서 dockerfile이 있는 디렉터리로 이동한 다음 docker build 명령을 실행하여 Dockerfile에서 컨테이너를 빌드합니다.
docker build -t my-asp-app .
새로 빌드된 컨테이너를 실행하려면 docker run 명령을 실행합니다.
docker run -d -p 5000:80 --name myapp my-asp-app
이 명령을 해부해 보겠습니다.
-
-d
컨테이너 '분리'를 실행하도록 Docker에 지시합니다. 즉, 콘솔이 컨테이너 내의 콘솔에 연결되지 않습니다. 컨테이너는 백그라운드에서 실행됩니다. -
-p 5000:80
호스트의 포트 5000을 컨테이너의 포트 80에 매핑하도록 Docker에 지시합니다. 각 컨테이너는 자체 IP 주소를 가져옵니다. ASP .NET은 포트 80에서 기본적으로 수신 대기합니다. 포트 매핑을 사용하면 매핑된 포트에서 호스트의 IP 주소로 이동하고 Docker는 모든 트래픽을 컨테이너 내의 대상 포트로 전달합니다. -
--name myapp
Docker에서 런타임에 할당된 컨테이너 ID를 조회하는 대신 이 컨테이너에 쿼리할 편리한 이름을 지정하도록 Docker에 지시합니다. -
my-asp-app
Docker를 실행하려는 이미지입니다.docker build
프로세스의 절정으로 생성된 컨테이너 이미지입니다.
-
웹 브라우저를 열고
http://localhost:5000
이동하여 컨테이너화된 애플리케이션을 확인합니다.컨테이너ASP.NET Core 웹 페이지
다음 단계
다음 단계는 Azure Container Registry를 사용하여 컨테이너화된 ASP.NET 웹앱을 프라이빗 레지스트리에 게시하는 것입니다. 이를 통해 조직에 배포할 수 있습니다.
프라이빗 컨테이너 레지스트리 만들기
레지스트리 컨테이너 이미지를 푸시할있는 섹션에 도착하면 컨테이너 레지스트리와 함께 방금 패키지한 ASP.NET 앱의 이름(
my-asp-app
)을 지정합니다(예:contoso-container-registry
).docker tag my-asp-app contoso-container-registry.azurecr.io/my-asp-app:v1
더 많은 앱 샘플 및 관련 dockerfile을 보려면 추가 컨테이너 샘플참조하세요.
컨테이너 레지스트리에 앱을 게시한 후 다음 단계는 Azure Kubernetes Service를 사용하여 만든 Kubernetes 클러스터에 앱을 배포하는 것입니다.
Kubernetes 클러스터 만들기