Distribuire un servizio del ruolo di lavoro in Azure

Questo articolo illustra come distribuire un servizio di lavoro .NET in Azure. Con il ruolo di lavoro in esecuzione come un’istanza di Azure Container (ACI) dal Registro Azure Container (ACR), può fungere da microservizio nel cloud. Esistono molti casi d'uso per i servizi a esecuzione prolungata e il servizio di lavoro esiste per questo motivo.

In questa esercitazione apprenderai a:

  • Creare un servizio di lavoro.
  • Creare una risorsa registro contenitori.
  • Eseguire il push di un'immagine nel registro contenitori.
  • Distribuire come istanza del contenitore.
  • Verificare la funzionalità del servizio di lavoro.

Suggerimento

Tutto il codice sorgente di esempio di "Ruoli di lavoro in .NET" è disponibile per il download nel browser esempi. Per altre informazioni, fai riferimento a Esplorare esempi di codice: ruoli di lavoro in .NET.

Prerequisiti

Crea un nuovo progetto

Per creare un nuovo progetto del servizio di lavoro con Visual Studio, selezionare File>Nuovo>progetto.... Nella finestra di dialogo Crea un nuovo progetto cercare "Servizio del ruolo di lavoro" e selezionare il modello Servizio ruolo di lavoro. Immettere il nome del progetto desiderato, selezionare un percorso appropriato e selezionare Avanti. Nella pagina Informazioni aggiuntive selezionare framework di destinazione selezionare .NET 5.0, poi selezionare l'opzione abilita Docker per abilitare il supporto di Docker. Selezionare il sistema operativo Docker desiderato.

Per creare un nuovo progetto del servizio di lavoro con Visual Studio Code, è possibile eseguire i comandi dell'interfaccia della riga di comando di .NET dal terminale integrato. Per altre informazioni, vedere Visual Studio Code: terminale integrato.

Aprire il terminale integrato ed eseguire il comando dotnet new e sostituire <Project.Name> con il nome del progetto desiderato.

dotnet new worker --name <Project.Name>

Per altre informazioni sul comando new worker service project dell'interfaccia della riga di comando di .NET, vedere dotnet new worker.

Per creare un nuovo progetto di servizio di lavoro con l'interfaccia della riga di comando di .NET, aprire il terminale preferito in una directory di lavoro. Eseguire il comando dotnet new e sostituire <Project.Name> con il nome del progetto desiderato.

dotnet new worker --name <Project.Name>

Per altre informazioni sul comando new worker service project dell'interfaccia della riga di comando di .NET, vedere dotnet new worker.

Compilare l'applicazione per assicurarsi che ripristini i pacchetti dipendenti e venga compilata senza errori.

Per compilare l'applicazione da Visual Studio, selezionare F6 oppure selezionare l'opzione di menu Compila>Compila soluzione.

Per compilare l'applicazione da Visual Studio Code, aprire la finestra del terminale integrato ed eseguire il comando dotnet build dalla directory di lavoro.

dotnet build

Per altre informazioni sul comando di compilazione dell'interfaccia della riga di comando di .NET, vedere dotnet build.

Per compilare l'applicazione dall'interfaccia della riga di comando di .NET, eseguire il comando dotnet build dalla directory di lavoro.

dotnet build <path/to/project.csproj>

Specificare il valore <path/to/project.csproj>, ovvero il percorso del file di progetto da compilare. Per altre informazioni sul comando di compilazione dell'interfaccia della riga di comando di .NET, vedere dotnet build.

Aggiungere il supporto di Docker

Se è stata selezionata correttamente la casella di controllo Abilita Docker durante la creazione di un nuovo progetto di lavoro, passare al passaggio Compilare l'immagine Docker.

Se questa opzione non è stata selezionata, è comunque possibile aggiungerla ora. In Visual Studio fare clic con il pulsante destro del mouse sul nodo del progetto in Esplora soluzioni e selezionare Aggiungi>Supporto Docker. Verrà richiesto di selezionare un sistema operativo di destinazione. Selezionare OK con la selezione predefinita del sistema operativo.

Docker File Options

