Guida introduttiva: Creare un'immagine del contenitore per distribuire app con Azure Pipelines

Servizi di Azure DevOps

Questa guida introduttiva illustra come creare un'immagine del contenitore per la distribuzione di app con Azure Pipelines. Per compilare questa immagine, è sufficiente un Dockerfile nel repository. È possibile compilare contenitori Linux o Windows, in base all'agente usato nella pipeline.

Prerequisiti

  • Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
  • Un account GitHub. Se non è disponibile, iscriversi per riceverne uno gratuito.
  • Un agente Windows o Linux della pipeline di Azure con Docker installato.

Creare una copia tramite fork del repository di esempi

Nel browser passare al repository di esempio seguente e copiarlo tramite fork all'account GitHub.

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Creare un'immagine Linux o Windows

  1. Accedere all'organizzazione di Azure DevOps e passare al progetto.

  2. Passare a Pipeline e selezionare Nuova pipeline o Crea pipeline se si crea la prima pipeline nel progetto.

  3. Selezionare GitHub come percorso per il codice sorgente.

  4. Selezionare il repository e quindi selezionare Starter pipeline (Pipeline di avvio).

    • Se si viene reindirizzati a GitHub per accedere, immettere le credenziali di GitHub.
    • Se si viene reindirizzati a GitHub per installare l'app Azure Pipelines, selezionare Approva e installa.
  5. Sostituire il contenuto di azure-pipelines.yml con il codice seguente. In base al fatto che si distribuisca un'app Linux o Windows, assicurarsi di impostare rispettivamente su vmImageubuntu-latest o windows-latest.

     trigger:
     - main
    
     pool:
       vmImage: 'ubuntu-latest' 
    
     variables:
       imageName: 'pipelines-javascript-docker'
    
     steps:
     - task: Docker@2
       displayName: Build an image
       inputs:
         repository: $(imageName)
         command: build
         Dockerfile: app/Dockerfile
    
  6. Al termine, selezionare Salva ed esegui.

  7. Quando si aggiunge il file azure-pipelines.yml al repository, viene richiesto di aggiungere un messaggio di commit. Immettere un messaggio e quindi selezionare Salva ed esegui.

Quando si usano agenti self-hosted, assicurarsi che Docker sia installato nell'host dell'agente e che il motore/daemon Docker sia in esecuzione con privilegi elevati.

Per compilare l'immagine, Docker deve essere installato nell'host dell'agente e il motore/daemon Docker deve essere in esecuzione con privilegi elevati. Usare la procedura seguente per creare la pipeline usando l'editor della pipeline YAML.

  1. Passare alla raccolta e creare un progetto.
  2. Nel progetto selezionare Pipeline.
  3. Seleziona Crea pipeline.
  4. Selezionare GitHub Enterprise Server come percorso per il codice sorgente.
  5. Se non è già stato fatto, autorizzare Azure Pipelines a connettersi all'account GitHub Enterprise Server.
    1. Selezionare Connessione in GitHub Enterprise Server.
    2. Immettere i dettagli dell'account e quindi selezionare Verifica e salva.
  6. Selezionare il repository. Se si viene reindirizzati a GitHub per installare l'app Azure Pipelines, selezionare Approva e installa.
  7. Per configurare la pipeline, selezionare il modello Di compilazione di un'immagine Docker.
  8. Nell'editor della pipeline YAML sostituire il contenuto del file YAML con il codice seguente. Sostituire il nome del pool con il nome del pool che contiene l'agente self-hosted con la funzionalità Docker.
# Docker
# Build a Docker image
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker

trigger:
- main

pool:
  name: default
  demands: docker

variables:
  imageName: 'pipelines-javascript-docker'

steps:
 - task: Docker@2
   displayName: Build an image
   inputs:
     repository: $(imageName)
     command: build
     Dockerfile: '$(Build.SourcesDirectory)/app/Dockerfile'

  1. Seleziona Salva ed Esegui.
  2. Nella pagina Salva ed esegui selezionare Salva ed esegui di nuovo.

Per altre informazioni sulla creazione di immagini Docker, vedere l'attività Docker usata da questa applicazione di esempio. È anche possibile richiamare direttamente i comandi Docker usando un'attività della riga di comando.

Le immagini del contenitore vengono compilate e archiviate nell'agente. È possibile eseguire il push dell'immagine in Registro Contenitori Google, nell'hub Docker o Registro Azure Container. Per altre informazioni, vedere Eseguire il push di un'immagine nell'hub Docker o in Registro Contenitori Google oppure eseguire il push di un'immagine in Registro Azure Container.

Pulire le risorse

Se non si prevede di continuare a usare questa applicazione, eliminare la pipeline e il repository di codice.

Domande frequenti

