컨테이너 안의 ASP.NET Core
이 가이드에서는 다음을 배우게 됩니다:
- 간단한 .NET Core 서비스 컨테이너를 설명하는
Dockerfile파일 만들기. - 서비스를 빌드, 실행 및 기능 확인하기.
- 컨테이너에서 실행 중인 서비스를 디버깅하기.
전제 조건
- Docker와 VS Code 컨테이너 도구 확장이 개요에 설명된 대로 설치되어 있어야 합니다.
- .NET 개발을 위해 .NET SDK를 설치하십시오.
- Microsoft Visual Studio Code용 C# 확장.
.NET 웹 API 프로젝트 만들기
-
프로젝트를 위한 폴더를 만듭니다.
-
프로젝트 폴더에서 개발자 명령 프롬프트를 열고 프로젝트를 초기화합니다.
dotnet new webapi --no-https
프로젝트에 Docker 파일 추가하기
-
VS Code에서 프로젝트 폴더를 엽니다.
-
C# 확장이 빌드 및 디버그에 필요한 에셋을 추가하라는 메시지를 표시할 때까지 기다리고 예를 선택합니다. 명령 팔레트(⇧⌘P (Windows, Linux Ctrl+Shift+P))를 열고 .NET: 빌드 및 디버그를 위한 에셋 생성 명령을 사용할 수도 있습니다.
-
명령 팔레트(⇧⌘P (Windows, Linux Ctrl+Shift+P))를 열고 컨테이너: 작업 영역에 Docker 파일 추가... 명령을 사용합니다.

-
애플리케이션 플랫폼에 대한 메시지가 표시되면 .NET: ASP.NET Core를 사용합니다.
-
운영 체제를 선택하라는 메시지가 표시되면 Windows 또는 Linux를 선택합니다.
Windows는 Docker 설치가 Windows 컨테이너를 사용하도록 구성된 경우에만 적용됩니다.
-
Docker Compose 파일을 추가할 것인지 묻는 메시지가 표시됩니다. 이 튜토리얼에서는 Docker Compose를 사용하지 않으므로 "예" 또는 "아니요" 답변 모두 괜찮습니다.
-
애플리케이션 엔드포인트 포트를
5000으로 변경합니다. -
Dockerfile및.dockerignore파일이 작업 영역에 추가됩니다.이 확장은 컨테이너를 빌드하고 실행하기 위한 **VS Code 작업** 집합(디버그 및 릴리스 구성 모두, 총 4개의 작업)과 디버그 모드에서 컨테이너를 시작하기 위한 **디버깅 구성**도 생성합니다.
애플리케이션 빌드하기
-
터미널 프롬프트를 엽니다(⌃` (Windows, Linux Ctrl+`)).
-
dotnet build명령을 실행하여 애플리케이션을 빌드합니다.PS C:\source\repos\net> dotnet build MSBuild version 17.4.0-preview-22470-08+6521b1591 for .NET Determining projects to restore... All projects are up-to-date for restore. net -> C:\source\repos\net\bin\Debug\net7.0\net.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:08.96
이미지에 환경 변수 추가하기
컨테이너 도구 확장을 사용하여 Docker 파일을 작성할 수 있습니다. 이 확장은 자동 완성 및 컨텍스트 도움말을 제공합니다. 이러한 기능을 보려면 다음 단계를 따라 서비스 이미지에 환경 변수를 추가하십시오.
-
Dockerfile파일을 엽니다. -
ENV명령을 사용하여 서비스 컨테이너 이미지에 환경 변수를 추가합니다. 이 명령은Dockerfile의base스테이지(파일의 첫 번째 스테이지)에 배치해야 합니다.ASPNETCORE_URLS변수를http://*:5000으로 설정합니다.
컨테이너 도구 확장이 사용 가능한 모든 Dockerfile 명령을 나열하고 구문을 설명하는 방법을 확인합니다.
컨테이너 도구 확장은
Dockerfile의base스테이지를 사용하여 서비스에 대한 컨테이너 이미지의 디버그 버전을 생성합니다.ASPNETCORE_URLS환경 변수 정의를base스테이지에 두면 컨테이너 이미지의 디버그 및 릴리스 버전 모두에서 이 변수를 사용할 수 있습니다. -
Dockerfile파일을 저장합니다.
이미지 빌드하기
-
명령 팔레트(⇧⌘P (Windows, Linux Ctrl+Shift+P))를 열고 컨테이너 이미지: 이미지 빌드... 명령을 실행합니다.
-
컨테이너 탐색기를 열고 새 이미지가 이미지 트리에서 보이는지 확인합니다.