In Visual Studio Code sono necessarie l'estensione Docker e l'estensione account Azure installata. Aprire il riquadro comandi e selezionare l'opzione Docker: Aggiungi file Docker all'area di lavoro. Se viene richiesto di Selezionare la piattaforma applicazione, scegliere .NET: Console Core. Se viene richiesto di Selezionare il progetto, scegliere il progetto del servizio di lavoro creato. Quando viene richiesto di Selezionare il sistema operativo, scegliere il primo sistema operativo elencato. Quando viene richiesto se includere o meno file Docker Compose facoltativi, selezionare No.

Il supporto di Docker richiede un Dockerfile. Questo file è un set di istruzioni complete per la compilazione del servizio di lavoro .NET come immagine Docker. Il Dockerfile è un file senza estensione di file. Il codice seguente è un Dockerfile di esempio e deve esistere nella directory radice del file di progetto.

Con l'interfaccia della riga di comando, il Dockerfilenon viene creato automaticamente. Copiare il contenuto in un nuovo file denominato Dockerfile nella directory radice del progetto.

FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
WORKDIR /app

# Creates a non-root user with an explicit UID and adds permission to access the /app folder
# For more info, please refer to https://aka.ms/vscode-docker-dotnet-configure-containers
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["App.CloudService.csproj", "./"]
RUN dotnet restore "App.CloudService.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "App.CloudService.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "App.CloudService.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "App.CloudService.dll"]

Nota

È necessario aggiornare le varie righe nel Dockerfile che fanno riferimento a *App.CloudService. Sostituirle con il nome del progetto.

Per altre informazioni sulle immagini .NET ufficiali, vedere Docker Hub: .NET Runtime e Docker Hub: .NET SDK.

Compilare l'immagine Docker

Per compilare l'immagine Docker, il motore Docker deve essere in esecuzione.

Importante

Quando si usa Docker Desktop e Visual Studio, per evitare errori correlati alla condivisione dei volumi, assicurarsi che la condivisione dei volumi sia abilitata.

  1. Nella schermata Impostazioni in Docker Desktop selezionare Unità condivise.
  2. Selezionare le unità contenenti i file di progetto.

Per altre informazioni, vedere Risolvere i problemi di sviluppo di Visual Studio con Docker.

Fare clic con il pulsante destro del mouse sul Dockerfile in Esplora soluzioni e scegliere Compila immagine Docker. Viene visualizzata la finestra Output che segnala lo stato del comando docker build.

Fare clic con il pulsante destro del mouse sul Dockerfile nell’Explorer e selezionare Compila immagine. Quando viene richiesto di contrassegnare l'immagine come, immettere appcloudservice:latest. Viene visualizzato il terminale di output dell'attività Docker, che segnala lo stato di avanzamento del comando di compilazione Docker.

Nota

Se non viene richiesto di contrassegnare l'immagine, è possibile che Visual Studio Code si basi su un tasks.json esistente. Se il tag usato è indesiderato, è possibile modificarlo aggiornando il valore dockerBuild/tag dell'elemento di configurazione docker-build nella matrice tasks. Si consideri la sezione di configurazione di esempio seguente:

{
  "type": "docker-build",
  "label": "docker-build: release",
  "dependsOn": [
    "build"
  ],
  "dockerBuild": {
    "tag": "appcloudservice:latest",
    "dockerfile": "${workspaceFolder}/cloud-service/Dockerfile",
    "context": "${workspaceFolder}",
    "pull": true
  },
  "netCore": {
    "appProject": "${workspaceFolder}/cloud-service/App.CloudService.csproj"
  }
}

Aprire una finestra del terminale nella directory radice del Dockerfile ed eseguire il comando docker seguente:

docker build -t appcloudservice:latest -f Dockerfile .

Durante l'esecuzione del comando docker build, elabora ogni riga del Dockerfile come passaggio di istruzione. Questo comando compila l'immagine e crea un repository locale denominato appcloudservice che punta all'immagine.

Suggerimento

Il Dockerfile generato differisce tra gli ambienti di sviluppo. Ad esempio, se si aggiunge il supporto Docker da Visual Studio, è possibile che si verifichino problemi se si tenta di compilare l'immagine Docker da Visual Studio Code, in quanto i passaggi del Dockerfile variano. È consigliabile scegliere un singolo ambiente di sviluppo e usarlo in questa esercitazione.