Quali agenti è possibile usare per compilare le immagini del contenitore?

  • È possibile compilare immagini del contenitore Linux usando agenti Ubuntu ospitati da Microsoft o agenti self-hosted basati sulla piattaforma Linux.

  • È possibile compilare immagini del contenitore Windows usando agenti Windows ospitati da Microsoft o agenti self-hosted basati sulla piattaforma Windows. Tutti gli agenti basati sulla piattaforma Windows ospitati da Microsoft vengono forniti con il motore Moby e il client necessari per le compilazioni Docker.

  • Attualmente non è possibile usare gli agenti macOS ospitati da Microsoft per compilare immagini del contenitore perché il motore Moby necessario per la compilazione delle immagini non è preinstallato in questi agenti.

Per altre informazioni, vedere le Opzioni dell'agente Windows e Linux disponibili con gli agenti ospitati da Microsoft.

Quali immagini Docker preinstallate sono disponibili in agenti ospitati?

Per evitare di trascorrere intervalli lunghi di pull delle immagini Docker per ogni processo dal registro contenitori, alcune immagini comunemente usate vengono preinstallate negli agenti ospitati da Microsoft. Per l'elenco delle immagini precached disponibili, vedere Il software incluso per le immagini di vm disponibili nel repository azure-pipelines-image-generation.

Ricerca per categorie impostare la variabile BuildKit per le build Docker?

BuildKit introduce miglioramenti alla compilazione per prestazioni, gestione dell'archiviazione, funzionalità e sicurezza. BuildKit non è attualmente supportato in host Windows.

Per abilitare le compilazioni Docker usando BuildKit, impostare la variabile DOCKER_BUILDKIT .

trigger:
- main
   
pool:
  vmImage: 'ubuntu-latest'
   

variables:
  imageName: 'pipelines-javascript-docker'
  DOCKER_BUILDKIT: 1
    
steps:
- task: Docker@2
  displayName: Build an image
  inputs:
    repository: $(imageName)
    command: build
    Dockerfile: app/Dockerfile

Come è possibile usare un agente self-hosted?

Docker deve essere installato e il motore/daemon in esecuzione nell'host dell'agente. Se Docker non è installato nell'host dell'agente, è possibile aggiungere l'attività del programma di installazione Docker alla pipeline. È necessario aggiungere l'attività Docker Installer prima dell'attività Docker.

Come è possibile creare una compilazione Docker basata su script anziché usare l'attività Docker?

È possibile usare il build comando o qualsiasi altro comando Docker.

docker build -f Dockerfile -t foobar.azurecr.io/hello:world .

Questo comando crea un'immagine equivalente a un'immagine compilata con l'attività Docker. Internamente, l'attività Docker chiama il file binario Docker in uno script e unisce alcuni altri comandi per offrire alcuni altri vantaggi. Altre informazioni sull'attività Docker.

È possibile riutilizzare la memorizzazione nella cache dei livelli durante le compilazioni in Azure Pipelines?

Se si usano agenti ospitati da Microsoft, ogni processo viene inviato a una macchina virtuale di cui è stato appena effettuato il provisioning, in base all'immagine generata dai modelli di repository azure-pipelines-image-generation. Queste macchine virtuali vengono pulite al termine del processo. Questa durata temporanea impedisce il riutilizzo di queste macchine virtuali per i processi successivi e il riutilizzo dei livelli Docker memorizzati nella cache. Come soluzione alternativa, è possibile configurare una compilazione a più fasi che produce due immagini e le inserisce in un registro immagini in una fase iniziale. È quindi possibile indicare a Docker di usare queste immagini come origine della cache con l'argomento --cache-from .

Se si usano agenti self-hosted, è possibile memorizzare nella cache i livelli Docker senza soluzioni alternative perché il problema temporaneo della durata non si applica a questi agenti.

Come è possibile compilare immagini del contenitore Linux per architetture diverse da x64?

Quando si usano agenti Linux ospitati da Microsoft, creare immagini del contenitore Linux per l'architettura x64. Per creare immagini per altre architetture, ad esempio x86 o processore ARM, è possibile usare un emulatore di computer, ad esempio QEMU.

La procedura seguente illustra come creare un'immagine del contenitore del processore ARM usando QEMU:

  1. Creare il Dockerfile con un'immagine di base corrispondente all'architettura di destinazione:

    FROM arm64v8/alpine:latest
    
  2. Eseguire lo script seguente nel processo prima di compilare l'immagine:

    # register QEMU binary - this can be done by running the following image
    docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # build your image
    

Per altre informazioni, vedere qemu-user-static in GitHub.

Ricerca per categorie eseguire test e pubblicare i risultati dei test per le applicazioni in contenitori?

Per diverse opzioni per il test di applicazioni in contenitori e la pubblicazione dei risultati dei test risultanti, vedere Pubblicare l'attività Risultati test.

Passaggi successivi

Dopo aver compilato l'immagine del contenitore, eseguire il push dell'immagine in Registro Azure Container, nell'hub Docker o nel registro Contenitori Google. Per informazioni su come eseguire il push di un'immagine in un registro contenitori, continuare con uno degli articoli seguenti: