이 문서에서는 Azure에 .NET 작업자 서비스를 배포하는 방법을 알아봅니다. 작업자가 Azure Container Registry (ACR)에서 Azure Container Instance (ACI)로 실행되면 클라우드에서 마이크로서비스 역할을 할 수 있습니다. 장기 실행 서비스에 대한 많은 사용 사례가 있으며 이러한 이유로 작업자 서비스가 존재합니다.
이 튜토리얼에서는 다음을 배우게 됩니다:
- 작업자 서비스를 만듭니다.
- 컨테이너 레지스트리 리소스를 만듭니다.
- 이미지를 컨테이너 레지스트리에 푸시합니다.
- 컨테이너 인스턴스로 배포합니다.
- 작업자 서비스 기능을 확인합니다.
팁 (조언)
".NET의 작업자" 예제 소스 코드는 모두 샘플 브라우저 에서 다운로드할 수 있습니다. 자세한 내용은 코드 샘플 찾아보기: .NET의 작업자를 참조하세요.
필수 조건
- .NET 5.0 SDK 이상
- Docker Desktop(Windows 또는 Mac).
- 활성 구독이 있는 Azure 계정. 무료로 계정을 만듭니다.
- 선택한 개발자 환경에 따라:
새 프로젝트 만들기
Visual Studio를 사용하여 새 작업자 서비스 프로젝트를 만들려면새> 프로젝트 파일>...을 선택합니다. 새 프로젝트 만들기 대화 상자에서 "작업자 서비스"를 검색하고 작업자 서비스 템플릿을 선택합니다. 원하는 프로젝트 이름을 입력하고, 적절한 위치를 선택한 다음, 다음을 선택합니다.
추가 정보 페이지에서 대상 프레임워크의 경우 Docker 사용 옵션을 선택하여 .NET 5.0Docker 지원을 사용하도록 설정합니다. 원하는 Docker OS를 선택합니다.
Visual Studio Code를 사용하여 새 작업자 서비스 프로젝트를 만들려면 통합 터미널에서 .NET CLI 명령을 실행할 수 있습니다. 자세한 내용은 Visual Studio Code: 통합 터미널을 참조하세요.
통합 터미널을 열고 dotnet new 명령을 실행한 후, <Project.Name>를 원하는 프로젝트 이름으로 바꾸십시오.
dotnet new worker --name <Project.Name>
.NET CLI 새 작업자 서비스 프로젝트 명령에 대한 자세한 내용은 dotnet new Worker를 참조하세요.
.NET CLI를 사용하여 새 작업자 서비스 프로젝트를 만들려면 작업 디렉터리에서 즐겨 찾는 터미널을 엽니다.
dotnet new 명령을 실행하고 <Project.Name>을(를) 원하는 프로젝트 이름으로 바꿉니다.
dotnet new worker --name <Project.Name>
.NET CLI 새 작업자 서비스 프로젝트 명령에 대한 자세한 내용은 dotnet new Worker를 참조하세요.
애플리케이션을 빌드하여 종속 패키지를 복원하고 오류 없이 컴파일합니다.
Visual Studio에서 애플리케이션을 빌드하려면 F6을 선택하거나빌드 솔루션 빌드> 메뉴 옵션을 선택합니다.
Visual Studio Code에서 애플리케이션을 빌드하려면 통합 터미널 창을 열고 작업 디렉터리에서 명령을 실행 dotnet build 합니다.
dotnet build
.NET CLI 빌드 명령에 대한 자세한 내용은 다음을 참조하세요 dotnet build.
.NET CLI에서 애플리케이션을 빌드하려면 작업 디렉터리에서 명령을 실행 dotnet build 합니다.
dotnet build <path/to/project.csproj>
빌드할 프로젝트 파일의 경로인 값을 지정합니다 <path/to/project.csproj> . .NET CLI 빌드 명령에 대한 자세한 내용은 다음을 참조하세요 dotnet build.
Docker 지원 추가
새 작업자 프로젝트를 만들 때 Docker 사용 확인란을 올바르게 선택한 경우 Docker 이미지 빌드 단계로 건너뜁니다.
이 옵션을 선택하지 않은 경우에도 지금 추가할 수 있습니다. Visual Studio에서 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고Docker 지원>를 선택합니다. 대상 OS를 선택하라는 메시지가 표시됩니다. 기본 OS 선택 항목으로 확인을 선택합니다.
Visual Studio Code에서는 Docker 확장 및 Azure 계정 확장 이 설치되어 있어야 합니다. 명령 팔레트를 열고 Docker: 작업 영역에 Docker 파일 추가 옵션을 선택합니다. 애플리케이션 플랫폼을 선택하라는 메시지가 표시되면 .NET: Core 콘솔을 선택합니다. 프로젝트를 선택하라는 메시지가 표시되면 만든 작업자 서비스 프로젝트를 선택합니다. 운영 체제를 선택하라는 메시지가 표시되면 나열된 첫 번째 OS를 선택합니다. 선택적 Docker Compose 파일을 포함할지 여부를 묻는 메시지가 표시되면 아니요를 선택합니다.
Docker 지원에는 Dockerfile이 필요합니다. 이 파일은 .NET 작업자 서비스를 Docker 이미지로 빌드하기 위한 포괄적인 지침 집합입니다. Dockerfile은 파일 확장명 없는 파일입니다. 다음 코드는 Dockerfile 예제이며 프로젝트 파일의 루트 디렉터리에 있어야 합니다.
CLI를 사용할 때 Dockerfile은 자동으로 생성되지 않습니다. 해당 내용을 프로젝트의 루트 디렉터리에 있는 Dockerfile 이라는 새 파일에 복사합니다.
FROM mcr.microsoft.com/dotnet/runtime:8.0@sha256:e6b552fd7a0302e4db30661b16537f7efcdc0b67790a47dbf67a5e798582d3a5 AS base
WORKDIR /app
# Creates a non-root user with an explicit UID and adds permission to access the /app folder
# For more info, please refer to https://aka.ms/vscode-docker-dotnet-configure-containers
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser
FROM mcr.microsoft.com/dotnet/sdk:8.0@sha256:35792ea4ad1db051981f62b313f1be3b46b1f45cadbaa3c288cd0d3056eefb83 AS build
WORKDIR /src
COPY ["App.CloudService.csproj", "./"]
RUN dotnet restore "App.CloudService.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "App.CloudService.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "App.CloudService.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "App.CloudService.dll"]
비고
*App.CloudService를 참조하는 Dockerfile 의 다양한 줄을 업데이트해야 합니다. 이 줄을 프로젝트 이름으로 바꿔야 합니다.
공식 .NET 이미지에 대한 자세한 내용은 Docker 허브: .NET 런타임 및 Docker 허브: .NET SDK를 참조하세요.
Docker 이미지 빌드
Docker 이미지를 빌드하려면 Docker 엔진이 실행 중이어야 합니다.
중요합니다
Docker Desktop 및 Visual Studio를 사용하는 경우 볼륨 공유와 관련된 오류를 방지하려면 볼륨 공유를 사용하도록 설정해야 합니다.
- Docker Desktop의 설정 화면에서 공유 드라이브를 선택합니다.
- 프로젝트 파일이 포함된 드라이브를 선택합니다.
자세한 내용은 Docker를 사용하여 Visual Studio 개발 문제 해결을 참조하세요.
솔루션 탐색기에서 Dockerfile을 마우스 오른쪽 단추로 클릭하고 Docker 이미지 빌드를 선택합니다. 명령어 진행 상태를 표시하는 출력 창이 docker build에 나타납니다.
탐색기에서 Dockerfile을 마우스 오른쪽 단추로 클릭하고 이미지 빌드를 선택합니다. 이미지에 태그를 지정하라는 메시지가 표시되면 appcloudservice:latest를 입력합니다.
Docker 작업 출력 터미널이 표시되며 Docker 빌드 명령 진행률을 보고합니다.
비고
이미지에 태그를 지정하라는 메시지가 표시되지 않으면 Visual Studio Code에서 기존 tasks.json사용할 수 있습니다. 사용된 태그가 바람직하지 않은 경우 배열에서 docker-build 구성 항목의 dockerBuild/tag 값을 업데이트 tasks 하여 변경할 수 있습니다. 다음 예제 구성 섹션을 고려합니다.
{
"type": "docker-build",
"label": "docker-build: release",
"dependsOn": [
"build"
],
"dockerBuild": {
"tag": "appcloudservice:latest",
"dockerfile": "${workspaceFolder}/cloud-service/Dockerfile",
"context": "${workspaceFolder}",
"pull": true
},
"netCore": {
"appProject": "${workspaceFolder}/cloud-service/App.CloudService.csproj"
}
}
Dockerfile의 루트 디렉터리에서 터미널 창을 열고 다음 docker 명령을 실행합니다.
docker build -t appcloudservice:latest -f Dockerfile .
명령이 docker build 실행되면 Dockerfile 의 각 줄을 명령 단계로 처리합니다. 이 명령은 이미지를 빌드하고 이미지를 가리키는 appcloudservice 라는 로컬 리포지토리를 만듭니다.
팁 (조언)
생성된 Dockerfile 은 개발 환경 간에 다릅니다. 예를 들어 Visual Studio에서 Docker 지원을 추가하는 경우 Dockerfile 단계가 다르기 때문에 Visual Studio Code에서 Docker 이미지를 빌드하려고 하면 문제가 발생할 수 있습니다. 단일 개발 환경을 선택하고 이 자습서 전체에서 사용하는 것이 가장 좋습니다.
컨테이너 레지스트리 만들기
ACR(Azure Container Registry) 리소스를 사용하면 프라이빗 레지스트리에서 컨테이너 이미지 및 아티팩트를 빌드, 저장 및 관리할 수 있습니다. 컨테이너 레지스트리를 만들려면 Azure Portal에서 새 리소스를 만들어야 합니다.
- 구독 및 해당 리소스 그룹을 선택하거나 새 리소스 그룹을 만듭니다.
- 레지스트리 이름을 입력합니다.
- 위치를 선택합니다.
- 적절한 SKU(예: 기본)를 선택합니다.
- Review + create를 선택합니다.
- 유효성 검사가 통과된 후 만들기를 선택합니다.
중요합니다
컨테이너 인스턴스를 만들 때 이 컨테이너 레지스트리를 사용하려면 관리자 사용자를 사용하도록 설정해야 합니다. 액세스 키를 선택하고 관리자 사용자를 사용하도록 설정합니다.
ACR(Azure Container Registry) 리소스를 사용하면 프라이빗 레지스트리에서 컨테이너 이미지 및 아티팩트를 빌드, 저장 및 관리할 수 있습니다. Dockerfile의 루트 디렉터리에서 터미널 창을 열고 다음 Azure CLI 명령을 실행합니다.
중요합니다
Azure CLI에서 Azure 리소스와 상호 작용하려면 터미널 세션에 대해 인증되어야 합니다. 인증하려면 다음 az login 명령을 사용합니다.
az login
로그인한 후 기본 구독이 둘 이상 있고 기본 구독이 설정되지 않은 경우 이 명령을 사용하여 az account set 구독을 지정합니다.
az account set --subscription <subscription name or id>
Azure CLI에 로그인하면 세션이 그에 따라 리소스와 상호 작용할 수 있습니다.
작업자 서비스를 연결하려는 리소스 그룹이 아직 없는 경우 다음 명령을 사용하여 az group create 만듭니다.
az group create -n <resource group> -l <___location>
이름과 <resource group> 및 <___location>을 입력합니다. 컨테이너 레지스트리를 만들려면 명령을 호출합니다 az acr create .
az acr create -n <registry name> -g <resource group> --sku <sku> --admin-enabled true
자리 표시자를 사용자 고유의 적절한 값으로 대체합니다.
-
<registry name>: 레지스트리의 이름입니다. -
<resource group>: 사용한 리소스 그룹 이름입니다. -
<sku>: 허용되는 값, 기본, 클래식, 프리미엄 또는 표준입니다.
이전 명령:
- 지정된 리소스 그룹에 레지스트리 이름이 지정된 Azure Container Registry를 만듭니다.
- 관리자 사용자를 사용하도록 설정했습니다. Azure Container Instances에 필요합니다.
자세한 내용은 빠른 시작: Azure 컨테이너 레지스트리 만들기를 참조하세요.
컨테이너 레지스트리에 이미지 푸시
.NET Docker 이미지가 빌드되고 컨테이너 레지스트리 리소스가 만들어짐에 따라 이제 이미지를 컨테이너 레지스트리에 푸시할 수 있습니다.
솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 게시를 선택합니다. 게시 대화 상자가 표시됩니다. 대상에 대해 Azure를 선택한 다음, 다음을 선택합니다.
특정 대상에 대해 Azure Container Registry를 선택한 다음, 다음을 선택합니다.
다음으로 Container Registry의 경우 ACR 리소스를 만드는 데 사용한 구독 이름을 선택합니다. 컨테이너 레지스트리 선택 영역에서 만든 컨테이너 레지스트리를 선택한 다음 마침을 선택합니다.
그러면 컨테이너 레지스트리에 이미지를 게시하는 데 사용할 수 있는 게시 프로필이 만들어집니다. 게시 단추를 선택하여 이미지를 컨테이너 레지스트리로 푸시하고 출력 창에서 게시 진행률을 보고합니다. 성공적으로 완료되면 "성공적으로 게시됨" 메시지가 표시됩니다.
Visual Studio Code의 작업 표시줄에서 Docker를 선택합니다.
이미지 트리 뷰 패널을 확장한 다음 이미지 노드를 appcloudservice 확장하고 태그를 latest 마우스 오른쪽 단추로 클릭합니다.
통합 터미널 창은 명령의 docker push 진행률을 컨테이너 레지스트리에 보고합니다.
이미지를 컨테이너 레지스트리에 푸시하려면 먼저 레지스트리에 로그인해야 합니다.
az acr login -n <registry name>
이 az acr login 명령은 Docker CLI를 통해 컨테이너 레지스트리에 로그인합니다. 이미지를 컨테이너 레지스트리에 푸시하려면 컨테이너 레지스트리 이름과 함께 az acr build 명령을 다음으로 <registry name>사용합니다.
az acr build -r <registry name> -t appcloudservice .
이전 명령:
- 원본을 tar 파일로 압축합니다.
- 컨테이너 레지스트리에 업로드합니다.
- 컨테이너 레지스트리는 tar 파일의 압축을 풉니다.
-
docker buildDockerfile에 대해 컨테이너 레지스트리 리소스에서 명령을 실행합니다. - 컨테이너 레지스트리에 이미지를 추가합니다.
이미지가 컨테이너 레지스트리에 성공적으로 푸시되었는지 확인하려면 Azure Portal로 이동합니다. 컨테이너 레지스트리 리소스를 열고 서비스에서리포지토리를 선택합니다. 이미지가 표시됩니다.
컨테이너 인스턴스로 배포
Visual Studio Code의 작업 표시줄에서 Docker를 선택합니다. REGISTRIES 노드를 확장하고 레지스트리 연결을 선택합니다. 메시지가 표시되면 Azure 를 선택하고 필요한 경우 로그인합니다.
중요합니다
Visual Studio Code에서 컨테이너 인스턴스로 배포하는 작업은 더 이상 Mac에서 작동하지 않습니다. 자세한 내용은 GitHub: Visual Studio Code용 Docker 확장 정보를 참조하세요.
REGISTRIES 노드를 확장하고 Azure, 구독 >, 컨테이너 레지스트리 >, 이미지를 선택한 다음, 태그를 마우스 오른쪽 단추로 클릭합니다. Azure Container Instances에 이미지 배포를 선택합니다.
컨테이너 인스턴스를 만들려면 먼저 명령을 사용하여 컨테이너 그룹을 만듭니다 az container create .
az container create -g <resource group> \
--name <instance name> \
--image <registry name>.azurecr.io/<image name>:latest \
--registry-password <password>
적절한 값을 제공합니다.
-
<resource group>: 이 자습서에서 사용한 리소스 그룹 이름입니다. -
<instance name>: 컨테이너 인스턴스의 이름입니다. -
<registry name>: 컨테이너 레지스트리의 이름입니다. -
<image name>: 이미지의 이름입니다. -
<password>: 컨테이너 레지스트리에 대한 암호입니다. Azure Portal, Container Registry 리소스 >액세스 키에서 가져올 수 있습니다.
컨테이너 인스턴스를 만들려면 Azure Portal에서도 새 리소스를 만들어야 합니다.
- 이전 섹션에서 동일한 구독 및 해당 리소스 그룹을 선택합니다.
-
컨테이너 이름을
appcloudservice-container입력합니다. - 이전 위치 선택 영역에 해당하는 지역을 선택합니다.
- 이미지 원본의 경우 Azure Container Registry를 선택합니다.
- 이전 단계에서 제공된 이름으로 레지스트리 를 선택합니다.
- 이미지 및 이미지 태그를 선택합니다.
- Review + create를 선택합니다.
- 유효성 검사가 통과되었다고 가정하고만들기를 선택합니다.
리소스가 만들어지면 리소스로 이동 단추를 선택하면 잠시 시간이 걸릴 수 있습니다.
자세한 내용은 빠른 시작: Azure 컨테이너 인스턴스 만들기를 참조하세요.
서비스 기능 확인
컨테이너 인스턴스를 만든 직후 실행이 시작됩니다.
작업자 서비스가 제대로 작동하는지 확인하려면 컨테이너 인스턴스 리소스에서 Azure Portal로 이동하여 컨테이너 옵션을 선택합니다.
컨테이너와 현재 상태가 표시됩니다. 이 경우 실행 중입니다. 로그를 선택하여 .NET 작업자 서비스 출력을 확인합니다.
작업자 서비스가 제대로 작동하는지 확인하려면 실행 중인 애플리케이션에서 로그를 볼 수 있습니다.
az container logs 명령을 사용합니다.
az container logs -g <resource group> --name <instance name>
적절한 값을 제공합니다.
-
<resource group>: 이 자습서에서 사용한 리소스 그룹 이름입니다. -
<instance name>: 컨테이너 인스턴스의 이름입니다.
.NET 작업자 서비스 출력 로그가 표시됩니다. 즉, 컨테이너화된 앱을 ACI에 성공적으로 배포했습니다.
참고하십시오
.NET