Distribuire un'applicazione .NET in un contenitore Windows in Azure Service FabricDeploy a .NET application in a Windows container to Azure Service Fabric

Questa esercitazione illustra come distribuire un'applicazione ASP.NET esistente in un contenitore Windows in Azure.This tutorial shows you how to deploy an existing ASP.NET application in a Windows container on Azure.

In questa esercitazione si apprenderà come:In this tutorial, you learn how to:

  • Creare un progetto Docker in Visual StudioCreate a Docker project in Visual Studio
  • Distribuire un'applicazione esistente in un contenitoreContainerize an existing application
  • Configurare l'integrazione continua con Visual Studio e VSTSSetup continuous integration with Visual Studio and VSTS

PrerequisitiPrerequisites

  1. Installare Docker CE per Windows in modo da poter eseguire i contenitori in Windows 10.Install Docker CE for Windows so that you can run containers on Windows 10.
  2. Acquisire familiarità con le informazioni riportate nella Guida introduttiva ai contenitori di Windows 10.Familiarize yourself with the Windows 10 Containers quickstart.
  3. Scaricare l'applicazione di esempio Fabrikam Fiber CallCenter.Download the Fabrikam Fiber CallCenter sample application.
  4. Installare Azure PowerShellInstall Azure PowerShell
  5. Installare l'estensione Strumenti di recapito continuo per Visual Studio 2017Install the Continuous Delivery Tools extension for Visual Studio 2017
  6. Creare una sottoscrizione di Azure e un account di Visual Studio Team Services.Create an Azure subscription and a Visual Studio Team Services account.
  7. Creare un cluster in AzureCreate a cluster on Azure

Creare un cluster in AzureCreate a cluster on Azure

Le applicazioni Service Fabric sono eseguite in un cluster, un set di macchine virtuali o fisiche connesse mediante una rete.Service Fabric applications run on a cluster, a network-connected set of virtual or physical machines. Installare un cluster di Service Fabric in esecuzione in Azure prima di creare e distribuire l'applicazione.Setup a Service Fabric cluster running in Azure before you create and deploy your application. Quando si crea il cluster, scegliere uno SKU che supporta i contenitori in esecuzione (ad esempio Windows Server 2016 Datacenter con contenitori).When creating the cluster, choose a SKU that supports running containers (such as Windows Server 2016 Datacenter with Containers).

Distribuire l'applicazione in un contenitoreContainerize the application

Un cluster di Service Fabric è ora in esecuzione in Azure, perciò è possibile creare e distribuire un'applicazione in un contenitore.Now that you have a Service Fabric cluster running in Azure you are ready to create and deploy a containerized application. Per avviare l'esecuzione dell'applicazione in un contenitore, è necessario aggiungere il supporto per Docker al progetto in Visual Studio.To start running our application in a container, we need to add Docker Support to the project in Visual Studio. Quando si aggiunge il supporto per Docker all'applicazione, si verifica quanto segue.When you add Docker support to the application, two things happen. Per prima cosa, un Dockerfile viene aggiunto al progetto.First, a Dockerfile is added to the project. Questo nuovo file descrive il modo in cui l'immagine del contenitore deve essere compilata.This new file describes how the container image is to be built. In secondo luogo, alla soluzione viene aggiunto un nuovo progetto docker-compose.Then second, a new docker-compose project is added to the solution. Il nuovo progetto contiene alcuni file docker-compose.The new project contains a few docker-compose files. I file docker-compose possono essere usati per descrivere le modalità di esecuzione del contenitore.Docker-compose files can be used to describe how the container is run.

Per altre informazioni, vedere Visual Studio Container Tools.More info on working with Visual Studio Container Tools.

Nota

Se questa è la prima volta che si eseguono immagini del contenitori Windows sul computer in uso, è necessario che Docker CE ottenga le immagini di base per i contenitori.If it is the first time you are running Windows container images on your computer, Docker CE must pull down the base images for your containers. Le immagini usate in questa esercitazione sono pari a 14 GB.The images used in this tutorial are 14 GB. Procedere ed eseguire il comando seguente per ottenere le immagini di base:Go ahead and run the following terminal command to pull the base images:

