Windows에서 Service Fabric Reliable Services 및 Reliable Actors 컨테이너화
Service Fabric은 Service Fabric 마이크로 서비스(Reliable Services 및 Reliable Actor 기반 서비스)를 컨테이너화하도록 지원합니다. 자세한 내용은 Service Fabric 컨테이너를 참조하세요.
이 문서에서는 Windows 컨테이너 내부에서 실행 중인 서비스를 가져오기 위한 지침을 제공합니다.
참고 항목
현재 이 기능은 Windows에서만 작동합니다. 컨테이너를 실행하려면 컨테이너가 포함된 Windows Server 2016에서 클러스터를 실행해야 합니다.
Service Fabric 애플리케이션을 컨테이너화하는 단계
Visual Studio에서 Service Fabric 애플리케이션을 엽니다.
프로젝트에 SFBinaryLoader.cs 클래스를 추가합니다. 이 클래스의 코드는 애플리케이션 내에 있는 Service Fabric 런타임 이진 파일을 컨테이너 내부에서 실행할 경우 바르게 로드하는 도우미입니다.
컨테이너화하려는 각 코드 패키지에 대해 프로그램 진입점에 로더를 초기화합니다. 다음 코드 조각에 표시된 정적 생성자를 프로그램 진입점 파일에 추가합니다.
namespace MyApplication { internal static class Program { static Program() { SFBinaryLoader.Initialize(); } /// <summary> /// This is the entry point of the service host process. /// </summary> private static void Main() {
프로젝트를 빌드 및 패키지합니다. 패키지를 빌드하고 만들려면 솔루션 탐색기에서 애플리케이션 프로젝트를 마우스 오른쪽 단추로 클릭하고 패키지 명령을 선택합니다.
컨테이너화해야 하는 모든 코드 패키지에서 CreateDockerPackage.ps1 PowerShell 스크립트를 실행합니다. 사용법은 다음과 같습니다.
정식 .NET
$codePackagePath = 'Path to the code package to containerize.' $dockerPackageOutputDirectoryPath = 'Output path for the generated docker folder.' $applicationExeName = 'Name of the Code package executable.' CreateDockerPackage.ps1 -CodePackageDirectoryPath $codePackagePath -DockerPackageOutputDirectoryPath $dockerPackageOutputDirectoryPath -ApplicationExeName $applicationExeName
.NET Core
$codePackagePath = 'Path to the code package to containerize.' $dockerPackageOutputDirectoryPath = 'Output path for the generated docker folder.' $dotnetCoreDllName = 'Name of the Code package dotnet Core Dll.' CreateDockerPackage.ps1 -CodePackageDirectoryPath $codePackagePath -DockerPackageOutputDirectoryPath $dockerPackageOutputDirectoryPath -DotnetCoreDllName $dotnetCoreDllName
스크립트는 $dockerPackageOutputDirectoryPath에서 Docker 아티팩트를 포함한 폴더를 만듭니다. 생성된 Dockerfile을
expose
모든 포트로 수정하고 설정 스크립트 등을 사용자의 필요에 따라 실행합니다.컨테이너 이미지, 리포지토리 정보, 레지스트리 인증 및 포트와 호스트 간 매핑을 추가하도록 ApplicationManifest.xml 및 ServiceManifest.xml을 수정합니다. 매니페스트를 수정하기 위해 Azure Service Fabric 컨테이너 애플리케이션 만들기를 참조하세요. 서비스 매니페스트의 코드 패키지 정의는 해당 컨테이너 이미지로 바꿔야 합니다. EntryPoint를 ContainerHost 형식으로 변경해야 합니다.
<!-- Code package is your service executable. --> <CodePackage Name="Code" Version="1.0.0"> <EntryPoint> <!-- Follow this link for more information about deploying Windows containers to Service Fabric: https://aka.ms/sfguestcontainers --> <ContainerHost> <ImageName>myregistry.azurecr.io/samples/helloworldapp</ImageName> </ContainerHost> </EntryPoint> <!-- Pass environment variables to your container: --> </CodePackage>
복제기 및 서비스 엔드포인트에 포트와 호스트 간 매핑을 추가합니다. 런타임 시 Service Fabric에서 이러한 포트를 모두 할당하기 때문에 ContainerPort는 매핑에 할당된 포트를 사용하도록 0으로 설정됩니다.
<Policies> <ContainerHostPolicies CodePackageRef="Code"> <PortBinding ContainerPort="0" EndpointRef="ServiceEndpoint"/> <PortBinding ContainerPort="0" EndpointRef="ReplicatorEndpoint"/> </ContainerHostPolicies> </Policies>
컨테이너 격리 모드 구성에 대해 알아보려면 격리 모드 구성을 참조하세요. Windows는 컨테이너, 즉 프로세스 및 Hyper-V에 대한 두 가지 격리 모드를 지원합니다. 다음 코드 조각은 격리 모드가 애플리케이션 매니페스트 파일에서 지정되는 방법을 보여 줍니다.
<Policies> <ContainerHostPolicies CodePackageRef="Code" Isolation="process"> ... </ContainerHostPolicies> </Policies>
<Policies> <ContainerHostPolicies CodePackageRef="Code" Isolation="hyperv"> ... </ContainerHostPolicies> </Policies>
참고 항목
Service Fabric 클러스터는 의도된 단일 테넌트이며 호스팅된 애플리케이션은 신뢰할 수 있는 것으로 간주됩니다. 신뢰할 수 없는 컨테이너 애플리케이션 호스팅을 고려 중인 경우 게스트 컨테이너로 배포하는 것을 고려하고 Service Fabric 클러스터에서 신뢰할 수 없는 애플리케이션 호스팅을 참조하세요.
이 애플리케이션을 테스트하려면 5.7 이상 버전을 실행하는 클러스터에 배포해야 합니다. 런타임 버전 6.1 이하의 경우에는 클러스터 설정을 편집하고 업데이트하여 이 미리 보기 기능을 사용하도록 설정해야 합니다. 이 문서의 단계에 따라 다음에 표시된 설정을 추가합니다.
{ "name": "Hosting", "parameters": [ { "name": "FabricContainerAppsEnabled", "value": "true" } ] }
다음으로 이 클러스터에 편집된 애플리케이션 패키지를 배포합니다.
이제 컨테이너화된 Service Fabric 애플리케이션이 클러스터를 실행해야 합니다.
다음 단계
- Service Fabric의 컨테이너를 실행하는 방법에 대해 자세히 알아봅니다.
- Service Fabric 애플리케이션 수명 주기에 대해 자세히 알아봅니다.