Creare un registro contenitori

Una risorsa Registro Azure Container consente di compilare, archiviare e gestire immagini e artefatti del contenitore in un registro privato. Per creare un registro contenitori, è necessario creare una nuova risorsa nel portale di Azure.

  1. Selezionare la sottoscrizione e il gruppo di risorse corrispondente (o crearne uno nuovo).
  2. Immettere un nome del Registro.
  3. Selezionare una località.
  4. Selezionare uno SKU appropriato, ad esempio Basic.
  5. Selezionare Rivedi e crea.
  6. Dopo aver visualizzato Convalida superata, selezionare Crea.

Importante

Per usare questo registro contenitori durante la creazione di un'istanza del contenitore, è necessario abilitare l'utente amministratore. Selezionare Chiavi di accesso e abilitare l'utente amministratore.

Una risorsa Registro Azure Container consente di compilare, archiviare e gestire immagini e artefatti del contenitore in un registro privato. Aprire una finestra del terminale nella directory radice del Dockerfile ed eseguire il comando seguente dell'interfaccia della riga di comando di Azure:

Importante

Per interagire con le risorse di Azure dall'interfaccia della riga di comando di Azure, è necessario essere autenticati per la sessione del terminale. Per eseguire l'autenticazione, usare il comando az login:

az login

Dopo aver eseguito l'accesso, usare il comando az account set per specificare la sottoscrizione quando sono presenti più sottoscrizioni e nessuna sottoscrizione predefinita impostata.

az account set --subscription <subscription name or id>

Dopo aver eseguito l'accesso all'interfaccia della riga di comando di Azure, la sessione può interagire di conseguenza con le risorse.

Se non si ha già un gruppo di risorse a cui si vuole associare il servizio di lavoro, crearne uno usando il comando az group create:

az group create -n <resource group> -l <location>

Specificare il nome di <resource group>, e <location>. Per creare un registro contenitori, chiamare il comando az acr create.

az acr create -n <registry name> -g <resource group> --sku <sku> --admin-enabled true

Sostituire i segnaposto con i propri valori appropriati:

  • <registry name>: nome del Registro di sistema.
  • <resource group>: nome del gruppo di risorse usato.
  • <sku>: valori accettati, Basic, Classico, Premiumo Standard.

Il comando precedente:

  • Crea un Registro Azure Container, in base al nome del registro, nel gruppo di risorse specificato.
  • È stato abilitato un utente amministratore. Questa operazione è necessaria per Istanze di Azure Container.

Per altre informazioni, vedere Avvio rapido: Creare un registro Azure Container.

Eseguire il push dell'immagine nel registro contenitori

Con l'immagine Docker .NET compilata e la risorsa del registro contenitori creata, è ora possibile eseguire il push dell'immagine nel registro contenitori.

Fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni e scegliere Pubblica. Verrà visualizzata la finestra di dialogo Pubblica. Per la Destinazione, selezionare Azure e quindi Avanti.

Visual Studio: Publish dialog - select Azure

Per la Destinazione specifica selezionare Registro Azure Container e quindi Avanti.

Visual Studio: Publish dialog - select container registry

Dopodiché, per registro contenitori, selezionare il nome della sottoscrizione usato per creare la risorsa registro Azure Container. Nell'area di selezione registri contenitori selezionare il registro contenitori creato e quindi selezionare Fine.

Visual Studio: Publish dialog - select container registry details

Verrà creato un profilo di pubblicazione, che può essere usato per pubblicare l'immagine nel registro contenitori. Selezionare il pulsante Pubblica per eseguire il push dell'immagine nel registro contenitori, la finestra Output segnala lo stato di avanzamento della pubblicazione e, al termine, verrà visualizzato un messaggio "Pubblicazione completata".

Selezionare Docker dalla barra delle attività in Visual Studio Code. Espandere il pannello di visualizzazione della struttura ad albero IMMAGINI, quindi espandere il nodo immagine appcloudservice e fare clic con il pulsante destro del mouse sul tag latest.

Visual Studio Code: Docker - push image

La finestra del terminale integrato segnala lo stato del comando docker push al registro contenitori.

Per eseguire il push di un'immagine nel registro contenitori, è prima necessario accedere al registro:

