Eseguire la migrazione di un software personalizzato al Servizio app di Azure usando un contenitore personalizzato

Il servizio app di Azure offre stack di applicazioni predefiniti in Windows, ad esempio ASP.NET o Node.js, eseguiti in IIS. L'ambiente Windows preconfigurato blocca il sistema operativo da:

  • Accesso amministrativo.
  • Installazioni software.
  • Modifiche alla Global Assembly Cache.

Per altre informazioni, vedere Funzionalità del sistema operativo in Servizio app di Azure.

È possibile distribuire un'immagine di Windows configurata personalizzata da Visual Studio per apportare modifiche al sistema operativo necessarie per l'app. È quindi facile eseguire la migrazione dell'app locale che richiede la configurazione personalizzata del sistema operativo e del software. Questa esercitazione illustra come eseguire la migrazione al servizio app di un'app ASP.NET che usa tipi di carattere personalizzati installati nella libreria dei tipi di carattere Windows. Si distribuisce un'immagine Windows configurata in modo personalizzato da Visual Studio a Registro Azure Container e quindi la si esegue nel servizio app.

Shows the web app running in a Windows container.

Prerequisiti

Per completare questa esercitazione:

Configurare l'app in locale

Scaricare l'esempio

In questo passaggio si configura il progetto .NET locale.

Il progetto di esempio contiene un'applicazione ASP.NET semplice che usa un tipo di carattere personalizzato installato nella libreria dei tipi di carattere Windows. Non è necessario installare i tipi di carattere. Tuttavia, l'esempio è un esempio di un'app integrata con il sistema operativo sottostante. Per eseguire la migrazione di un'app di questo tipo al servizio app, è necessario riprogettare il codice per rimuovere l'integrazione oppure è possibile eseguire la migrazione dell'app senza modifiche in un contenitore Windows personalizzato.

Installare il tipo di carattere

In Esplora risorse passare a custom-font-win-container-master/CustomFontSample, fare clic con il pulsante destro del mouse su FrederickatheGreat-Regular.ttf e scegliere Installa.

Questo tipo di carattere è disponibile pubblicamente in Google Fonts.

Eseguire l'app

Aprire il file custom-font-win-container-master/CustomFontSample.sln in Visual Studio.

Digitare Ctrl+F5 per eseguire l'app senza debug. L'app viene visualizzata nel browser predefinito.

Screenshot showing the app displayed in the default browser.

Quando l'app usa un tipo di carattere installato, l'app non può essere eseguita nella sandbox servizio app. È tuttavia possibile distribuirla usando un contenitore Windows, perché è possibile installare il tipo di carattere nel contenitore Windows.

Configurare il contenitore Windows

In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto CustomFontSample e scegliere Aggiungi>Container Orchestration Support (Supporto orchestrazione contenitori).

Screenshot of the Solution Explorer window showing the CustomFontSample project, Add, and Container Orchestrator Support menu items selected.

Selezionare Docker Compose>OK.

Il progetto è ora impostato per l'esecuzione in un contenitore Di Windows. Un Dockerfile oggetto viene aggiunto al progetto CustomFontSample e alla soluzione viene aggiunto un progetto docker-compose .

Da Esplora soluzioni aprire Dockerfile.

È necessario usare un'immagine padre supportata. Modificare l'immagine padre sostituendo la riga FROM con il codice seguente:

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2019

Alla fine del file aggiungere la riga seguente e quindi salvare il file:

RUN ${source:-obj/Docker/publish/InstallFont.ps1}

InstallFont.ps1 è disponibile nel progetto CustomFontSample. Si tratta di un semplice script che installa il tipo di carattere. È possibile trovare una versione più complessa dello script in PowerShell Gallery.

Nota

Per testare il contenitore Windows in locale, assicurarsi che Docker sia avviato nel computer locale.

Pubblicare nel Registro Azure Container

Registro Azure Container consente di archiviare le immagini per le distribuzioni di contenitori. È possibile configurare il servizio app per usare le immagini ospitate in Registro Azure Container.