docker pull microsoft/mssql-server-windows-developer
docker pull microsoft/aspnet:4.6.2

Aggiungere il supporto di DockerAdd Docker support

Aprire il file FabrikamFiber.CallCenter.sln in Visual Studio.Open the FabrikamFiber.CallCenter.sln file in Visual Studio.

Fare clic con il pulsante destro del mouse sul progetto FabrikamFiber.Web > Aggiungi > Supporto Docker.Right-click the FabrikamFiber.Web project > Add > Docker Support.

Aggiungere il supporto per SQLAdd support for SQL

Questa applicazione usa SQL come provider di dati, motivo per cui per eseguire l'applicazione è necessaria un'istanza di SQL Server.This application uses SQL as the data provider, so a SQL server is required to run the application. Fare riferimento a un'immagine del contenitore SQL Server nel file docker-compose.override.yml.Reference a SQL Server container image in our docker-compose.override.yml file.

In Visual Studio aprire Esplora soluzioni, trovare docker-compose e aprire il file docker-compose.override.yml.In Visual Studio, open Solution Explorer, find docker-compose, and open the file docker-compose.override.yml.

Passare al nodo services: e aggiungere un nodo chiamato db: che definisce la voce di SQL Server per il contenitore.Navigate to the services: node, add a node named db: that defines the SQL Server entry for the container.

  db:
    image: microsoft/mssql-server-windows-developer
    environment:
      sa_password: "Password1"
      ACCEPT_EULA: "Y"
    ports:
      - "1433"
    healthcheck:
      test: [ "CMD", "sqlcmd", "-U", "sa", "-P", "Password1", "-Q", "select 1" ]
      interval: 1s
      retries: 20

Nota

Per il debug locale è possibile usare un'istanza di SQL Server a scelta, a condizione che sia raggiungibile dall'host.You can use any SQL Server you prefer for local debugging, as long as it is reachable from your host. localdb, tuttavia, non supporta la comunicazione container -> host.However, localdb does not support container -> host communication.

Avviso

L'esecuzione di SQL Server in un contenitore non consente di rendere persistenti i dati.Running SQL Server in a container does not support persisting data. Quando si arresta il contenitore, i dati vengono cancellati.When the container stops, your data is erased. Non usare questa configurazione per la produzione.Do not use this configuration for production.

Passare al nodo fabrikamfiber.web: e aggiungere un nodo figlio di nome depends_on:.Navigate to the fabrikamfiber.web: node and add a child node named depends_on:. Il questo modo si assicura che il servizio db (il contenitore SQL Server) venga avviato prima dell'applicazione Web (fabrikamfiber.web).This ensures that the db service (the SQL Server container) starts before our web application (fabrikamfiber.web).

  fabrikamfiber.web:
    depends_on:
      - db

Aggiornare il file di configurazione WebUpdate the web config

Tornare al progetto FabrikamFiber.Web e aggiornare la stringa di connessione nel file web.config in modo che punti all'istanza di SQL Server nel contenitore.Back in the FabrikamFiber.Web project, update the connection string in the web.config file, to point to the SQL Server in the container.

<add name="FabrikamFiber-Express" connectionString="Data Source=db,1433;Database=FabrikamFiber;User Id=sa;Password=Password1;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />

<add name="FabrikamFiber-DataWarehouse" connectionString="Data Source=db,1433;Database=FabrikamFiber;User Id=sa;Password=Password1;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />

Nota

Se si desidera usare un'istanza di SQL Server diversa durante la creazione di una compilazione di rilascio dell'applicazione Web, aggiungere un'altra stringa di connessione al file web.release.config.If you want to use a different SQL Server when building a release build of your web application, add another connection string to your web.release.config file.

Testare il contenitoreTest your container

Premere F5 per eseguire l'applicazione ed eseguirne il debug nel contenitore.Press F5 to run and debug the application in your container.

Edge apre la pagina di avvio definita dell'applicazione usando l'indirizzo IP del contenitore nella rete NAT interna (in genere 172.x.x.x).Edge opens your application's defined launch page using the IP address of the container on the internal NAT network (typically 172.x.x.x). Per altre informazioni sul debug delle applicazioni nei contenitori mediante Visual Studio 2017, vedere questo articolo.To learn more about debugging applications in containers using Visual Studio 2017, see this article.

