Introduzione a Docker in Visual Studio per Mac

Con Visual Studio per Mac è possibile creare, eseguire ed effettuare il debug di app ASP.NET Core in contenitori e pubblicarle in Azure.

Prerequisiti

Installazione e configurazione

Per l'installazione di Docker, rivedere e seguire le informazioni riportate in Install Docker Desktop for Mac (Installare Docker Desktop per Mac).

Creazione di un'applicazione Web ASP.NET Core e aggiunta del supporto Docker

  1. Creare una nuova soluzione selezionando File > Nuova soluzione.
  2. In .NET Core > app scegliere il modello Applicazione Web:  Crea una nuova ASP.NET applicazione
  3. Selezionare il framework di destinazione. In questo esempio si userà .NET Core 2.2:  Impostare il framework di destinazione
  4. Immettere i dettagli del progetto, tra cui il nome (in questo esempio, DockerDemo). Il progetto creato contiene tutte le informazioni di base necessarie per compilare ed eseguire un sito Web ASP.NET Core.
  5. Nella finestra della soluzione fare clic con il pulsante destro del mouse sul progetto DockerDemo e scegliere > Aggiungi supporto Docker:  Aggiungi supporto Docker

Visual Studio per Mac aggiungerà automaticamente alla soluzione un nuovo progetto denominato docker-compose e un Dockerfile al progetto esistente.

File di supporto Docker generati

Panoramica dei Dockerfile

Un Dockerfile è il file recipe per la creazione di un'immagine Docker finale. Per informazioni sui comandi al suo interno, fare riferimento a Dockerfile reference (Informazioni di riferimento su Dockerfile).

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY DockerDemo/DockerDemo.csproj DockerDemo/
RUN dotnet restore "DockerDemo/DockerDemo.csproj"
COPY . .
WORKDIR "/src/DockerDemo"
RUN dotnet build "DockerDemo.csproj" -c Release -o /app/build

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

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

Il Dockerfile precedente è basato sull'immagine microsoft/aspnetcore e include le istruzioni per modificare l'immagine di base compilando il progetto e aggiungendolo al contenitore.

Nota

Il Dockerfile predefinito creato da Visual Studio per Mac espone la porta 80 per il traffico HTTP. Per consentire il traffico HTTPS, aggiungere Expose 443 al Dockerfile.

Debug

Selezionare il progetto docker-compose come progetto di avvio e avviare il debug (Esegui > Avvia debug). Il progetto ASP.NET verrà compilato, distribuito e avviato in un contenitore.

Suggerimento

Quando si esegue per la prima volta Docker Desktop dopo averlo installato, è possibile che venga visualizzato l'errore seguente durante il tentativo di eseguire il debug: Cannot start service dockerdemo: Mounts denied

Aggiunge /usr/local/share/dotnet/sdk/NuGetFallbackFolder alla scheda Condivisione file in Docker Desktop:

Aggiunta della cartella NuGetFallbackFolder alla condivisione di file

Al termine del processo di compilazione, l'applicazione verrà avviata in Safari:

Progetto Docker predefinito in esecuzione in Safari

Il contenitore rimarrà in ascolto su una porta, ad esempio http://localhost:32768, e questa porta può variare.

Per visualizzare l'elenco dei contenitori in esecuzione, usare il comando docker ps nel terminale.

Osservare il valore di inoltro della porta nello screenshot seguente (sotto PORTS). Questo valore indica che il contenitore è in ascolto sulla porta specificata in precedenza e che inoltra le richieste al server Web interno sulla porta 80 (come definito nel Dockerfile). L'applicazione, quindi, è in ascolto sulla porta 80:

Elenco di contenitori Docker