Início Rápido: Implantar contêineres do Windows no Service FabricQuickstart: Deploy Windows containers to Service Fabric

O Azure Service Fabric é uma plataforma de sistemas distribuídos para implantação e gerenciamento de contêineres e microsserviços escalonáveis e confiáveis.Azure Service Fabric is a distributed systems platform for deploying and managing scalable and reliable microservices and containers.

Executar um aplicativo existente em um contêiner do Windows em um cluster do Service Fabric não requer alterações no seu aplicativo.Running an existing application in a Windows container on a Service Fabric cluster doesn't require any changes to your application. Este guia de início rápido mostra como implantar uma imagem de contêiner do Docker predefinida em um aplicativo do Service Fabric.This quickstart shows you how to deploy a pre-built Docker container image in a Service Fabric application. Quando você terminar, terá um contêiner do IIS e um Servidor do Windows Server Core 2016 em execução.When you're finished, you'll have a running Windows Server Core 2016 Server and IIS container. Este início rápido descreve a implantação de um contêiner do Windows.This quickstart describes deploying a Windows container. Leia este início rápido para implantar um contêiner do Linux.Read this quickstart to deploy a Linux container.

Página de Web do IIS padrão

Neste guia de início rápido, você aprende a:In this quickstart you learn how to:

  • Empacotar um contêiner de imagem do DockerPackage a Docker image container
  • Configurar a comunicaçãoConfigure communication
  • Compilar e empacotar o aplicativo do Service FabricBuild and package the Service Fabric application
  • Implantar o aplicativo de contêiner no AzureDeploy the container application to Azure

Observação

Este artigo foi atualizado para usar o novo módulo Az do Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Você ainda pode usar o módulo AzureRM, que continuará a receber as correções de bugs até pelo menos dezembro de 2020.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Para saber mais sobre o novo módulo Az e a compatibilidade com o AzureRM, confira Apresentação do novo módulo Az do Azure PowerShell.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Para obter instruções de instalação do módulo Az, confira Instalar o Azure PowerShell.For Az module installation instructions, see Install Azure PowerShell.

Pré-requisitosPrerequisites

Empacotar um recipiente de imagem do Docker com o Visual StudioPackage a Docker image container with Visual Studio

As ferramentas e o SDK do Service Fabric oferecem um modelo de serviço para ajudar você a implantar um contêiner em um cluster do Service Fabric.The Service Fabric SDK and tools provide a service template to help you deploy a container to a Service Fabric cluster.

Inicie o Visual Studio como “Administrador”.Start Visual Studio as "Administrator". Selecione Arquivo > Novo > Projeto.Select File > New > Project.

Selecione Aplicativo do Service Fabric, nomeie-o como "MyFirstContainer" e clique em OK.Select Service Fabric application, name it "MyFirstContainer", and click OK.

Selecione Contêiner nos modelos Aplicativos e Contêineres Hospedados.Select Container from the Hosted Containers and Applications templates.

Em Nome da Imagem, insira "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016", o Servidor do Windows Server Core e a imagem base do IIS.In Image Name, enter "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016", the Windows Server Core Server and IIS base image.

Configure o mapeamento de portas porta a host do contêiner para que as solicitações de entrada para o serviço na porta 80 sejam mapeadas para a porta 80 no contêiner.Configure the container port-to-host port mapping so that incoming requests to the service on port 80 are mapped to port 80 on the container. Defina a Porta do Contêiner como "80" e defina a Porta do Host como "80".Set Container Port to "80" and set Host Port to "80".

Chame o serviço de "MyContainerService" e clique em OK.Name your service "MyContainerService", and click OK.

Caixa de diálogo Novo serviço

Especifique o build do sistema operacional para a imagem de contêinerSpecify the OS build for your container image

Contêineres criados com uma versão específica do Windows Server podem não ser executados em um host executando uma versão diferente do Windows Server.Containers built with a specific version of Windows Server may not run on a host running a different version of Windows Server. Por exemplo, contêineres criados usando o Windows Server 1709 não funcionam em hosts que estão executando o Windows Server 2016.For example, containers built using Windows Server version 1709 don't run on hosts running Windows Server 2016. Para obter mais informações, consulte Compatibilidade do sistema operacional contêiner e do sistema operacional do host do Windows Server.To learn more, see Windows Server container OS and host OS compatibility.

Com a versão 6.1 do tempo de execução do Service Fabric e mais recente, você pode especificar várias imagens do sistema operacional por contêiner e marcar cada um com a versão do build do sistema operacional na que ele deve ser implantado.With version 6.1 of the Service Fabric runtime and newer, you can specify multiple OS images per container and tag each with the build version of the OS that it should be deployed to. Isso ajuda a garantir que seu aplicativo será executado em hosts que executam diferentes versões do sistema operacional Windows.This helps to make sure that your application will run across hosts running different versions of Windows OS. Para saber mais, consulte Especifique a compilação do sistema operacional das imagens de contêiner específicas.To learn more, see Specify OS build specific container images.

