Inicio rápido: Implementación de contenedores de Windows en Service FabricQuickstart: Deploy Windows containers to Service Fabric

Azure Service Fabric es una plataforma de sistemas distribuidos para implementar y administrar microservicios y contenedores escalables y confiables.Azure Service Fabric is a distributed systems platform for deploying and managing scalable and reliable microservices and containers.

Para ejecutar una aplicación que existe en un contenedor de Windows en un clúster de Service Fabric no hay que hacer ningún cambio en la aplicación.Running an existing application in a Windows container on a Service Fabric cluster doesn't require any changes to your application. Esta guía de inicio rápido muestra cómo implementar una imagen de contenedor Docker creada previamente en una aplicación de Service Fabric.This quickstart shows you how to deploy a pre-built Docker container image in a Service Fabric application. Cuando haya terminado, tendrá un contenedor de Windows Server Core 2016 Server e IIS en ejecución.When you're finished, you'll have a running Windows Server Core 2016 Server and IIS container. En este inicio rápido se describe la implementación de un contenedor de Windows.This quickstart describes deploying a Windows container. Léalo para implementar un contenedor de Linux.Read this quickstart to deploy a Linux container.

Página web predeterminada de IIS

En esta guía de inicio rápido, aprenderá a hacer lo siguiente:In this quickstart you learn how to:

  • Empaquetado de un contenedor de imagen de DockerPackage a Docker image container
  • Configuración de la comunicaciónConfigure communication
  • Creación y empaquetamiento de la aplicación de Service FabricBuild and package the Service Fabric application
  • Implementación de la aplicación contenedora en AzureDeploy the container application to Azure

Nota

Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Aún puede usar el módulo de AzureRM que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Para más información acerca del nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module (Presentación del nuevo módulo Az de Azure PowerShell).To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Para obtener instrucciones sobre la instalación del módulo Az, consulte Instalación de Azure PowerShell.For Az module installation instructions, see Install Azure PowerShell.

PrerequisitesPrerequisites

Empaquetado de un contenedor de imagen de Docker con Visual StudioPackage a Docker image container with Visual Studio

Las herramientas y el SDK de Service Fabric proporcionan una plantilla de servicio que le ayuda a implementar un contenedor en un clúster de Service Fabric.The Service Fabric SDK and tools provide a service template to help you deploy a container to a Service Fabric cluster.

Inicie Visual Studio como administrador.Start Visual Studio as "Administrator". Seleccione File (Archivo) > New (Nuevo) > Project (Proyecto) .Select File > New > Project.

Seleccione Aplicación de Service Fabric, asígnele el nombre "MyFirstContainer" y haga clic en Crear.Select Service Fabric application, name it "MyFirstContainer", and click Create.

Seleccione Contenedor en las plantillas Aplicaciones y contenedores hospedados.Select Container from the Hosted Containers and Applications templates.

En Nombre de la imagen, escriba "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016", la imagen base de Windows Server Core Server e IIS.In Image Name, enter "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016", the Windows Server Core Server and IIS base image.

Configure la asignación de los puertos del host al contenedor para que las solicitudes que lleguen al puerto 80 para el servicio se asignen al puerto 80 del contenedor.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. Establezca Puerto del contenedor en "80" y establezca Puerto del host en "80".Set Container Port to "80" and set Host Port to "80".

Asigne el nombre "MyContainerService" al servicio y haga clic en Aceptar.Name your service "MyContainerService", and click OK.

Cuadro de diálogo Nuevo servicio

Especificación de la compilación del sistema operativo para la imagen de contenedorSpecify the OS build for your container image

Los contenedores creados con una versión específica de Windows Server podrían no ejecutarse en un host que ejecute una versión distinta de 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 ejemplo, los contenedores creados con Windows Server versión 1709 no funcionan en hosts que ejecutan Windows Server 2016.For example, containers built using Windows Server version 1709 don't run on hosts running Windows Server 2016. Para más información, consulte Sistema operativo del contenedor Windows Server y compatibilidad con el sistema operativo del host.To learn more, see Windows Server container OS and host OS compatibility.

