다음을 통해 공유


.NET 및 Docker 소개

컨테이너는 Docker, KubernetesPodman같은 도구를 사용하여 클라우드 애플리케이션을 배포하고 호스팅하는 가장 인기 있는 방법 중 하나입니다. 많은 개발자는 종속성이 있는 앱을 패키지하고 해당 앱을 모든 컨테이너 호스트에서 안정적으로 실행하도록 하는 것이 간단하기 때문에 컨테이너를 선택합니다. .NET을 사용하는 컨테이너에 대한 의 광범위한 지원이 있습니다.

Docker는 컨테이너의 훌륭한 개요 제공합니다. Docker Desktop: Community Edition 개발자 데스크톱 머신에서 컨테이너를 사용하는 데 사용하기에 좋은 도구입니다.

.NET 이미지

공식 .NET 컨테이너 이미지는 Microsoft Artifact Registry에 게시되었으며 Docker 허브에서 검색할 수 있습니다. Linux(Alpine, Debian, Ubuntu, Mariner) 및 Windows용 코드를 빌드하기 위해 프로덕션 및 SDK 이미지에 런타임 이미지가 있습니다. 자세한 내용은 .NET 컨테이너 이미지참조하세요.

.NET 이미지는 새 .NET 패치가 게시되거나 운영 체제 기본 이미지가 업데이트될 때마다 정기적으로 업데이트됩니다.

깎여진 컨테이너 이미지는 .NET 런타임에 필요한 최소한의 구성 요소로 구성된 Ubuntu 컨테이너 이미지입니다. 이러한 이미지는 일반 Ubuntu 이미지보다 100MB 더 작으며 구성 요소가 적기 때문에 CVE가 적습니다. 특히 셸 또는 패키지 관리자가 포함되어 있지 않으므로 보안 프로필이 크게 향상됩니다. 또한 루트가 아닌 사용자 포함하며 해당 사용자를 사용하도록 구성됩니다.

컨테이너 이미지 빌드

Dockerfile 사용하여 컨테이너 이미지를 빌드하거나 .NET SDK를 사용하여 이미지생성할 수 있습니다. 이미지 빌드에 대한 예제를 보려면 dotnet/dotnet-dockerdotnet/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 Dockerfiles를 사용하려는 개발자를 위한 새로운 옵션입니다.

포트

포트 매핑 컨테이너 사용의 핵심 부분입니다. 외부 웹 요청에 응답하려면 컨테이너 외부에 포트를 게시해야 합니다. ASP.NET Core 컨테이너 이미지는 기본적으로 포트 수신 대기하도록 .NET 8 변경될 있습니다. .NET 6 및 7은 포트 80수신 대기합니다.

이전 예제 docker run에서, 호스트 포트 8000이 컨테이너 포트 8080로 매핑됩니다. Kubernetes는 비슷한 방식으로 작동합니다.

ASPNETCORE_HTTP_PORTS, ASPNETCORE_HTTPS_PORTSASPNETCORE_URLS 환경 변수를 사용하여 이 동작을 구성할 수 있습니다.

사용자

.NET 8부터 모든 이미지에는 app이라는 루트가 아닌 사용자가 포함 됩니다. 기본적으로 끌 이미지는 해당 사용자가 활성화된 상태로 구성됩니다. .NET 컨테이너로 앱 게시 기능(컨테이너 이미지 빌드 섹션에서 설명됨)은 이 사용자가 기본적으로 사용하도록 설정된 이미지를 구성합니다. 다른 모든 시나리오에서는 app 사용자를 수동으로 설정할 수 있습니다(예: USERDockerfile 명령). 이미지가 app으로 구성된 경우에, 명령을 root로 실행해야 한다면, USER 명령을 사용하여 사용자를 root로 설정할 수 있습니다.

정보를 계속 얻기

컨테이너 관련 뉴스는 dotnet/dotnet-docker 토론 .NET 블로그 "컨테이너" 범주게시됩니다.

Azure 서비스

다양한 Azure 서비스는 컨테이너를 지원합니다. 애플리케이션에 대한 Docker 이미지를 만들고 다음 서비스 중 하나에 배포합니다.

  • Azure Kubernetes Service(AKS)
    Kubernetes를 사용하여 Windows & Linux 컨테이너의 크기를 조정하고 오케스트레이션합니다.

  • Azure App Service
    PaaS 환경에서 컨테이너를 사용하여 웹앱 또는 API를 배포합니다.

  • Azure Container Apps
    서버, 오케스트레이션 또는 인프라를 관리하지 않고 컨테이너 워크로드를 실행하며, DaprKEDA의 기본 지원을 활용하여 제로로 스케일링합니다.

  • Azure Container Instances
    더 높은 수준의 관리 서비스 없이 클라우드에서 개별 컨테이너를 만듭니다.

  • Azure Batch
    컨테이너를 사용하여 반복적인 컴퓨팅 작업을 실행합니다.

  • Azure Service Fabric
    Windows & Linux 컨테이너를 사용하여 .NET 애플리케이션을 마이크로 서비스로 리프트, 시프트 및 현대화합니다.

  • Azure Container Registry
    모든 유형의 Azure 배포에서 컨테이너 이미지를 저장하고 관리합니다.

다음 단계