.NET CLI로 C# 애플리케이션을 쉽게 컨테이너화
컨테이너는 강력한 도구이지만, 많은 개발자에게 C# 애플리케이션을 컨테이너에 넣는다는 생각은 부담스러울 수 있습니다. Dockerfile을 설정하고 종속성을 수동으로 처리하는 것은 복잡할 수 있습니다. 하지만 Tim Corey가 자신의 영상에서 설명했듯이, .NET CLI는 이 과정을 간소화하여 개발자가 Dockerfile 없이도 애플리케이션을 컨테이너화할 수 있도록 해줍니다.
이 글에서는 Tim의 비디오 " .NET CLI를 사용하여 C# 애플리케이션을 쉽게 컨테이너화하기"에서 제시된 단계별 접근 방식을 통해 C # 애플리케이션을 컨테이너화하는 방법을 자세히 살펴보겠습니다. Tim의 안내에 따라 .NET 애플리케이션을 Docker 컨테이너에 손쉽게 배포하는 방법을 알아보겠습니다.
컨테이너 for .NET CLI 소개
영상 초반에 팀은 컨테이너화의 필요성에 대해 설명합니다. 그는 컨테이너가 훌륭한 도구이긴 하지만, Dockerfile을 설정하고 올바르게 구성하는 과정이 복잡할 수 있다고 강조합니다.
팀은 Dockerfile을 수동으로 생성하는 대신 .NET CLI를 사용하는 더 쉬운 방법을 소개합니다. 이 방법을 사용하면 개발자는 Dockerfile을 수동으로 작성하지 않고도 컨테이너화된 애플리케이션을 만들 수 있습니다.
팀은 또한 이 영상이 기술적인 주제를 빠르고 효과적으로 소개하는 데 초점을 맞춘 10분 교육 시리즈의 일부라고 설명합니다.
애플리케이션 설정
팀은 최소한의 웹 API 애플리케이션을 예시로 들면서 이야기를 시작합니다. 응용 프로그램에는 일부 데이터를 반환하는 /messages라는 단일 엔드포인트가 포함되어 있습니다.
컨테이너화 전에 애플리케이션의 동작을 보여주기 위해 Tim은 로컬에서 애플리케이션을 실행합니다. 그는 컨테이너 외부에서 올바르게 작동함을 확인하기 위해 /messages 엔드포인트에 접근합니다.
컨테이너화를 진행하기 전에 그는 다음 사항도 확인합니다.
- 그의 컴퓨터에는 Docker가 설치되어 실행 중입니다.
- 시작 시점에 기존 Docker 이미지 또는 컨테이너가 없습니다.
이렇게 하면 새 컨테이너가 생성될 때 변경 사항을 명확하게 확인할 수 있습니다.
컨테이너화 준비
애플리케이션을 컨테이너화하기 위해 Tim은 프로젝트 디렉토리 내의 명령줄로 이동합니다. 그는 이어서 다음 명령어를 실행합니다.
dotnet publish -o:Linux -a:x64 -p:PublishProfile=DefaultContainer -c:Release
팀은 명령의 각 부분을 자세히 설명합니다.
-o:Linux→ Linux 기반 컨테이너에 응용 프로그램을 게시합니다.-a:x64→ 아키텍처를 64비트로 지정합니다.-p:PublishProfile=DefaultContainer→ 기본 컨테이너 설정을 사용합니다.-c:Release→ 더 나은 성능을 위해 릴리스 모드로 앱을 게시합니다.
Tim은 Windows 컨테이너가 주로 .NET Framework 애플리케이션용 브리지 역할을 하기 때문에 Linux 컨테이너가 Windows 컨테이너보다 선호된다고 강조합니다.
컨테이너 게시 및 생성
Tim은 게시 명령이 실행되면 .NET CLI가 필요한 구성을 자동으로 파악하고 모든 것을 컨테이너에 패키징한다고 설명합니다. 그는 다음과 같이 지적합니다.
- 이 방법에서는 Dockerfile이 필요하지 않습니다.
- 이 프로세스는 애플리케이션을 빌드하고 컨테이너화하는 작업을 한 단계로 수행합니다.
- 기본 이미지로는 마이크로소프트의 .NET 8 런타임 컨테이너를 사용합니다.
게시 후 그는 Docker Desktop을 확인하고 새 컨테이너 이미지 background-demo가 생성되었음을 확인합니다. 초기 컨테이너 크기는 221MB입니다.
팀은 시청자들에게 이 크기는 나중에 줄일 수 있다고 안심시킵니다.
컨테이너 실행 중
컨테이너화된 애플리케이션을 테스트하기 위해 Tim은 Docker Desktop에서 컨테이너를 직접 시작합니다. 아직 실행 중인 컨테이너가 없으므로 "실행"을 클릭하고 선택적 설정을 지정합니다.
- 그는 컨테이너의 내부 포트(임의로 할당됨)를 호스트 시스템의 8080 포트에 매핑합니다.
실행 후, 그는 웹 브라우저를 사용하여 애플리케이션에 접속합니다. 초기에는 루트 URL에 접근할 때 404 오류가 발생하지만, /messages로 이동하면 예상한 데이터가 성공적으로 표시됩니다.
팀은 중요한 점을 강조합니다:
- 애플리케이션은 컨테이너 내부에서 UTC 시간으로 실행되며, 이는 로컬 컴퓨터의 시간대와 다를 수 있습니다.
그는 또한 해당 애플리케이션이 릴리스 모드로 게시되었기 때문에 Swagger UI가 기본적으로 비활성화되어 있다고 언급했습니다.
컨테이너 크기 최적화
현재 기본 컨테이너 크기는 221MB이며, 팀은 이것이 상당히 큰 크기임을 인정합니다. 크기를 줄이기 위해 그는 더 밝은 기본 이미지를 도입합니다.
그는 Program.cs 파일을 수정하여 컨테이너 패밀리를 더 작은 Ubuntu 기반 이미지 jammy-chiseled로 설정합니다:
builder.Services.Configure<ContainerOptions>(options => options.ContainerFamily = "jammy-chiseled");builder.Services.Configure<ContainerOptions>(options => options.ContainerFamily = "jammy-chiseled");그는 다시 게시 명령을 실행하고 컨테이너를 재구축한 후 이미지 크기를 다시 확인합니다.
새 이미지 크기는 113MB로, 약 100MB 감소했습니다! 크기는 작아졌지만 기능은 동일하게 작동합니다.
컨테이너 삭제 및 재생성
Tim은 작업 공간을 정리하기 위해 컨테이너를 삭제하는 방법을 보여줍니다. 하지만 Docker 이미지는 그대로 남아 있으므로 필요한 경우 컨테이너를 다시 생성할 수 있습니다.
그는 컨테이너가 일단 제작되면 다음과 같은 이점을 누릴 수 있다고 강조합니다.
- 개발 및 테스트를 위해 로컬 환경에서 실행하세요.
- Docker Hub 또는 Azure Container Registry와 같은 컨테이너 레지스트리에 푸시됩니다.
- 클라우드 기반 웹 애플리케이션의 기반으로 사용됩니다.
결론 및 최종 생각
팀은 .NET CLI를 컨테이너화에 사용하는 주요 이점을 다시 한번 강조하며 영상을 마무리합니다.
- Dockerfile이 필요 없습니다. .NET CLI가 모든 것을 자동으로 처리합니다.
- 빠르고 간편한 프로세스 – 단 하나의 명령으로 애플리케이션을 컨테이너화할 수 있습니다.
- 더 작고 최적화된 이미지 –
jammy-chiseled을 사용하여 컨테이너 크기를 줄입니다. - 원활한 배포 – 컨테이너를 다양한 클라우드 서비스에 푸시할 수 있습니다.
마지막으로
Tim이 제시하는 .NET CLI를 이용한 C# 애플리케이션 컨테이너화 방식은 간단하고 빠르며 효과적입니다. 그의 방법을 따르면 개발자는 Docker에 대한 광범위한 지식 없이도 컨테이너를 생성하고 최적화할 수 있습니다.
이 기술은 리눅스 컨테이너, 최적화된 기본 이미지 및 간소화된 게시 명령을 활용하여 개발자가 최소한의 노력으로 애플리케이션을 효율적으로 컨테이너화할 수 있도록 합니다.
더 자세히 알고 싶으시다면 팀 코리의 영상을 꼭 확인해 보세요. 이 문서에서는 전체 과정을 명확하고 단계적으로 안내합니다.