Con la versión 6.1 del runtime de Service Fabric y versiones más recientes, puede especificar varias imágenes de sistema operativo por contenedor y etiquetar cada una con la versión de compilación del sistema operativo en el que deben implementarse.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. Esto ayuda a asegurarse de que la aplicación se ejecutará en hosts que ejecutan versiones diferentes del sistema operativo Windows.This helps to make sure that your application will run across hosts running different versions of Windows OS. Para más información, consulte Especificación de las imágenes de contenedores de compilación específica del sistema operativo.To learn more, see Specify OS build specific container images.

Microsoft publica imágenes distintas para las versiones de IIS que se compilaron con versiones distintas de Windows Server.Microsoft publishes different images for versions of IIS built on different versions of Windows Server. Para asegurarse de que Service Fabric implementa un contenedor compatible con la versión de Windows Server que se ejecuta en los nodos del clúster donde se implementa la aplicación, agregue las líneas siguientes al archivo 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. La versión de compilación de Windows Server 2016 es la 14393 y la versión de compilación de la versión 1709 de Windows Server es la 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> 

El manifiesto de servicio continúa especificando solo una imagen para el servidor nanoserver, 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.

También en el archivo ApplicationManifest.xml, cambie PasswordEncrypted a false.Also in the ApplicationManifest.xml file, change PasswordEncrypted to false. La cuenta y la contraseña están en blanco para la imagen de contenedor público que está en Docker Hub, por lo que es necesario desactivar el cifrado porque al cifrar una contraseña en blanco se generará un error de compilación.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" />

Crear un clústerCreate a cluster

En este script de ejemplo se crea un clúster de Service Fabric de cinco nodos protegido con un certificado X.509.The following sample script creates a five-node Service Fabric cluster secured with an X.509 certificate. El comando crea un certificado autofirmado y lo carga en un nuevo almacén de claves.The command creates a self-signed certificate and uploads it to a new key vault. El certificado también se copia en un directorio local.The certificate is also copied to a local directory. Puede aprender más sobre cómo crear un clúster mediante este script en Creación de un clúster de Service Fabric.You can learn more about creating a cluster using this script in Create a Service Fabric cluster.

Si es necesario, instale PowerShell con la instrucción que se encuentra en la Guía de instalación de Azure PowerShell.If needed, install the Azure PowerShell using the instructions found in the Azure PowerShell guide.

Antes de ejecutar el siguiente script, ejecute Connect-AzAccount en PowerShell para crear una conexión con Azure.Before you run the following script, in PowerShell run Connect-AzAccount to create a connection with Azure.

Copie el script siguiente en el Portapapeles y abra Windows PowerShell ISE.Copy the following script to the clipboard and open Windows PowerShell ISE. Pegue el contenido en la ventana Untitled1.ps1 vacía.Paste the contents into the empty Untitled1.ps1 window. A continuación, proporcione valores para las variables del script: subscriptionId, certpwd, certfolder, adminuser, adminpwd, etc.Then provide values for the variables in the script: subscriptionId, certpwd, certfolder, adminuser, adminpwd, and so on. El directorio que especifique para certfolder debe existir antes de ejecutar el 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

Cuando haya proporcionado los valores para las variables, presione F5 para ejecutar el script.Once you've provided your values for the variables, press F5 to run the script.

Después de ejecutar el script y crear el clúster, busque ClusterEndpoint en la salida.After the script runs and the cluster is created, find the ClusterEndpoint in the output. Por ejemplo:For example:

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

Instalación del certificado para el clústerInstall the certificate for the cluster

Ahora, se va a instalar el PFX en el almacén de certificados CurrentUser\My.Now we'll install the PFX in CurrentUser\My certificate store. El archivo PFX estará en el directorio especificado mediante la variable de entorno certfolder en el script de PowerShell anterior.The PFX file will be in the directory you specified using the certfolder environment variable in the PowerShell script above.