Aprire la pubblicazione guidata

In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto CustomFontSample e scegliere Pubblica.

Screenshot of Solution Explorer showing the CustomFontSample project and Publish selected.

Creare il registro ed eseguire la pubblicazione

Nella pubblicazione guidata selezionare Registro contenitori>Crea nuovo Registro Azure Container>Pubblica.

Screenshot of the publish wizard showing Container Registry, Create New Azure Container Registry, and the Publish button selected.

Accedere con l'account di Azure

Nella finestra di dialogo Crea un nuovo Registro Azure Container selezionare Aggiungi un account e accedere alla sottoscrizione di Azure. Se è già stato eseguito l'accesso, selezionare l'account contenente la sottoscrizione desiderata dall'elenco a discesa.

Sign in to Azure.

Configurare il registro

Configurare il nuovo registro contenitori in base ai valori suggeriti nella tabella seguente. Al termine selezionare Crea.

Impostazione Valore suggerito Ulteriori informazioni
Prefisso DNS Mantenere il nome del registro generato oppure modificarlo scegliendo un altro nome univoco.
Gruppo di risorse Selezionare Nuovo, digitare myResourceGroup e selezionare OK.
SKU Di base Piani tariffari
Percorso del registro Europa occidentale

Configure Azure container registry.

Verrà aperta una finestra del terminale in cui viene visualizzato l'avanzamento della distribuzione dell'immagine. Attendere il completamento della distribuzione.

Accedere ad Azure

Accedere al portale di Azure.

Creare un'app Web

Dal menu a sinistra scegliere Crea una risorsa>Web>App Web per contenitori.

Configurare le informazioni di base dell'app

Nella scheda Informazioni di base configurare le impostazioni in base alla tabella seguente, quindi selezionare Avanti: Docker.

Impostazione Valore suggerito Ulteriori informazioni
Abbonamento Assicurarsi che sia selezionata la sottoscrizione corretta.
Gruppo di risorse selezionare Crea nuovo, digitare myResourceGroup e selezionare OK.
Nome Digitare un nome univoco. L'URL dell'app Web è https://<app-name>.azurewebsites.net, dove <app-name> è il nome dell'app.
Pubblicazione Contenitore Docker
Sistema operativo Windows
Area Europa occidentale
Piano Windows Selezionare Crea nuovo, digitare myAppServicePlan e selezionare OK.

La scheda Informazioni di base avrà un aspetto simile al seguente:

Shows the Basics tab used to configure the web app.

Configurare il contenitore Windows

Nella scheda Docker configurare il contenitore Windows personalizzato come illustrato nella tabella seguente e selezionare Rivedi e crea.

Impostazione Valore suggerito
Origine immagine Registro Azure Container
Registro Selezionare il registro creato in precedenza.
Image customfontsample
Tag più recente

Completare la creazione dell'app

Selezionare Crea e attendere che Azure crei le risorse necessarie.

Passare all'app Web

Al termine dell'operazione di Azure, verrà visualizzata una casella di notifica.

Shows that the Azure operation is complete.

  1. Selezionare Vai alla risorsa.

  2. Nella pagina dell'app selezionare il collegamento in URL.

Verrà aperta la nuova pagina del browser illustrata di seguito:

Shows the new browser page for the web app.

Attendere alcuni minuti e riprovare, finché non viene visualizzata la pagina iniziale, con il carattere desiderato:

Shows the homepage with the font you configured.

Complimenti. È stata eseguita la migrazione di un'applicazione ASP.NET in Servizio app di Azure in un contenitore Windows.

Visualizzare i log di avvio del contenitore

Il caricamento del contenitore di Windows potrebbe richiedere del tempo. Per visualizzare lo stato di avanzamento, passare all'URL seguente sostituendo <app-name> con il nome dell'app.

https://<app-name>.scm.azurewebsites.net/api/logstream

