Esercizio: Recuperare un'immagine Docker esistente e distribuirla in locale

Completato

Un buon punto di partenza per la creazione e l'esecuzione delle immagini Docker è prendere un'immagine esistente dall'hub Docker ed eseguirla localmente nel computer.

Per effettuare una verifica delle applicazioni aziendali, si decide di provare a eseguire un'immagine di esempio da Docker Hub. L'immagine selezionata implementa un'app Web ASP.NET di base in .NET Core. Dopo aver definito un processo per la distribuzione di un'immagine Docker, sarà possibile eseguire una delle app Web dell'azienda usando Docker.

In questo esercizio verrà eseguito il pull di un'immagine dall'hub Docker e verrà eseguita l'immagine. Verrà esaminato lo stato locale di Docker per consentire la comprensione degli elementi che vengono distribuiti. Infine, il contenitore e l'immagine verranno rimossi dal computer.

Importante

Questo esercizio viene eseguito nel computer, non in Azure e richiede un'installazione locale di Docker. Scaricare: https://docs.docker.com/desktop/install/windows-install/

Eseguire il pull ed eseguire un'applicazione di esempio dall'hub Docker

  1. Avviare Docker sul proprio computer.

  2. Aprire una finestra del prompt dei comandi nel computer locale.

  3. Immettere il codice seguente per eseguire il pull dell'immagine dell'app ASP.NET di esempio dal registro Docker Hub. Questa immagine contiene un'app Web di esempio sviluppata da Microsoft ed è basata sul modello ASP.NET predefinito disponibile in Visual Studio.

    docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
    
  4. Immettere il codice seguente per verificare che l'immagine sia stata archiviata in locale.

    docker image ls
    

    Si noterà un repository denominato mcr.microsoft.com/dotnet/samples con il tag aspnetapp.

  5. Immettere il codice seguente per avviare l'app di esempio. Il flag -d deve essere eseguito come app in background non interattiva. Il flag -p indica il mapping della porta 8080 nel contenitore creato alla porta 8080 in locale. Questa impostazione è destinata a evitare conflitti con qualsiasi app Web già in esecuzione nel computer. Il comando risponderà con un identificatore esadecimale lungo per l'istanza.

    docker run -d -p 8080:8080 mcr.microsoft.com/dotnet/samples:aspnetapp
    
  6. Aprire un browser Web e immettere l'URL per l'app Web di esempio http://localhost:8080. Verrà visualizzata una pagina simile allo screenshot seguente.

    Screenshot dell'app Web di esempio in esecuzione in un browser.

Esaminare il contenitore nel registro Docker locale

  1. Al prompt dei comandi eseguire il comando seguente per visualizzare i contenitori in esecuzione nel registro locale.

    docker ps
    

    L'output dovrebbe essere simile al seguente:

    CONTAINER ID   IMAGE                                             COMMAND                  CREATED          STATUS          PORTS                  NAMES
    96c851831ade   mcr.microsoft.com/dotnet/samples:aspnetapp   "dotnet aspnetapp.dll"   22 minutes ago   Up 22 minutes   0.0.0.0:8080->80/tcp   eager_montalcini
    

    Il campo COMANDO indica il contenitore avviato eseguendo il comando dotnet aspnetapp.dll. Questo comando richiama il runtime di .NET Core per avviare il codice in aspnetapp.dll (il codice per l'app Web di esempio). Il campo PORTE indica che la porta 8080 dell'immagine è stata mappata alla porta 8080 del computer. Il campo STATO indica che l'applicazione è ancora in esecuzione. Prendere nota del NOME del contenitore.

  2. Eseguire il comando seguente per arrestare il contenitore Docker, sostituendo il segnaposto <NAME> con il nome dell'output del comando precedente.

    docker container stop <NAME>
    
  3. Eseguire il comando seguente per verificare che il contenitore non sia più in esecuzione. Il flag - a indica che il comando visualizza lo stato di tutti i contenitori, non solo di quelli ancora in esecuzione. L'output deve visualizzare lo STATO del contenitore come Chiuso.

    docker ps -a
    
  4. Nel browser Web, aggiornare la pagina per l'app Web di esempio (http://localhost:8080/).) Deve avere esito negativo con errore Connection Refused (Connessione non riuscita).

Rimuovere il contenitore e l'immagine dal registro locale

  1. Anche se il contenitore viene arrestato, viene comunque caricato e può essere riavviato. Eseguire il comando seguente nella finestra del prompt dei comandi per rimuoverlo, sostituendo il segnaposto <NAME> con il nome del contenitore.

    docker container rm <NAME>
    
  2. Verificare se il contenitore è stato rimosso eseguendo il comando seguente. Il comando non deve più includere il contenitore nell'elenco.

    docker ps -a
    
  3. Elencare le immagini attualmente disponibili nel computer. L'output dovrebbe visualizzare il repository degli esempi.

    docker image ls
    
  4. Rimuovere l'immagine dal registro.

    docker image rm mcr.microsoft.com/dotnet/samples:aspnetapp
    
  5. L'output dovrebbe elencare numerosi elementi non contrassegnati ed eliminati. Eseguire il comando seguente per elencare di nuovo le immagini e verificare che l'immagine per l'app Web microsoft/dotnet-samples non sia più visualizzata.

    docker image ls