Cambie a ese directorio y, luego, ejecute el siguiente comando de PowerShell; sustituya el nombre del archivo PFX que se encuentra en su directorio certfolder y la contraseña que especificó en la variable 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. En este ejemplo, el directorio actual se establece en el directorio especificado por la variable certfolder en el script de PowerShell.In this example, the current directory is set to the directory specified by the certfolder variable in the PowerShell script. A partir de ahí, se ejecuta el comando Import-PfxCertificate: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)

El comando devuelve la huella digital:The command returns the Thumbprint:

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

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

Recuerde el valor de la huella digital para el paso siguiente.Remember the thumbprint value for the following step.

Implementación de la aplicación en Azure con Visual StudioDeploy the application to Azure using Visual Studio

Ahora que la aplicación está lista, puede implementarla en un clúster directamente desde Visual Studio.Now that the application is ready, you can deploy it to a cluster directly from Visual Studio.

Haga clic con el botón derecho en MyFirstContainer en el Explorador de soluciones y seleccione Publicar.Right-click MyFirstContainer in the Solution Explorer and choose Publish. Aparece el cuadro de diálogo de publicación.The Publish dialog appears.

Copie el siguiente contenido CN= en la ventana de PowerShell cuando ejecutó el comando Import-PfxCertificate anterior y agregue el puerto 19000.Copy the content following CN= in the PowerShell window when you ran the Import-PfxCertificate command above, and add port 19000 to it. Por ejemplo, mysfcluster.SouthCentralUS.cloudapp.azure.com:19000.For example, mysfcluster.SouthCentralUS.cloudapp.azure.com:19000. Cópielo en el campo Connection Endpoint (Punto de conexión).Copy it into the Connection Endpoint field. Recuerde este valor porque lo necesitará en un paso posterior.Remember this value because you'll need it in a future step.

Haga clic en Parámetros de conexión avanzada y compruebe la información de los parámetros de conexión.Click Advanced Connection Parameters and verify the connection parameter information. Los valores FindValue y ServerCertThumbprint deben coincidir con la huella digital del certificado instalado cuando ejecutó Import-PfxCertificate en el paso anterior.FindValue and ServerCertThumbprint values must match the thumbprint of the certificate installed when you ran Import-PfxCertificate in the previous step.

Cuadro de diálogo de publicación

Haga clic en Publicar.Click Publish.

Todas las aplicaciones del clúster deben tener un nombre único.Each application in the cluster must have a unique name. Si se produce un conflicto de nombres, cambie el nombre del proyecto de Visual Studio y vuelva a realizar la implementación.If there's a name conflict, rename the Visual Studio project and deploy again.

Abra un explorador y vaya a la dirección que especificó en el campo Connection Endpoint (Punto de conexión) en el paso anterior.Open a browser and navigate to the address that you put into the Connection Endpoint field in the previous step. Si lo desea, puede anteponer el identificador de esquema http:// y agregar el puerto :80 a la dirección URL.You can optionally prepend the scheme identifier, http://, and append the port, :80, to the URL. Por ejemplo, http://mysfcluster.SouthCentralUS.cloudapp.azure.com:80.For example, http://mysfcluster.SouthCentralUS.cloudapp.azure.com:80.

Debería ver la página web predeterminada de IIS: Página web predeterminada de IISYou should see the IIS default web page: IIS default web page

LimpiezaClean up

Mientras el clúster está en ejecución, se siguen generando cargos.You continue to incur charges while the cluster is running. Considere la posibilidad de eliminar el clúster.Consider deleting your cluster.

Pasos siguientesNext steps

En este tutorial, ha aprendido a hacer lo siguiente:In this quickstart, you learned how to:

  • Empaquetado de un contenedor de imagen de DockerPackage a Docker image container
  • Configuración de la comunicaciónConfigure communication
  • Creación y empaquetamiento de la aplicación de Service FabricBuild and package the Service Fabric application
  • Implementación de la aplicación contenedora en AzureDeploy the container application to Azure

Para más información sobre cómo trabajar con contenedores de Windows en Service Fabric, siga el tutorial para aplicaciones de contenedor de Windows.To learn more about working with Windows containers in Service Fabric, continue to the tutorial for Windows container apps.