I log trasmessi hanno un aspetto simile al seguente:

14/09/2018 23:16:19.889 INFO - Site: fonts-win-container - Creating container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest.
14/09/2018 23:16:19.928 INFO - Site: fonts-win-container - Create container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest succeeded. Container Id 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:23.405 INFO - Site: fonts-win-container - Start container succeeded. Container: 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Configuring container
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container start-up and configuration completed successfully

Il servizio app di Azure usa la tecnologia dei contenitori Docker per ospitare immagini predefinite e personalizzate. Per visualizzare un elenco di immagini predefinite, eseguire il comando dell'interfaccia della riga di comando di Azure , 'az webapp list-runtimes --os linux'. Se queste immagini non soddisfano le proprie esigenze, è possibile creare e distribuire un'immagine personalizzata.

Nota

Il contenitore deve avere come destinazione l'architettura x86-x64, ARM64 non è supportato.

In questa esercitazione apprenderai a:

  • Eseguire il push di un'immagine Docker personalizzata in Registro Azure Container
  • Distribuire l'immagine personalizzata in servizio app
  • Configurare le variabili di ambiente
  • Eseguire il pull dell'immagine in servizio app usando un'identità gestita
  • Accedere ai log di diagnostica
  • Abilitare CI/CD da Registro Azure Container a servizio app
  • Connettersi al contenitore con SSH

Il completamento di questa esercitazione comporta un piccolo addebito nell'account Azure per il registro contenitori e può comportare più costi per l'hosting del contenitore per più di un mese.

Configurare l'ambiente iniziale

Questa esercitazione richiede la versione 2.0.80 o successiva dell'interfaccia della riga di comando di Azure. Se si usa Azure Cloud Shell, la versione più recente è già installata.

  • Installare Docker, che è possibile usare per creare immagini Docker. L'installazione di Docker potrebbe richiedere un riavvio del computer.

Dopo aver installato Docker, aprire una finestra del terminale e verificare che docker sia installato:

docker --version

Clonare o scaricare l'app di esempio

È possibile ottenere l'esempio per questa esercitazione tramite git clone o download.

Clonare con git

Clonare il repository di esempio:

git clone https://github.com/Azure-Samples/docker-django-webapp-linux.git --config core.autocrlf=input

Assicurarsi di includere l'argomento --config core.autocrlf=input per garantire terminazioni di riga appropriate nei file usati all'interno del contenitore Linux:

Passare quindi alla cartella :

cd docker-django-webapp-linux

Scaricare da GitHub

Invece di usare git clone, è possibile visitare https://github.com/Azure-Samples/docker-django-webapp-linux, selezionare Clonae quindi selezionare Scarica ZIP.

Decomprimere il file ZIP in una cartella denominata docker-django-webapp-linux.

Aprire quindi una finestra del terminale nellacartella docker-django-webapp-linux .

(Facoltativo) Esaminare il file Docker

Il file nell'esempio denominato Dockerfile che descrive l'immagine Docker e contiene le istruzioni di configurazione:

FROM tiangolo/uwsgi-nginx-flask:python3.6

RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt --no-cache-dir
ADD . /code/

# ssh
ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get update \
 && apt-get install -y --no-install-recommends openssh-server \
 && echo "$SSH_PASSWD" | chpasswd 

COPY sshd_config /etc/ssh/
COPY init.sh /usr/local/bin/

RUN chmod u+x /usr/local/bin/init.sh
EXPOSE 8000 2222

#CMD ["python", "/code/manage.py", "runserver", "0.0.0.0:8000"]
ENTRYPOINT ["init.sh"]
  • Il primo gruppo di comandi installa i requisiti dell'app nell'ambiente.
  • Il secondo gruppo di comandi crea un server SSH per la comunicazione sicura tra il contenitore e l'host.
  • L'ultima riga, ENTRYPOINT ["init.sh"], richiama init.sh per avviare il servizio SSH e il server Python.

Creare e testare l'immagine in locale