서비스 컨테이너 테스트하기
-
이전 단계에서 빌드한 이미지를 마우스 오른쪽 버튼으로 클릭하고 실행 또는 대화형 실행을 선택합니다. 컨테이너가 시작되고 컨테이너 탐색기의 "컨테이너" 보기에 표시되어야 합니다.

-
웹 브라우저를 열고 https://:5000/WeatherForecast로 이동합니다. 다음 예와 유사한 형식의 날씨 데이터를 볼 수 있어야 합니다.
[ {"date":"2019-11-07T23:31:57.0527092+00:00","temperatureC":4,"temperatureF":39,"summary":"Bracing"}, {"date":"2019-11-08T23:31:57.0539243+00:00","temperatureC":-19,"temperatureF":-2,"summary":"Freezing"}, {"date":"2019-11-09T23:31:57.0539269+00:00","temperatureC":2,"temperatureF":35,"summary":"Freezing"}, {"date":"2019-11-10T23:31:57.0539275+00:00","temperatureC":-4,"temperatureF":25,"summary":"Freezing"}, {"date":"2019-11-11T23:31:57.053928+00:00","temperatureC":9,"temperatureF":48,"summary":"Bracing"} ]기본적으로 Docker는 컨테이너에서 노출된 포트(컨테이너 포트)에 임의로 선택된 **호스트 포트**를 할당합니다. 애플리케이션에서 노출된(컨테이너) 포트는 5000입니다. 이미지에 대해 **실행** 명령을 실행하면 VS Code는 호스트 포트와 컨테이너 포트에 대해 동일한 포트 번호를 사용하려고 시도합니다. 이렇게 하면 컨테이너와 통신하는 데 사용할 포트를 기억하기 쉽지만 호스트 포트가 이미 사용 중인 경우 작동하지 않습니다.
브라우저에서 컨테이너의 데이터를 볼 수 없으면
docker run명령에서 보고된 오류가 없는지 확인합니다(터미널 창의 명령 출력을 확인). 컨테이너 탐색기에서 컨테이너를 마우스 오른쪽 버튼으로 클릭하고 검사를 선택하여 컨테이너에서 사용 중인 호스트 포트를 확인할 수도 있습니다. 그러면 컨테이너를 자세히 설명하는 JSON 문서가 열립니다. 예를 들어PortBindings요소를 찾습니다."PortBindings": { "5000/tcp": [ { "HostIp": "", "HostPort": "5000" } ] }, -
테스트가 끝나면 컨테이너 탐색기에서 컨테이너를 마우스 오른쪽 버튼으로 클릭하고 중지를 선택합니다.
컨테이너 안에서 디버깅하기
애플리케이션에 Docker 파일이 추가되면 컨테이너 도구 확장은 컨테이너 내에서 서비스가 실행될 때 디버깅하기 위한 **VS Code 디버거 구성**도 추가합니다. 이 확장은 서비스가 사용 중인 프로토콜과 포트를 자동으로 감지하고 서비스로 브라우저를 가리키지만 사용할 URL 경로를 알려주어야 합니다.
-
Controllers/WeatherForecastController.cs파일의Get()메서드 코드 시작 부분에 중단점을 설정합니다. -
.vscode/launch.json파일을 열고컨테이너: .NET Core 시작디버그 구성을 찾습니다. -
컨테이너: .NET Core 시작구성에dockerServerReadyAction을 추가합니다."dockerServerReadyAction": { "uriFormat": "%s://:%s/WeatherForecast" } -
구성이 활성으로 선택되었는지 확인합니다.

-
디버깅을 시작합니다(F5).
- 서비스 컨테이너의 디버그 버전이 빌드되고 시작됩니다.
- 브라우저가 열려 새 날씨 예보를 요청합니다.
WeatherForecastController의 중단점이 적중됩니다.
docker-run: debug 작업(.vscode/tasks.json 파일에 정의됨)에서 사용하는 Docker 실행 옵션을 변경하여 호스트에서 특정 포트를 사용할 수 있습니다. 예를 들어 서비스를 노출하는 데 동일한 포트(5000)를 사용하려면 docker-run: debug 작업 정의는 다음과 같이 됩니다.
{
"type": "docker-run",
"label": "docker-run: debug",
"dependsOn": [
"docker-build: debug"
],
"dockerRun": {
"ports": [
{ "hostPort": 5000, "containerPort": 5000 }
]
},
"netCore": {
"appProject": "${workspaceFolder}/netcorerest.csproj",
"enableDebugging": true
}
다음 단계
완료되었습니다! 이제 컨테이너를 준비했으므로 다음을 수행할 수 있습니다: