Introduzione a Docker in Visual Studio per Mac

Importante

Visual Studio per Mac è pianificato per il ritiro il 31 agosto 2024 in conformità ai criteri moderni relativi al ciclo di vita di Microsoft. Anche se è possibile continuare a usare Visual Studio per Mac, esistono diverse altre opzioni per gli sviluppatori in Mac, ad esempio la versione di anteprima della nuova estensione C# Dev Kit per VS Code.

Altre informazioni sulle sequenze temporali e sulle alternative di supporto.

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 passando a File New Solution (Nuova > soluzione).
  2. In App .NET Core > scegliere il modello applicazione Web:Create a new ASP.NET application
  3. Selezionare il framework di destinazione. In questo esempio si userà .NET Core 2.2: Set target framework
  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 selezionare Aggiungi aggiungi > supporto Docker: Add docker support

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

Generated docker support files

Panoramica dei Dockerfile

Un Dockerfile è il file recipe per la creazione di un'immagine Docker finale. Vedere le informazioni di riferimento su Dockerfile per conoscere i comandi inclusi.

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 docker-compose progetto 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:

Adding the NuGetFallbackFolder folder to File Sharing

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

Default Docker project running 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:

Docker container list