Nota

Docker Hub prevede quote sul numero di pull anonimi per indirizzo IP e sul numero di pull autenticati per ogni utente gratuito (vedere Trasferimento dei dati). Se si nota che i pull da Docker Hub sono limitati, provare docker login, se non si è già connessi.

  1. Eseguire il comando seguente per creare l'immagine:

    docker build --tag appsvc-tutorial-custom-image .
    
  2. Testare il funzionamento della build eseguendo il contenitore Docker in locale:

    docker run -it -p 8000:8000 appsvc-tutorial-custom-image
    

    Questo comando docker run specifica la porta con l'argomento -p seguito dal nome dell'immagine. -it consente di arrestarlo con Ctrl+C.

    Suggerimento

    Se si esegue in Windows e viene visualizzato l'errore standard_init_linux.go :211: exec user process caused "no such file or directory" (nessun file o directory di questo tipo), il file init.sh contiene terminazioni di riga CR-LF anziché le terminazioni LF previste. Questo errore si verifica se è stato usato git per clonare il repository di esempio ma è stato omesso il parametro --config core.autocrlf=input. In questo caso, clonare nuovamente il repository con l'argomento '--config". Questo errore potrebbe essere visualizzato anche se il file init.sh è stato modificato e salvato con le terminazioni CRLF. In questo caso, salvare di nuovo il file solo con le terminazioni LF.

  3. Passare a http://localhost:8000 per verificare che l'app Web e il contenitore funzionino correttamente.

    Test web app locally.

I. Creare un'identità gestita assegnata dall'utente

servizio app può usare un'identità gestita predefinita o un'identità gestita assegnata dall'utente per l'autenticazione con un registro contenitori. In questa esercitazione si userà un'identità gestita assegnata dall'utente.

  1. Eseguire il comando az group create per creare un gruppo di risorse:

    az group create --name msdocs-custom-container-tutorial --location westeurope
    

    È possibile cambiare il valore di --location per specificare un'area nelle vicinanze.

  2. Creare un'identità gestita nel gruppo di risorse.

    az identity create --name myID --resource-group msdocs-custom-container-tutorial
    

II. Creare un registro contenitori

  1. Creare un registro contenitori con il az acr create comando e sostituire <registry-name> con un nome univoco per il registro. Il nome deve contenere solo lettere e numeri e deve essere univoco in tutto Azure.

    az acr create --name <registry-name> --resource-group msdocs-custom-container-tutorial --sku Basic --admin-enabled true
    

    Il --admin-enabled parametro consente di eseguire il push delle immagini nel Registro di sistema usando un set di credenziali amministrative.

  2. Recuperare le credenziali amministrative eseguendo il az acr show comando :

    az acr credential show --resource-group msdocs-custom-container-tutorial --name <registry-name>
    

    L'output JSON di questo comando fornisce due password insieme al nome utente del registro.

III. Eseguire il push dell'immagine di esempio in Registro Azure Container

In questa sezione si esegue il push dell'immagine in Registro Azure Container, che verrà usata da servizio app in un secondo momento.

  1. Dal terminale locale in cui è stata compilata l'immagine di esempio, usare il docker login comando per accedere al registro contenitori:

    docker login <registry-name>.azurecr.io --username <registry-username>
    

    Sostituire <registry-name> e <registry-username> con i valori dei passaggi precedenti. Quando richiesto, digitare una delle password del passaggio precedente.

    Usare lo stesso nome del registro in tutti i passaggi rimanenti di questa sezione.

  2. Quando l'accesso ha esito positivo, contrassegnare l'immagine Docker locale nel Registro di sistema:

    docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    
  3. Usare il comando docker push per eseguire il push dell'immagine nel registro:

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    La prima volta possono essere necessari alcuni minuti per caricare l'immagine, perché è inclusa l'immagine di base. I caricamenti successivi sono in genere più veloci.

    Mentre si è in attesa, è possibile completare i passaggi della sezione successiva per configurare il servizio app per la distribuzione dal registro.

IV. Autorizzare l'identità gestita per il registro

L'identità gestita creata non dispone ancora dell'autorizzazione per il pull dal registro contenitori. In questo passaggio si abilita l'autorizzazione.

  1. Recuperare l'ID entità per l'identità gestita:

    principalId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query principalId --output tsv)
    
  2. Recuperare l'ID risorsa per il registro contenitori:

    registryId=$(az acr show --resource-group msdocs-custom-container-tutorial --name <registry-name> --query id --output tsv)
    
  3. Concedere all'identità gestita l'autorizzazione per accedere al registro contenitori:

    az role assignment create --assignee $principalId --scope $registryId --role "AcrPull"
    

    Per altre informazioni su queste autorizzazioni, vedere Informazioni sul controllo degli accessi in base al ruolo di Azure.

V. Creare l'app Web

  1. Creare un piano di servizio app usando il comando az appservice plan create:

    az appservice plan create --name myAppServicePlan --resource-group msdocs-custom-container-tutorial --is-linux
    

    Un piano di servizio app corrisponde alla macchina virtuale che ospita l'app Web. Per impostazione predefinita, il comando precedente usa un piano tariffario B1 poco costoso, gratuito per il primo mese. È possibile controllare il livello con il parametro --sku.

  2. Creare l'app Web con il comando az webapp create:

    az webapp create --resource-group msdocs-custom-container-tutorial --plan myAppServicePlan --name <app-name> --deployment-container-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    Sostituire <app-name> con un nome per l'app Web, che deve essere univoco in tutto Azure. Sostituire inoltre <registry-name> con il nome del registro creato nel passaggio precedente.

    Suggerimento

    È possibile recuperare le impostazioni del contenitore dell'app Web in qualsiasi momento con il comando az webapp config container show --name <app-name> --resource-group msdocs-custom-container-tutorial. L'immagine è specificata nella proprietà DOCKER_CUSTOM_IMAGE_NAME. Se l'app Web viene distribuita tramite Azure DevOps o modelli di Azure Resource Manager, l'immagine può essere visualizzata anche in una proprietà denominata LinuxFxVersion. Le due proprietà hanno lo stesso scopo. Se sono presenti entrambe nella configurazione dell'app Web, LinuxFxVersion avrà la precedenza.

VI. Configurare l'app Web

