Condividi tramite


Distribuire un servizio Worker in Azure

Questo articolo illustra come distribuire un servizio di lavoro .NET in Azure. Con il Worker in esecuzione come Azure Container Instance (ACI) dal Azure Container Registry (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 si apprenderà come:

  • Creare un servizio di lavoro.
  • Creare risorsa del registro dei contenitori.
  • Caricare un'immagine nel registro di container.
  • Distribuire come istanza di container.
  • Verificare la funzionalità del servizio di lavoro.

Suggerimento

Tutto il codice sorgente di esempio "Worker in .NET" è disponibile nel browser Samples per il download. Per ulteriori informazioni, consultare Esplora esempi di codice: Worker in .NET.

Prerequisiti

Creare 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 di lavoro" e selezionare Modello servizio di lavoro. Immettere il nome del progetto desiderato, selezionare un percorso appropriato e selezionare Avanti. Nella pagina Informazioni aggiuntiveselezionare Framework di destinazione e selezionare .NET 5.0l'opzione Abilita Docker per abilitare il supporto 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 dotnet new comando e sostituire con il <Project.Name> nome del progetto desiderato.

dotnet new worker --name <Project.Name>

Per ulteriori informazioni sul comando del nuovo progetto "Worker Service" della CLI 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 dotnet new comando e sostituire con il <Project.Name> nome del progetto desiderato.

dotnet new worker --name <Project.Name>

Per ulteriori informazioni sul comando del nuovo progetto del servizio worker della .NET CLI, vedere dotnet new worker.

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

Per compilare l'applicazione da Visual Studio, selezionare F6 o 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 dotnet build comando dalla directory di lavoro.

dotnet build

Per maggiori informazioni sul comando build della .NET CLI, vedere dotnet build.

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

dotnet build <path/to/project.csproj>

Specifica il valore del tuo <path/to/project.csproj>, che è il percorso per il file di progetto da compilare. Per ulteriori informazioni sul comando di compilazione della CLI 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 Compila 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 scegliere Aggiungi>supporto Docker. Verrà richiesto di selezionare un sistema operativo di destinazione; selezionare OK con la selezione predefinita del sistema operativo.

Opzioni file Docker

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 Piattaforma applicazione, scegliere .NET: Console Core. Se viene richiesto di selezionare 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 per te. Copiare il contenuto in un nuovo file denominato Dockerfile nella directory radice del progetto.

FROM mcr.microsoft.com/dotnet/runtime:8.0@sha256:e6b552fd7a0302e4db30661b16537f7efcdc0b67790a47dbf67a5e798582d3a5 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@sha256:35792ea4ad1db051981f62b313f1be3b46b1f45cadbaa3c288cd0d3056eefb83 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"]

Annotazioni

È 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 docker build comando.

Fare clic con il pulsante destro del mouse sul Dockerfile in Esplora risorse e scegliere Compila immagine. Quando viene richiesto di contrassegnare l'immagine come, immettere appcloudservice:latest. Il terminale di output dell'attività Docker visualizza il progresso del comando di build di Docker.

Annotazioni

Se non viene richiesto di contrassegnare l'immagine, è possibile che Visual Studio Code stia facendo affidamento su un tasks.json esistente. Se il tag usato è indesiderato, è possibile modificarlo aggiornando il docker-build valore dell'elemento di dockerBuild/tag configurazione nella tasks matrice. 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 docker build comando, elabora ogni riga nel 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 Azure Container Registry (ACR) consente di creare, archiviare e gestire immagini di contenitori e artefatti 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 di sistema.
  3. Selezionare una posizione.
  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 creare, 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 seguente comando di Azure CLI:

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 az login comando :

az login

Dopo aver eseguito l'accesso, utilizzare il comando az account set per specificare l'abbonamento quando sono presenti più abbonamenti e nessun abbonamento predefinito impostato.

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 az group create comando :

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

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

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.
  • <resource group>: nome del gruppo di risorse usato.
  • <sku>: valori accettati, Basic, Classic, Premium o 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.

Caricare l'immagine nel registro dei 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 Destinazione selezionare Azure e quindi Avanti.

Visual Studio: finestra di dialogo Pubblica - Selezionare Azure

Per Destinazione specifica selezionare Registro Azure Container e quindi Avanti.

Visual Studio: finestra di dialogo Pubblica - Seleziona registro dei container

Poi, per il Registro Azure Container, selezionare il nome della sottoscrizione usato per creare la risorsa ACR. Nell'area di selezione Registri contenitori selezionare il registro contenitori creato e quindi selezionare Fine.

Visual Studio: finestra di dialogo pubblica - selezionare i dettagli del registro di container

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. Espandi il pannello albero di visualizzazione IMAGES, quindi espandi il nodo immagine appcloudservice e fai clic con il pulsante destro del mouse sul tag latest.

Visual Studio Code: Docker - eseguire il push dell'immagine

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

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

az acr login -n <registry name>

Il az acr login comando 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 la sorgente in un file tar.
  • Lo carica nel registro dei container.
  • Il registro contenitori decomprime il file tar .
  • Esegue il docker build comando nella risorsa del registro dei contenitori contro il 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 del registro dei container, quindi, in Servizi, selezionare Repository. Verrà visualizzata l'immagine.

Distribuire come istanza di container

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

Importante

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

Visual Studio Code - Docker: Connettere il Registro di sistema

Espandere il nodo REGISTRIES, selezionare Azure, la sottoscrizione >, il registro di 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: Distribuire un'immagine in Istanze di Azure Container

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

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 dei container.
  • <image name>: nome dell'immagine.
  • <password>: la password del registro contenitori: è possibile ottenerla dal portale di Azure, > 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 contenitore:appcloudservice-container
  3. Selezionare un'area corrispondente alla selezione di Posizione precedente.
  4. Per Origine immagine, selezionare Azure Container Registry.
  5. Selezionare il Registro in base al nome specificato nel passaggio precedente.
  6. Selezionare il tag Immagine e 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, inizia a funzionare.

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

Portale di Azure: Esecuzione dell'istanza del contenitore

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.

Vedere anche