az acr login -n <registry name>

Il comando az acr login accede a un registro contenitori tramite l'interfaccia della riga di comando di Docker. Per eseguire il push dell'immagine nel registro contenitori, usare il comando az acr build con il nome del registro contenitori come <registry name>:

az acr build -r <registry name> -t appcloudservice .

Il comando precedente:

  • Inserisce l'origine in un file tar.
  • Lo carica nel registro contenitori.
  • Il registro contenitori decomprime il file tar.
  • Esegue il comando docker build nella risorsa registro contenitori sul Dockerfile.
  • Aggiunge l'immagine al registro contenitori.

Per verificare che il push dell'immagine sia stato eseguito correttamente nel registro contenitori, passare al portale di Azure. Aprire la risorsa registro contenitori, in Servizi selezionare Repository. Verrà visualizzata l'immagine.

Distribuire come istanza del contenitore

In Visual Studio Code selezionare Docker dalla barra delle attività. Espandere il nodo REGISTRI e selezionare Connetti registro. Selezionare Azure quando richiesto e accedere, se necessario.

Importante

La distribuzione come istanza del contenitore da Visual Studio Code non funziona più in Mac. Per altre informazioni, vedere GitHub: Informazioni sull'estensione Docker per Visual Studio Code.

Visual Studio Code - Docker: Connect registry

Espandere il nodo REGISTRI, selezionare Azure, la sottoscrizione > il registro contenitori > l’immagine e quindi fare clic con il pulsante destro del mouse sul tag. Selezionare Distribuisci immagine in Istanze di Azure Container.

Visual Studio Code - Docker: Deploy image to Azure Container Instances

Per creare un'istanza del contenitore, creare prima di tutto un gruppo di contenitori usando il comando az container create.

az container create -g <resource group> \
  --name <instance name> \
  --image <registry name>.azurecr.io/<image name>:latest \
  --registry-password <password>

Specificare i valori appropriati:

  • <resource group>: nome del gruppo di risorse usato in questa esercitazione.
  • <instance name>: nome dell'istanza del contenitore.
  • <registry name>: nome del registro contenitori.
  • <image name>: nome dell'immagine.
  • <password>: la password del registro contenitori: è possibile ottenerla dal portale di Azure, ovvero le >chiavi di accesso alle risorse del Registro Container.

Per creare un'istanza del contenitore, è anche necessario creare una nuova risorsa nel portale di Azure.

  1. Selezionare la stessa sottoscrizione e il gruppo di risorse corrispondente nella sezione precedente.
  2. Immettere un nome contenitoreappcloudservice-container.
  3. Selezionare un’area corrispondente alla selezione località precedente.
  4. Per Origine immagine, selezionare Registro Azure Container.
  5. Selezionare il Registro in base al nome specificato nel passaggio precedente.
  6. Selezionare l’immagine e il tag immagine.
  7. Selezionare Rivedi e crea.
  8. Supponendo che convalida sia stata superata, selezionare Crea.

La creazione delle risorse potrebbe richiedere qualche istante, dopo la creazione selezionare il pulsante Vai alla risorsa.

Per altre informazioni, vedere Avvio rapido: Creare un'istanza di contenitore di Azure.

Verificare la funzionalità del servizio

Subito dopo la creazione dell'istanza del contenitore, viene avviata l'esecuzione.

Per verificare che il servizio di lavoro funzioni correttamente, passare al portale di Azure nella risorsa dell'istanza del contenitore, selezionare l'opzione Contenitori.

Azure portal: Container instance running

Verranno visualizzati i contenitori e il relativo stato corrente. In questo caso, è In esecuzione. Selezionare log per visualizzare l'output del servizio di lavoro .NET.

Per verificare che il servizio di lavoro funzioni correttamente, è possibile visualizzare i log dall'applicazione in esecuzione. Usare il comando az container logs:

az container logs -g <resource group> --name <instance name>

Specificare i valori appropriati:

  • <resource group>: nome del gruppo di risorse usato in questa esercitazione.
  • <instance name>: nome dell'istanza del contenitore.

Verranno visualizzati i log di output del servizio di lavoro .NET, il che significa che l'app in contenitori è stata distribuita correttamente in ACI.

Vedi anche