In questo passaggio si configura l'app Web come indicato di seguito:

  • Il contenitore di esempio è in ascolto sulla porta 8000 per le richieste Web e si configura l'app per inviare richieste alla porta 8000.
  • Indicare all'app di usare l'identità gestita per eseguire il pull delle immagini dal registro contenitori.
  • Configurare la distribuzione continua dal registro contenitori (o, ogni push di immagini nel registro attiverà l'app per eseguire il pull della nuova immagine). Questa parte non è necessaria per il pull dell'app Web dal registro contenitori, ma può informare l'app Web quando viene eseguito il push di una nuova immagine nel registro. Senza di esso, è necessario attivare manualmente un'immagine pull riavviando l'app Web.
  1. Usare az webapp config appsettings set per impostare la variabile di ambiente WEBSITES_PORT come previsto dal codice dell'app:

    az webapp config appsettings set --resource-group msdocs-custom-container-tutorial --name <app-name> --settings WEBSITES_PORT=8000
    

    Sostituire <app-name> con il nome usato nel passaggio precedente.

    Per altre informazioni su questa variabile di ambiente, vedere il file readme nel repository GitHub dell'esempio.

  2. Abilitare l'identità gestita assegnata dall'utente nell'app Web con il az webapp identity assign comando :

    id=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query id --output tsv)
    az webapp identity assign --resource-group msdocs-custom-container-tutorial --name <app-name> --identities $id
    

    Sostituire <app-name> con il nome usato nel passaggio precedente.

  3. Configurare l'app per eseguire il pull da Registro Azure Container usando le identità gestite.

    appConfig=$(az webapp config show --resource-group msdocs-custom-container-tutorial --name <app-name> --query id --output tsv)
    az resource update --ids $appConfig --set properties.acrUseManagedIdentityCreds=True
    

    Sostituire <app-name> con il nome usato nel passaggio precedente.

  4. Impostare l'ID client usato dall'app Web per eseguire il pull da Registro Azure Container. Questo passaggio non è necessario se si usa l'identità gestita assegnata dal sistema.

    clientId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query clientId --output tsv)
    az resource update --ids $appConfig --set properties.AcrUserManagedIdentityID=$clientId
    
  5. Abilitare CI/CD in servizio app.

    cicdUrl=$(az webapp deployment container config --enable-cd true --name <app-name> --resource-group msdocs-custom-container-tutorial --query CI_CD_URL --output tsv)
    

    CI_CD_URLè un URL che servizio app genera automaticamente. Il Registro di sistema deve usare questo URL per notificare servizio app che si è verificato un push di un'immagine. In realtà non crea automaticamente il webhook.

  6. Creare un webhook nel registro contenitori usando il CI_CD_URL ottenuto dall'ultimo passaggio.

    az acr webhook create --name appserviceCD --registry <registry-name> --uri $cicdUrl --actions push --scope appsvc-tutorial-custom-image:latest
    
  7. Per verificare se il webhook è configurato correttamente, effettuare il ping del webhook e verificare se viene visualizzata una risposta 200 OK.

    eventId=$(az acr webhook ping --name appserviceCD --registry <registry-name> --query id --output tsv)
    az acr webhook list-events --name appserviceCD --registry <registry-name> --query "[?id=='$eventId'].eventResponseMessage"
    

    Suggerimento

    Per visualizzare tutte le informazioni su tutti gli eventi webhook, rimuovere il --query parametro .

    Se si esegue lo streaming del log del contenitore, verrà visualizzato il messaggio dopo il ping del webhook: Starting container for site, perché il webhook attiva il riavvio dell'app.

VII. Passare all'app Web

Per testare l'app, passare a https://<app-name>.azurewebsites.net, sostituendo <app-name> con il nome dell'app Web.

Al primo accesso, l'app potrebbe richiedere del tempo perché servizio app deve eseguire il pull dell'intera immagine dal Registro di sistema. Se il browser raggiunge il timeout, è sufficiente aggiornare la pagina. Una volta eseguito il pull dell'immagine iniziale, i test successivi saranno molto più veloci.

A screenshot of the browser showing web app running successfully in Azure.

VIII. Accedere ai log di diagnostica

Mentre si sta aspettando che il servizio app esegui il pull dell'immagine, è utile vedere esattamente cosa servizio app sta eseguendo lo streaming dei log del contenitore nel terminale.

  1. Attivare la registrazione del contenitore:

    az webapp log config --name <app-name> --resource-group msdocs-custom-container-tutorial --docker-container-logging filesystem
    
  2. Abilitare lo streaming dei log:

    az webapp log tail --name <app-name> --resource-group msdocs-custom-container-tutorial
    

    Se i log di console non sono immediatamente visibili, controllare nuovamente dopo 30 secondi.

    È anche possibile esaminare i file di log nel browser all'indirizzo https://<app-name>.scm.azurewebsites.net/api/logs/docker.

  3. Per interrompere lo streaming dei log in qualsiasi momento, digitare Ctrl+C.

IX. Modificare il codice dell'app e ridistribuirlo

