Distribuire un'applicazione .NET in un contenitore Windows in Azure Service Fabric

Questa esercitazione illustra come distribuire un'applicazione ASP.NET esistente in un contenitore Windows in Azure.

In questa esercitazione si apprenderà come:

  • Creare un progetto Docker in Visual Studio
  • Distribuire un'applicazione esistente in un contenitore
  • Configurare l'integrazione continua con Visual Studio e VSTS

Prerequisiti

  1. Installare Docker CE per Windows in modo da poter eseguire i contenitori in Windows 10.
  2. Acquisire familiarità con le informazioni riportate nella Guida introduttiva ai contenitori di Windows 10.
  3. Scaricare l'applicazione di esempio Fabrikam Fiber CallCenter.
  4. Installare Azure PowerShell
  5. Installare l'estensione Strumenti di recapito continuo per Visual Studio 2017
  6. Creare una sottoscrizione di Azure e un account di Visual Studio Team Services.
  7. Creare un cluster in Azure

Distribuire l'applicazione in un contenitore

Un cluster di Service Fabric è ora in esecuzione in Azure e si è pronti quindi per creare e distribuire un'applicazione in un contenitore. Per avviare l'esecuzione dell'applicazione in un contenitore, è necessario aggiungere il supporto per Docker al progetto in Visual Studio. Quando si aggiunge il supporto per Docker all'applicazione, si verifica quanto segue. Per prima cosa, un Dockerfile viene aggiunto al progetto. Questo nuovo file descrive il modo in cui l'immagine del contenitore deve essere compilata. In secondo luogo, alla soluzione viene aggiunto un nuovo progetto docker-compose. Il nuovo progetto contiene alcuni file docker-compose. I file docker-compose possono essere usati per descrivere le modalità di esecuzione del contenitore.

Per altre informazioni, vedere 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. Le immagini usate in questa esercitazione sono pari a 14 GB. Procedere ed eseguire il comando seguente per ottenere le immagini di base:

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

Aggiungere il supporto di Docker

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

Fare clic con il pulsante destro del mouse sul progetto FabrikamFiber.Web > Aggiungi > Supporto Docker.

Aggiungere il supporto per SQL

Questa applicazione usa SQL come provider di dati, motivo per cui per eseguire l'applicazione è necessaria un'istanza di SQL Server. Fare riferimento a un'immagine del contenitore SQL Server nel file docker-compose.override.yml.

In Visual Studio aprire Esplora soluzioni, trovare docker-compose e aprire il 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.

  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. localdb, tuttavia, non supporta la comunicazione container -> host.

Avviso

L'esecuzione di SQL Server in un contenitore non consente di rendere persistenti i dati. Quando si arresta il contenitore, i dati vengono cancellati. Non usare questa configurazione per la produzione.

Passare al nodo fabrikamfiber.web: e aggiungere un nodo figlio di nome depends_on:. Il questo modo si assicura che il servizio db (il contenitore SQL Server) venga avviato prima dell'applicazione Web (fabrikamfiber.web).

  fabrikamfiber.web:
    depends_on:
      - db

Aggiornare il file di configurazione Web

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.

<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.

Testare il contenitore

Premere F5 per eseguire l'applicazione ed eseguirne il debug nel contenitore.

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). Per altre informazioni sul debug delle applicazioni nei contenitori mediante Visual Studio 2017, vedere questo articolo.

esempio di fabrikam in un contenitore

Il contenitore è ora pronto per la compilazione e l'inserimento come pacchetto in un'applicazione di Service Fabric. 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.

Preparazione l'applicazione per il cloud

Per preparare l'applicazione per l'esecuzione in Service Fabric di Azure, è necessario completare due passaggi:

  1. Esporre la porta in cui si vuole poter raggiungere l'applicazione Web nel cluster di Service Fabric.
  2. Predisporre un database SQL di produzione pronto per l'applicazione.

Esporre la porta per l'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. È possibile esporre il contenitore su questa porta tramite il file docker-compose.ym.

In Visual Studio aprire Esplora soluzioni, trovare docker-compose e aprire il file docker-compose.yml.

Modificare il nodo fabrikamfiber.web: e aggiungere un nodo figlio denominato ports:.

Aggiungere una voce di stringa - "80:80". Il file docker-compose.yml dovrebbe essere simile al seguente:

  version: '3'

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

Usare un database SQL di produzione

Durante l'esecuzione nell'ambiente di produzione, è necessario mantenere i dati persistenti nel 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.

È consigliabile usare un database SQL di Azure. Per configurare ed eseguire un SQL Server gestito in Azure, consultare l'articolo Documentazione sul database SQL di Azure.

Nota

Ricordarsi di modificare le stringhe di connessione a SQL Server nel file web.release.configall'interno del progetto FabrikamFiber.Web.

Questa applicazione non funziona correttamente se i database SQL non sono raggiungibili. È possibile proseguire e distribuire l'applicazione senza un server SQL.

Distribuire con 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. 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.

Per iniziare, il codice deve essere ospitato nel controllo del codice sorgente. Nella restante parte della sezione si presuppone l'uso di git.

Configurare un repository VSTS

Nell'angolo inferiore destro di Visual Studio fare clic su Aggiungi al controllo del codice sorgente > Git (o su qualsiasi opzione desiderata).

fare clic sul pulsante del controllo del codice sorgente

Nel riquadro Team Explorer premere Pubblica repository GIT.

Selezionare il nome dell'archivio VSTS e premere 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.

Configurare il recapito continuo

In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione > Configura recapito continuo.

Selezionare la sottoscrizione di Azure.

Impostare Tipo host su Cluster di Service Fabric.

Impostare Target Host (Host di destinazione) sul cluster di Service Fabric creato nella sezione precedente.

Scegliere un Registro contenitori in cui pubblicare il contenitore.

Suggerimento

Usare il pulsante Modifica per creare un registro contenitori.

Premere OK.

impostazione dell'integrazione continua di Service Fabric

Dopo aver completato la configurazione, il contenitore viene distribuito in Service Fabric. Ogni volta che si esegue il push degli aggiornamenti nel repository viene eseguita una nuova compilazione e una nuova versione.

Nota

La compilazione delle immagini di contenitore richiede circa 15 minuti. La prima distribuzione nel cluster di Service Fabric comporta il download delle immagini del contenitore di base di Windows Server Core. Il completamento del download richiede altri 5-10 minuti.

Passare all'applicazione Fabrikam Call Center usando l'URL del cluster: ad esempio 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. Per verificare l'applicazione, aprire un Web browser e passare all'URL del cluster di Service Fabric.

Passaggi successivi

In questa esercitazione si è appreso come:

  • Creare un progetto Docker in Visual Studio
  • Distribuire un'applicazione esistente in un contenitore
  • Configurare l'integrazione continua con Visual Studio e VSTS

La parte successiva dell'esercitazione comprende informazioni su come configurare il monitoraggio del contenitore.