A Microsoft publica imagens diferentes para versões do IIS criadas em diferentes versões do Windows Server.Microsoft publishes different images for versions of IIS built on different versions of Windows Server. Para certificar-se de que o Service Fabric implanta um contêiner compatível com a versão do Windows Server em execução em nós de cluster onde ele implanta o aplicativo, adicione as seguintes linhas ao arquivo ApplicationManifest.xml.To make sure that Service Fabric deploys a container compatible with the version of Windows Server running on the cluster nodes where it deploys your application, add the following lines to the ApplicationManifest.xml file. A versão de compilação para o Windows Server 2016 é 14393 e a versão de compilação para a versão 1709 do Windows Server é 16299.The build version for Windows Server 2016 is 14393 and the build version for Windows Server version 1709 is 16299.

    <ContainerHostPolicies CodePackageRef="Code"> 
      <ImageOverrides> 
        ...
          <Image Name="mcr.microsoft.com/windows/servercore/iis:windowsservercore-1803" /> 
          <Image Name= "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016" Os="14393" /> 
          <Image Name="mcr.microsoft.com/windows/servercore/iis:windowsservercore-1709" Os="16299" /> 
      </ImageOverrides> 
    </ContainerHostPolicies> 

O manifesto do serviço continua a especificar apenas uma imagem para o Nano Server, mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016.The service manifest continues to specify only one image for the nanoserver, mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016.

Além disso, no arquivo ApplicationManifest.xml, altere PasswordEncrypted para false.Also in the ApplicationManifest.xml file, change PasswordEncrypted to false. A conta e a senha estão em branco para a imagem de contêiner pública que está no Hub do Docker; portanto, desligamos a criptografia, porque criptografar uma senha em branco gerará um erro de build.The account and password are blank for the public container image that is on Docker Hub, so we turn off encryption because encrypting a blank password will generate a build error.

<RepositoryCredentials AccountName="" Password="" PasswordEncrypted="false" />

Criar um clusterCreate a cluster

O script de exemplo a seguir cria um cluster do Service Fabric de cinco nós protegido com um certificado X.509.The following sample script creates a five-node Service Fabric cluster secured with an X.509 certificate. O comando cria um certificado autoassinado e o carrega em um novo cofre de chaves.The command creates a self-signed certificate and uploads it to a new key vault. O certificado também é copiado para um diretório local.The certificate is also copied to a local directory. É possível saber mais sobre como criar um cluster usando esse script em Criar um cluster do Service Fabric.You can learn more about creating a cluster using this script in Create a Service Fabric cluster.

Se necessário, instale o Azure PowerShell usando as instruções no Guia do Azure PowerShell.If needed, install the Azure PowerShell using the instructions found in the Azure PowerShell guide.

Antes de executar o script a seguir, no PowerShell, execute Connect-AzAccount para criar uma conexão com o Azure.Before you run the following script, in PowerShell run Connect-AzAccount to create a connection with Azure.

Copie o script a seguir para a área de transferência e abra o ISE do Windows PowerShell.Copy the following script to the clipboard and open Windows PowerShell ISE. Cole o conteúdo na janela vazia Untitled1.ps1.Paste the contents into the empty Untitled1.ps1 window. Forneça valores para as variáveis no script: subscriptionId, certpwd, certfolder, adminuser, adminpwd etc.Then provide values for the variables in the script: subscriptionId, certpwd, certfolder, adminuser, adminpwd, and so on. O diretório especificado para certfolder deve existir antes da execução do script.The directory you specify for certfolder must exist before you run the script.

#Provide the subscription Id
$subscriptionId = 'yourSubscriptionId'

# Certificate variables.
$certpwd="Password#1234" | ConvertTo-SecureString -AsPlainText -Force
$certfolder="c:\mycertificates\"

# Variables for VM admin.
$adminuser="vmadmin"
$adminpwd="Password#1234" | ConvertTo-SecureString -AsPlainText -Force 

# Variables for common values
$clusterloc="SouthCentralUS"
$clustername = "mysfcluster"
$groupname="mysfclustergroup"       
$vmsku = "Standard_D2_v2"
$vaultname = "mykeyvault"
$subname="$clustername.$clusterloc.cloudapp.azure.com"

# Set the number of cluster nodes. Possible values: 1, 3-99
$clustersize=5 

# Set the context to the subscription Id where the cluster will be created
Select-AzSubscription -SubscriptionId $subscriptionId

