.NET 및 Docker 소개
컨테이너는 Docker, Kubernetes 및 Podman과 같은 도구를 사용하여 클라우드 애플리케이션을 배포하고 호스팅하는 가장 널리 사용되는 방법 중 하나입니다. 많은 개발자가 앱을 종속성으로 패키지하고 해당 앱이 모든 컨테이너 호스트에서 안정적으로 실행되도록 하는 것이 간단하기 때문에 컨테이너를 선택합니다. 컨테이너와 함께 .NET 사용에 대한 광범위한 지원이 있습니다.
Docker는 컨테이너에 대한 훌륭한 개요를 제공합니다. Docker Desktop: Community Edition은 개발자 데스크톱 컴퓨터에서 컨테이너를 사용하는 데 사용할 수 있는 좋은 도구입니다.
.NET 이미지
공식 .NET 컨테이너 이미지는 Microsoft 아티팩트 레지스트리에 게시되며 Docker Hub에서 발견할 수 있습니다. 프로덕션용 런타임 이미지와 Linux(Alpine, Debian, Ubuntu, Mariner) 및 Windows용 코드 빌드용 SDK 이미지가 있습니다. 자세한 내용은 .NET 컨테이너 이미지를 참조하세요.
.NET 이미지는 새 .NET 패치가 게시되거나 운영 체제 기본 이미지가 업데이트될 때마다 정기적으로 업데이트됩니다.
조각난 컨테이너 이미지는 .NET 런타임에 필요한 최소한의 구성 요소 집합이 포함된 Ubuntu 컨테이너 이미지입니다. 이러한 이미지는 일반 Ubuntu 이미지보다 100MB 정도 작으며 구성 요소가 적기 때문에 CVE도 더 적습니다. 특히 보안 프로필이 크게 개선되는 셸이나 패키지 관리자가 포함되어 있지 않습니다. 또한 루트가 아닌 사용자도 포함되며 해당 사용자가 사용하도록 설정된 상태로 구성됩니다.
컨테이너 이미지 빌드
Dockerfile을 사용하여 컨테이너 이미지를 빌드하거나 .NET SDK를 사용하여 이미지를 생성할 수 있습니다. 이미지 빌드에 대한 샘플은 dotnet/dotnet-docker 및 dotnet/sdk-container-builds를 참조하세요.
다음 예에서는 몇 가지 빠른 단계를 통해 컨테이너 이미지를 빌드하고 실행하는 방법을 보여 줍니다(.NET 8 및 .NET 7.0.300에서 지원됨).
$ dotnet new webapp -o webapp
$ cd webapp/
$ dotnet publish -t:PublishContainer
MSBuild version 17.8.3+195e7f5a3 for .NET
Determining projects to restore...
All projects are up-to-date for restore.
webapp -> /home/rich/webapp/bin/Release/net8.0/webapp.dll
webapp -> /home/rich/webapp/bin/Release/net8.0/publish/
Building image 'webapp' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'.
Pushed image 'webapp:latest' to local registry via 'docker'.
$ docker run --rm -d -p 8000:8080 webapp
7c7ad33409e52ddd3a9d330902acdd49845ca4575e39a6494952b642e584016e
$ curl -s http://localhost:8000 | grep ASP.NET
<p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c7ad33409e5 webapp "dotnet webapp.dll" About a minute ago Up About a minute 0.0.0.0:8000->8080/tcp, :::8000->8080/tcp jovial_shtern
$ docker kill 7c7ad33409e5
docker init
는 Dockerfile을 사용하려는 개발자를 위한 새로운 옵션입니다.
Ports
포트 매핑은 컨테이너 사용의 핵심 부분입니다. 외부 웹 요청에 응답하려면 포트를 컨테이너 외부에 게시해야 합니다. ASP.NET Core 컨테이너 이미지는 기본적으로 포트 8080
에서 수신 대기하도록 .NET 8에서 변경되었습니다. .NET 6 및 7은 포트 80
에서 수신 대기합니다.
docker run
을 사용한 이전 예에서 호스트 포트 8000
은 컨테이너 포트 8080
에 매핑됩니다. Kubernetes는 비슷한 방식으로 작동합니다.
ASPNETCORE_HTTP_PORTS
, ASPNETCORE_HTTPS_PORTS
및 ASPNETCORE_URLS
환경 변수를 사용하여 이 동작을 구성할 수 있습니다.
사용자
.NET 8부터 모든 이미지에는 app
라는 루트가 아닌 사용자가 포함됩니다. 기본적으로 조각된 이미지는 이 사용자가 사용하도록 설정된 상태로 구성됩니다. .NET 컨테이너로 앱 게시 기능(컨테이너 이미지 빌드 섹션에서 설명)도 기본적으로 이 사용자가 사용하도록 설정된 이미지를 구성합니다. 다른 모든 시나리오에서는 app
사용자를 수동으로 설정할 수 있습니다(예: USER
Dockerfile 명령 사용). 이미지가 app
로 구성되었고 명령을 root
로 실행해야 하는 경우 USER
명령을 사용하여 사용자를 root
로 설정할 수 있습니다.
정보 유지
컨테이너 관련 뉴스는 dotnet/dotnet-docker 토론 및 .NET 블로그 "컨테이너" 범주에 게시됩니다.
Azure 서비스
다양한 Azure 서비스에서 컨테이너를 지원합니다. 애플리케이션을 위한 Docker 이미지를 생성하여 다음 서비스 중 하나에 배포합니다.
AKS(Azure Kubernetes Service)
Kubernetes를 사용하여 Windows 및 Linux 컨테이너를 스케일링하고 오케스트레이션합니다.Azure App Service
PaaS 환경에서 컨테이너를 사용하여 웹앱 또는 API를 배포합니다.Azure Container Apps
서버, 오케스트레이션 또는 인프라를 관리하지 않고도 컨테이너 워크로드를 실행하고 가시성 및 0으로 크기 오케스트레이션을 위해 Dapr 및 KEDA에 대한 네이티브 지원을 활용합니다.Azure Container Instances
더 높은 수준의 관리 서비스 없이 클라우드에서 개별 컨테이너를 만듭니다.Azure Batch
컨테이너를 사용하여 반복적인 컴퓨팅 작업을 실행합니다.Azure Service Fabric
Windows 및 Linux 컨테이너를 사용하여 .NET 애플리케이션을 마이크로 서비스로 이동, 전환 및 현대화합니다.Azure Container Registry
모든 형식의 Azure 배포에서 컨테이너 이미지 저장 및 관리합니다.
다음 단계
.NET
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기