In questa sezione viene apportata una modifica al codice dell'app Web, ricompilare l'immagine e quindi eseguirne il push nel registro contenitori. Il servizio app quindi esegue automaticamente il pull dell'immagine aggiornata dal registro per aggiornare l'app Web in esecuzione.

  1. Nella cartella docker-django-webapp-linux locale aprire il file app/templates/app/index.html.

  2. Cambiare il primo elemento HTML in modo che corrisponda al codice seguente.

    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <a class="navbar-brand" href="#">Azure App Service - Updated Here!</a>
        </div>
      </div>
    </nav>
    
  3. Salva le modifiche.

  4. Passare alla cartella docker-django-webapp-linux e ricreare l'immagine:

    docker build --tag appsvc-tutorial-custom-image .
    
  5. Aggiornare il tag dell'immagine alla versione più recente:

    docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    Sostituire <registry-name> con il nome del registro.

  6. Eseguire il push dell'immagine nel registro:

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    
  7. Al termine del push dell'immagine, il webhook invia una notifica al servizio app sul push e servizio app tenta di eseguire il pull dell'immagine aggiornata. Attendere alcuni minuti e quindi verificare che l'aggiornamento sia stato distribuito passando a https://<app-name>.azurewebsites.net.

X. Connettersi al contenitore con SSH

SSH consente la comunicazione sicura tra un contenitore e un client. Per abilitare la connessione SSH al contenitore, l'immagine personalizzata deve essere configurata appositamente. Quando il contenitore è in esecuzione, è possibile aprire una connessione SSH.

Configurare il contenitore per SSH

L'app di esempio usata in questa esercitazione ha già la configurazione necessaria nel Dockerfile, che installa il server SSH e imposta anche le credenziali di accesso. Questa sezione è unicamente informativa. Per connettersi al contenitore, passare alla sezione successiva.

ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get update \
  && apt-get install -y --no-install-recommends openssh-server \
  && echo "$SSH_PASSWD" | chpasswd 

Nota

Questa configurazione non consente connessioni esterne al contenitore. SSH è disponibile solo tramite il sito Kudu/SCM. Il sito Kudu/SCM viene autenticato con l'account Azure. root:Docker! non deve essere modificato SSH. SCM/KUDU userà le credenziali del portale di Azure. La modifica di questo valore genererà un errore quando si usa SSH.

Il Dockerfile copia anche il file sshd_config nella cartella /etc/ssh/ ed espone la porta 2222 sul contenitore:

COPY sshd_config /etc/ssh/

# ...

EXPOSE 8000 2222

La porta 2222 è una porta interna accessibile dai contenitori nella rete bridge di una rete virtuale privata.

Infine, lo script di ingresso init.sh avvia il server SSH.

#!/bin/bash
service ssh start

Aprire una connessione SSH a un contenitore

  1. Passare a https://<app-name>.scm.azurewebsites.net/webssh/host e accedere con l'account Azure. Sostituire <app-name> con il nome dell'app Web.

  2. Quando si esegue l'accesso, si viene reindirizzati a una pagina informativa per l'app Web. Selezionare SSH nella parte superiore della pagina per aprire la shell e usare i comandi.

    Ad esempio, è possibile esaminare i processi in esecuzione al suo interno usando il comando top.

XI. Pulire le risorse

Le risorse create in questo articolo potrebbero comportare costi continui. Per pulire le risorse, è sufficiente eliminare il gruppo di risorse che li contiene:

az group delete --name msdocs-custom-container-tutorial

Passaggi successivi

Contenuto dell'esercitazione:

  • Distribuire un'immagine personalizzata in un registro contenitori privato
  • Distribuire l'immagine personalizzata nel servizio app
  • Aggiornare e ridistribuire l'immagine
  • Accedere ai log di diagnostica
  • Connettersi al contenitore con SSH
  • Eseguire il push di un'immagine Docker personalizzata in Registro Azure Container
  • Distribuire l'immagine personalizzata in servizio app
  • Configurare le variabili di ambiente
  • Eseguire il pull dell'immagine in servizio app usando un'identità gestita
  • Accedere ai log di diagnostica
  • Abilitare CI/CD da Registro Azure Container a servizio app
  • Connettersi al contenitore con SSH

Nell'esercitazione successiva si apprenderà come proteggere l'app con un dominio personalizzato e un certificato.

In alternativa, consultare altre risorse: