다음을 통해 공유


공식 .NET Docker 이미지

이 콘텐츠는 eBook, 컨테이너화된 .NET 애플리케이션을 위한 .NET 마이크로 서비스 아키텍처에서 발췌한 것이며, .NET 문서에서 제공되거나 오프라인 상태에서도 읽을 수 있는 PDF(무료 다운로드 가능)로 제공됩니다.

컨테이너화된 .NET 애플리케이션을 위한 .NET 마이크로 서비스 아키텍처 eBook 표지 썸네일.

공식 .NET Docker 이미지는 Microsoft에서 만들고 최적화된 Docker 이미지입니다. Microsoft 아티팩트 레지스트리에서 공개적으로 사용할 수 있습니다. 카탈로그를 검색하여 모든 .NET 이미지 리포지토리(예: .NET SDK 리포지토리)를 찾을 수 있습니다.

각 리포지토리는 .NET 버전 및 OS와 버전(Linux Debian, Linux Alpine, Windows Nano Server, Windows Server Core 등)에 따라 여러 이미지를 포함할 수 있습니다. 이미지 리포지토리는 특정 프레임워크 버전뿐만 아니라 OS(Linux 배포 또는 Windows 버전)를 선택하는 데 도움이 되는 광범위한 태그 지정을 제공합니다.

개발 및 프로덕션을 위한 .NET 및 Docker 이미지 최적화

Microsoft에서는 개발자를 위한 Docker 이미지를 빌드할 때 다음과 같은 주요 시나리오를 중점적으로 고려했습니다.

  • .NET 앱을 ‘개발’하고 빌드하는 데 사용되는 이미지

  • .NET 앱을 ‘실행’하는 데 사용되는 이미지

여러 이미지인 이유는 무엇인가요? 컨테이너화된 애플리케이션을 개발, 빌드 및 실행할 때 일반적으로 다양한 우선 순위가 있습니다. Microsoft에서는 이러한 별도 작업에 다른 이미지를 제공하여 앱을 개발하고, 빌드하고, 배포하는 별도 프로세스를 최적화할 수 있습니다.

개발 및 빌드 중

개발 중에 중요한 점은 변경 내용을 반복하는 신속성 및 변경 내용을 디버깅하는 기능입니다. 이미지의 크기는 코드를 변경하고 변경 내용을 신속하게 확인하는 기능만큼 중요하지 않습니다. 일부 도구 및 “빌드 에이전트 컨테이너”는 개발 및 빌드 프로세스 중에 개발 .NET 이미지(mcr.microsoft.com/dotnet/sdk:8.0)를 사용합니다. Docker 컨테이너 안에 빌드하는 경우 중요한 측면은 앱을 컴파일하는 데 필요한 요소입니다. 여기에는 컴파일러 및 다른 .NET 종속성이 포함됩니다.

또 다른 좋은 선택지는 개발 컨테이너입니다. 이러한 컨테이너는 사용할 준비가 된 미리 빌드된 개발 환경이므로 종속성 및 구성에 대해 걱정할 필요가 없습니다. 또한, 추가 도구 또는 종속성을 포함하도록 쉽게 사용자 지정할 수 있습니다. 개발 컨테이너는 팀과 쉽게 공유할 수 있는 일관되고 재현 가능한 설정을 제공합니다. 개발 컨테이너는 개발 컨테이너 사양을 준수하며 Visual Studio Code 및 GitHub Codespaces를 비롯한 많은 인기 있는 개발자 도구가 이를 지원합니다. .NET 개발 컨테이너는 .NET SDK 이미지를 기반으로 하며 .NET 애플리케이션을 개발하는 데 필요한 .NET SDK, 런타임 및 기타 도구를 포함합니다.

이러한 형식의 빌드 이미지가 중요한 이유는 무엇인가요? 프로덕션에 이 이미지를 배포하지 않습니다. 대신 프로덕션 이미지에 배치하는 콘텐츠를 빌드하는 데 사용되는 이미지입니다. 이 이미지는 Docker 다단계 빌드를 사용할 경우 CI(지속적인 통합) 환경 또는 빌드 환경에서 사용됩니다.

프로덕션 내

프로덕션에서 중요한 점은 프로덕션 .NET 이미지를 기반으로 얼마나 빠르게 컨테이너를 배포하고 시작할 수 있는지입니다. 따라서 네트워크를 통해 Docker 레지스트리에서 Docker 호스트로 빠르게 이동할 수 있도록 mcr.microsoft.com/dotnet/aspnet:8.0을 기반으로 한 런타임 전용 이미지는 소규모입니다. 콘텐츠를 실행할 준비가 되면 컨테이너 시작부터 결과 처리까지 가장 빠른 시간에 수행할 수 있습니다. Docker 모델에서 빌드 컨테이너를 사용할 때 dotnet build 또는 dotnet publish를 실행하므로 C# 코드로 컴파일할 필요가 없습니다.

이 최적화된 이미지에 애플리케이션을 실행하는 데 필요한 이진 파일 및 기타 콘텐츠를 배치합니다. 예를 들어 dotnet publish에서 만든 콘텐츠에는 컴파일된 .NET 이진 파일, 이미지, .js 및 .css 파일만이 포함됩니다. 시간이 지나면 미리 JIT 컴파일된(런타임에 발생하는 IL에서 네이티브로의 컴파일) 패키지를 포함하는 이미지를 보게 됩니다.

여러 버전의 .NET 및 ASP.NET Core 이미지가 있지만 기본 계층을 비롯하여 모두 하나 이상의 계층을 공유합니다. 따라서 이미지를 저장하는 데 필요한 디스크 공간의 크기는 작고 사용자 지정 이미지와 해당 기본 이미지 간의 델타로만 구성됩니다. 결과적으로 레지스트리에서 이미지를 빠르게 끌어옵니다.

Microsoft 아티팩트 레지스트리에서 .NET 이미지 리포지토리를 탐색하면 분류되거나 태그로 표시된 여러 이미지 버전을 찾을 수 있습니다. 이러한 태그를 통해 다음 표와 같이 필요한 버전에 따라 사용할 항목을 결정할 수 있습니다.

이미지 설명
mcr.microsoft.com/dotnet/aspnet:8.0 Linux 및 Windows에서 런타임 전용 및 ASP.NET Core 최적화가 포함된 ASP.NET Core(다중 아키텍처)
mcr.microsoft.com/dotnet/sdk:8.0 Linux 및 Windows에서 SDK가 포함된 .NET 8(다중 아키텍처)

dotnet-docker에서 사용 가능한 모든 Docker 이미지를 찾을 수 있으며, 야간 빌드 mcr.microsoft.com/dotnet/nightly/*를 사용하여 최신 미리 보기 릴리스를 참조할 수도 있습니다.