esempio di fabrikam in un contenitore

Il contenitore è ora pronto per la compilazione e l'inserimento come pacchetto in un'applicazione di Service Fabric.The container is now ready to be built and packaged in a Service Fabric application. Dopo aver creato l'immagine del contenitore sul computer, è possibile eseguirne il push in qualsiasi registro contenitori e quindi estrarla in qualsiasi host per l'esecuzione.Once you have the container image built on your machine, you can push it to any container registry and pull it down to any host to run.

Preparazione l'applicazione per il cloudGet the application ready for the cloud

Per preparare l'applicazione per l'esecuzione in Service Fabric di Azure, è necessario completare due passaggi:To get the application ready for running in Service Fabric in Azure, we need to complete two steps:

  1. Esporre la porta in cui si vuole poter raggiungere l'applicazione Web nel cluster di Service Fabric.Expose the port where we want to be able to reach our web application in the Service Fabric cluster.
  2. Predisporre un database SQL di produzione pronto per l'applicazione.Provide a production ready SQL database for our application.

Esporre la porta per l'appExpose the port for the app

Il cluster di Service Fabric configurato presenta la porta 80 aperta per impostazione predefinita in Azure Load Balancer, che consente di bilanciare il traffico in ingresso nel cluster.The Service Fabric cluster we have configured, has port 80 open by default in the Azure Load Balancer, that balances incoming traffic to the cluster. È possibile esporre il contenitore su questa porta tramite il file docker-compose.ym.We can expose our container on this port via our docker-compose.yml file.

In Visual Studio aprire Esplora soluzioni, trovare docker-compose e aprire il file docker-compose.yml.In Visual Studio, open Solution Explorer, find docker-compose, and open the file docker-compose.yml.

Modificare il nodo fabrikamfiber.web: e aggiungere un nodo figlio denominato ports:.Modify the fabrikamfiber.web: node, add a child node named ports:.

Aggiungere una voce di stringa - "80:80".Add a string entry - "80:80". Il file docker-compose.yml dovrebbe essere simile al seguente:This is what your docker-compose.yml file should look like:

  version: '3'

  services:
    fabrikamfiber.web:
      image: fabrikamfiber.web
      build:
        context: .\FabrikamFiber.Web
        dockerfile: Dockerfile
      ports:
        - "80:80"

Usare un database SQL di produzioneUse a production SQL database

Durante l'esecuzione nell'ambiente di produzione, è necessario mantenere i dati persistenti nel database.When running in production, we need our data persisted in our database. Al momento non c'è modo di garantire la persistenza dei dati in un contenitore, pertanto non è possibile archiviare i dati di produzione in SQL Server in un contenitore.There is currently no way to guarantee persistent data in a container, therefore you cannot store production data in SQL Server in a container.

È consigliabile usare un database SQL di Azure.We recommend you utilize an Azure SQL Database. Per configurare ed eseguire un SQL Server gestito in Azure, consultare l'articolo Documentazione sul database SQL di Azure.To set up and run a managed SQL Server in Azure, visit the Azure SQL Database Quickstarts article.

Nota

Ricordarsi di modificare le stringhe di connessione a SQL Server nel file web.release.configall'interno del progetto FabrikamFiber.Web.Remember to change the connection strings to the SQL server in the web.release.config file in the FabrikamFiber.Web project.

Questa applicazione non funziona correttamente se i database SQL non sono raggiungibili.This application fails gracefully if no SQL database is reachable. È possibile proseguire e distribuire l'applicazione senza un server SQL.You can choose to go ahead and deploy the application with no SQL server.

Distribuire con Visual Studio Team ServicesDeploy with Visual Studio Team Services

Per configurare la distribuzione con Visual Studio Team Services, è necessario installare l'estensione Strumenti di recapito continuo per Visual Studio 2017.To set up deployment using Visual Studio Team Services, you need to install the Continuous Delivery Tools extension for Visual Studio 2017. Questa estensione facilita la distribuzione in Azure mediante la configurazione di Visual Studio Team Services e consente di distribuire l'app nel cluster di Service Fabric.This extension makes it easy to deploy to Azure by configuring Visual Studio Team Services and get your app deployed to your Service Fabric cluster.

Per iniziare, il codice deve essere ospitato nel controllo del codice sorgente.To get started, your code must be hosted in source control. Nella restante parte della sezione si presuppone l'uso di git.The rest of this section assumes git is being used.

Configurare un repository VSTSSet up a VSTS repo

Nell'angolo inferiore destro di Visual Studio fare clic su Aggiungi al controllo del codice sorgente > Git (o su qualsiasi opzione desiderata).At the bottom-right corner of Visual Studio, click Add to Source Control > Git (or whichever option you prefer).

fare clic sul pulsante del controllo del codice sorgente

Nel riquadro Team Explorer premere Pubblica repository GIT.In the Team Explorer pane, press Publish Git Repo.

Selezionare il nome dell'archivio VSTS e premere Repository.Select your VSTS repository name and press Repository.

pubblicazione dell'archivio in VSTS

Ora che il codice è sincronizzato con l'archivio del codice sorgente VSTS, è possibile configurare la distribuzione continua e il recapito continuo.Now that your code is synchronized with a VSTS source repository, you can configure continuous integration and continuous delivery.

Configurare il recapito continuoSetup continuous delivery

In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione > Configura recapito continuo.In Solution Explorer, right-click the solution > Configure Continuous Delivery.

Selezionare la sottoscrizione di Azure.Select the Azure Subscription.

Impostare Tipo host su Cluster di Service Fabric.Set Host Type to Service Fabric Cluster.

Impostare Target Host (Host di destinazione) sul cluster di Service Fabric creato nella sezione precedente.Set Target Host to the service fabric cluster you created in the previous section.

Scegliere un Registro contenitori in cui pubblicare il contenitore.Choose a Container Registry to publish your container to.

Suggerimento

Usare il pulsante Modifica per creare un registro contenitori.Use the Edit button to create a container registry.

Premere OK.Press OK.

impostazione dell'integrazione continua di Service Fabric

Dopo aver completato la configurazione, il contenitore viene distribuito in Service Fabric.Once the configuration is completed, your container is deployed to Service Fabric. Ogni volta che si esegue il push degli aggiornamenti nel repository viene eseguita una nuova compilazione e una nuova versione.Whenever you push updates to the repository a new build and release is executed.

Nota

La compilazione delle immagini di contenitore richiede circa 15 minuti.Building the container images take approximately 15 minutes. La prima distribuzione nel cluster di Service Fabric comporta il download delle immagini del contenitore di base di Windows Server Core.The first deployment to the Service Fabric cluster causes the base Windows Server Core container images to be downloaded. Il completamento del download richiede altri 5-10 minuti.The download takes additional 5-10 minutes to complete.

Passare all'applicazione Fabrikam Call Center usando l'URL del cluster: ad esempio http://mycluster.westeurope.cloudapp.azure.comBrowse to the Fabrikam Call Center application using the url of your cluster: for example, http://mycluster.westeurope.cloudapp.azure.com

Dopo aver inserito la soluzione Fabrikam Call in un pacchetto e averla distribuita, è possibile aprire il portale di Azure e visualizzare l'applicazione in esecuzione in Service Fabric.Now that you have containerized and deployed the Fabrikam Call Center solution, you can open the Azure portal and see the application running in Service Fabric. Per verificare l'applicazione, aprire un Web browser e passare all'URL del cluster di Service Fabric.To try the application, open a web browser and go to the URL of your Service Fabric cluster.

Passaggi successiviNext steps

In questa esercitazione si è appreso come:In this tutorial, you learned how to:

  • Creare un progetto Docker in Visual StudioCreate a Docker project in Visual Studio
  • Distribuire un'applicazione esistente in un contenitoreContainerize an existing application
  • Configurare l'integrazione continua con Visual Studio e VSTSSetup continuous integration with Visual Studio and VSTS

La parte successiva dell'esercitazione comprende informazioni su come configurare il monitoraggio del contenitore.In the next part of the tutorial, learn how to set up monitoring for your container.