# Create the Service Fabric cluster.
New-AzServiceFabricCluster -Name $clustername -ResourceGroupName $groupname -Location $clusterloc `
-ClusterSize $clustersize -VmUserName $adminuser -VmPassword $adminpwd -CertificateSubjectName $subname `
-CertificatePassword $certpwd -CertificateOutputFolder $certfolder `
-OS WindowsServer2016DatacenterwithContainers -VmSku $vmsku -KeyVaultName $vaultname

Após fornecer seus valores para as variáveis, pressione F5 para executar o script.Once you've provided your values for the variables, press F5 to run the script.

Após a execução do script e a criação do cluster, localize o ClusterEndpoint na saída.After the script runs and the cluster is created, find the ClusterEndpoint in the output. Por exemplo:For example:

...
ClusterEndpoint : https://southcentralus.servicefabric.azure.com/runtime/clusters/b76e757d-0b97-4037-a184-9046a7c818c0

Instalar o certificado do clusterInstall the certificate for the cluster

Agora, instalaremos o PFX no repositório de certificados CurrentUser\My.Now we'll install the PFX in CurrentUser\My certificate store. O arquivo PFX estará no diretório especificado usando a variável de ambiente certfolder no script do PowerShell acima.The PFX file will be in the directory you specified using the certfolder environment variable in the PowerShell script above.

Mude para esse diretório e execute o seguinte comando do PowerShell, substituindo o nome do arquivo PFX no diretório certfolder e a senha que você especificou na variável certpwd.Change to that directory, and then run the following PowerShell command, replacing the name of the PFX file that is in your certfolder directory, and the password that you specified in the certpwd variable. Nesse exemplo, o diretório atual é definido como o diretório especificado pela variável certfolder no script do PowerShell.In this example, the current directory is set to the directory specified by the certfolder variable in the PowerShell script. É aí que o comando Import-PfxCertificate é executado:From there the Import-PfxCertificate command is run:

PS C:\mycertificates> Import-PfxCertificate -FilePath .\mysfclustergroup20190130193456.pfx -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString Password#1234 -AsPlainText -Force)

O comando retorna a Impressão digital:The command returns the Thumbprint:

  ...
  PSParentPath: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint                                Subject
----------                                -------
0AC30A2FA770BEF566226CFCF75A6515D73FC686  CN=mysfcluster.SouthCentralUS.cloudapp.azure.com

Lembre-se do valor de impressão digital da uma etapa posterior.Remember the thumbprint value for the following step.

Implantar o aplicativo no Azure usando o Visual StudioDeploy the application to Azure using Visual Studio

Agora que o aplicativo está pronto, você poderá implantá-lo no cluster diretamente por meio do Visual Studio.Now that the application is ready, you can deploy it to a cluster directly from Visual Studio.

Clique com botão direito do mouse em MyFirstContainer no Gerenciador de Soluções e escolha Publicar.Right-click MyFirstContainer in the Solution Explorer and choose Publish. A caixa de diálogo Publicar será exibida.The Publish dialog appears.

Copie o conteúdo a seguir CN= na janela do PowerShell quando você executou o comando Import-PfxCertificate acima e adicione a porta 19000 a ele.Copy the content following CN= in the PowerShell window when you ran the Import-PfxCertificate command above, and add port 19000 to it. Por exemplo, mysfcluster.SouthCentralUS.cloudapp.azure.com:19000.For example, mysfcluster.SouthCentralUS.cloudapp.azure.com:19000. Copie-o para o campo Ponto de Extremidade de Conexão.Copy it into the Connection Endpoint field. Lembre-se desse valor, porque você precisará dele em uma etapa futura.Remember this value because you'll need it in a future step.

Clique em Parâmetros de Conexão Avançados e verifique as informações de parâmetro de conexão.Click Advanced Connection Parameters and verify the connection parameter information. Os valores FindValue e ServerCertThumbprint devem coincidir com a impressão digital do certificado instalado quando você executou o Import-PfxCertificate na etapa anterior.FindValue and ServerCertThumbprint values must match the thumbprint of the certificate installed when you ran Import-PfxCertificate in the previous step.

Caixa de diálogo Publicar

Clique em Publicar.Click Publish.

Cada aplicativo no cluster deve ter um nome exclusivo.Each application in the cluster must have a unique name. Se houver um conflito de nome, renomeie o projeto do Visual Studio e implante novamente.If there's a name conflict, rename the Visual Studio project and deploy again.

Abra um navegador e navegue até o endereço que você colocou no campo Ponto de Extremidade de Conexão na etapa anterior.Open a browser and navigate to the address that you put into the Connection Endpoint field in the previous step. Como opção, preceda o identificador do esquema, http://, e anexe a porta, :80, para a URL.You can optionally prepend the scheme identifier, http://, and append the port, :80, to the URL. Por exemplo, http://mysfcluster.SouthCentralUS.cloudapp.azure.com:80.For example, http://mysfcluster.SouthCentralUS.cloudapp.azure.com:80.

Você deve ver a página da Web do IIS padrão: Página da Web do IIS padrãoYou should see the IIS default web page: IIS default web page

LimparClean up

Você continuará incorrendo em encargos enquanto o cluster estiver em execução.You continue to incur charges while the cluster is running. Considere excluir o cluster.Consider deleting your cluster.

Próximas etapasNext steps

Neste guia de início rápido, você aprendeu a:In this quickstart, you learned how to:

  • Empacotar um contêiner de imagem do DockerPackage a Docker image container
  • Configurar a comunicaçãoConfigure communication
  • Compilar e empacotar o aplicativo do Service FabricBuild and package the Service Fabric application
  • Implantar o aplicativo de contêiner no AzureDeploy the container application to Azure

Para saber mais sobre como trabalhar com os contêineres do Windows no Service Fabric, prossiga com o tutorial sobre aplicativos de contêiner do Windows.To learn more about working with Windows containers in Service Fabric, continue to the tutorial for Windows container apps.