Freigeben über


Erstellen und Veröffentlichen von Docker-Images in Azure Container Registry

Azure DevOps Services | Azure DevOps Server 2022

Mithilfe von Azure Pipelines können Sie einen Pipelineworkflow einrichten, um Ihre Docker-Images zu erstellen und in Azure Container Registry zu veröffentlichen. In diesem Artikel wird Folgendes behandelt:

  • Erstellen einer Azure-Containerregistrierung
  • Einrichten eines selbstgehosteten Agents auf einer Azure-VM
  • Einrichten der verwalteten Dienstidentität
  • Erstellen einer Dienstverbindung für die Docker-Registrierung
  • Erstellen und Veröffentlichen Ihres Images in Azure Container Registry

Voraussetzungen

Abrufen des Codes

Forken oder klonen Sie die Beispiel-App, um dieses Tutorial zu verwenden.

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

Erstellen einer Azure-Containerregistrierung

  1. Navigieren Sie zum Azure-Portal.

  2. Wählen Sie im linken Navigationsbereich Ressource erstellen, dann Container und dann Containerregistrierung aus.

  3. Wählen Sie Ihr Abonnement und dann Ihre Ressourcengruppe aus, oder erstellen Sie ein neues Abonnement.

  4. Geben Sie einen Registrierungsnamen für Ihre Containerregistrierung ein. Der Registrierungsname muss innerhalb von Azure eindeutig sein und mindestens 5 Zeichen enthalten.

  5. Wählen Sie Ihren bevorzugten Standort und die SKU aus, und wählen Sie dann Überprüfen + erstellen aus.

  6. Überprüfen Sie Ihre Einstellungen, und wählen Sie dann Erstellen aus, wenn Sie fertig sind.

Einrichten einer selbstgehosteten Agent-VM

Um eine verwaltete Dienstidentität mit Azure Pipelines zum Veröffentlichen von Docker-Images in Azure Container Registry zu verwenden, müssen Sie Ihren eigenen selbstgehosteten Agent auf einer Azure-VM einrichten.

Erstellen einer VM

  1. Navigieren Sie zum Azure-Portal.

  2. Wählen Sie im linken Navigationsbereich Ressource erstellen und dann Virtueller Computer –>Erstellen aus.

  3. Wählen Sie Ihr Abonnement und dann die Ressourcengruppe aus, mit der Sie Ihre Containerregistrierung erstellt haben.

  4. Geben Sie Ihrem virtuellen Computer einen Namen, und wählen Sie ein Image aus.

  5. Geben Sie Ihren Benutzernamen und Ihr Kennwort ein, und wählen Sie dann Überprüfen + erstellen aus.

  6. Überprüfen Sie Ihre Einstellungen, und wählen Sie dann Erstellen aus, wenn Sie fertig sind.

  7. Klicken Sie auf Zu Ressource wechseln, wenn die Bereitstellung abgeschlossen ist.

Erstellen eines Agent-Pools

  1. Wählen Sie in Ihrem Azure DevOps-Projekt das Zahnradsymbol Zahnradsymbol aus, um zu Ihren Projekteinstellungen zu navigieren.

  2. Wählen Sie Agent-Pools und dann Pool hinzufügen aus.

  3. Wählen Sie Neu und dann im Dropdownmenü Pooltyp die Option Selbstgehostet aus.

  4. Geben Sie Ihrem Pool einen Namen, und aktivieren Sie dann das Kontrollkästchen Allen Pipelines die Zugriffsberechtigung gewähren.

  5. Wählen Sie Erstellen, wenn Sie fertig sind.

  6. Wählen Sie nun den Pool aus, den Sie gerade erstellt haben, und wählen Sie dann Neuer Agent aus.

  7. Sie verwenden die Anweisungen in diesem Fenster, um Ihren Agent auf dem virtuellen Computer einzurichten, den Sie zuvor erstellt haben. Wählen Sie die Schaltfläche Kopieren aus, um den Downloadlink in die Zwischenablage zu kopieren.

    Screenshot: Einrichten eines Agents

Erstellen eines persönlichen Zugriffstokens

  1. Wählen Sie in Ihrem Azure DevOps-Projekt die Option Benutzereinstellungen und dann Persönliche Zugriffstoken aus.

  2. Wählen Sie Neues Token aus, um ein neues persönliches Zugriffstoken zu erstellen.

  3. Geben Sie einen Namen für Ihr PAT ein, und wählen Sie dann ein Ablaufdatum aus.

  4. Wählen Sie unter Bereiche die Option Benutzerdefiniert und dann Alle Bereiche anzeigen aus.

  5. Wählen Sie Agent-Pools –>Lesen und verwalten und Bereitstellungsgruppen –>Lesen und verwalten aus.

  6. Wählen Sie Erstellen aus, wenn Sie fertig sind, und speichern Sie Ihr PAT an einem sicheren Ort.

Einrichten eines selbstgehosteten Agent

  1. Stellen Sie in Azure-Portal eine Verbindung mit Ihrem virtuellen Computer her.

  2. Führen Sie für eine PowerShell-Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus, um den Agent herunterzuladen.

    Invoke-WebRequest -URI <YOUR_AGENT_DOWNLOAD_LINK> -UseBasicParsing  -OutFile <FILE_PATH> 
    ##Example: Invoke-WebRequest -URI https://vstsagentpackage.azureedge.net/agent/2.213.2/vsts-agent-win-x64-2.213.2.zip -OutFile C:\vsts-agent-win-x64-2.213.2.zip
    
  3. Führen Sie den folgenden Befehl aus, um Ihren Agent zu extrahieren und zu erstellen.

    mkdir agent ; cd agent
    Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("<FILE_PATH>", "$PWD")
    
  4. Führen Sie den folgenden Befehl aus, um mit dem Konfigurieren Ihres Agents zu beginnen.

    .\config.cmd
    
  5. Geben Sie Ihre Server-URL ein, wenn Sie zur Eingabe aufgefordert werden. Beispiel: https://dev.azure.com/fabrikamFiber

  6. Drücken Sie die EINGABETASTE, wenn Sie zur Eingabe des Authentifizierungstyps aufgefordert werden, um die PAT-Authentifizierung auszuwählen.

  7. Fügen Sie Ihr persönliches Zugriffstoken ein, das Sie zuvor erstellt haben, und drücken Sie dann die EINGABETASTE.

  8. Geben Sie den Namen Ihres Agent-Pools und dann Ihren Agent-Namen ein.

  9. Behalten Sie den Standardwert für den Arbeitsordner bei, und geben Sie dann Y ein, wenn Sie Ihren Agent als Dienst ausführen möchten.

    Screenshot: Einrichten eines Agents auf einer Azure-VM

  10. Nachdem der Agent bereit ist, auf Aufträge zu lauschen, installieren Sie Docker auf Ihrer VM. Führen Sie den folgenden Befehl aus, um Docker herunterzuladen.

    Invoke-WebRequest -URI https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe -OutFile <DOWNLOAD_PATH>
    
  11. Navigieren Sie zu Ihrem Downloadpfad, und führen Sie dann den folgenden Befehl aus, um Docker zu installieren und zu starten.

    Start-Process 'Docker%20Desktop%20Installer.exe' -Wait install
    
  12. Navigieren Sie nun zurück zu Ihrem Agent-Ordner, und führen Sie die cmd-Datei aus, um den Agent auf Ihrer Azure-VM auszuführen.

    .\run.cmd
    
  13. Ihr Agent sollte jetzt in Ihrem Agent-Pool –>Agents im Azure DevOps-Portal aufgeführt sein.

    Screenshot: Verfügbarer Agent im Tab „Agents“

Einrichten der verwalteten Identität

  1. Navigieren Sie im Azure-Portal zu der VM, die Sie zuvor erstellt haben.

  2. Wählen Sie im linken Navigationsbereich Identität aus, und aktivieren Sie dann die systemseitig zugewiesene Identität.

  3. Wählen Sie Speichern aus, wenn Sie fertig sind, und bestätigen Sie dann Ihre Auswahl.

    Screenshot: Aktivieren der systemseitig zugewiesenen Identität

  4. Wählen Sie Azure-Rollenzuweisungen und dann Rollenzuweisung hinzufügen aus.

  5. Wählen Sie im Dropdownmenü Bereich die Option Ressourcengruppe aus.

  6. Wählen Sie Ihr Abonnement und Ihre Ressourcengruppe und dann die Rolle AcrPush aus.

  7. Wiederholen Sie die Schritte 5 und 6, um die Rolle AcrPull hinzuzufügen.

    Screenshot: Einrichten der Rollen „AcrPull“ und „AcrPush“

Erstellen einer Dienstverbindung für die Docker-Registrierung

  1. Wählen Sie in Ihrem Azure DevOps-Projekt das Zahnradsymbol Zahnradsymbol aus, um zu Ihren Projekteinstellungen zu navigieren.

  2. Wählen Sie im linken Bereich Dienstverbindungen aus.

  3. Wählen Sie Neue Dienstverbindung und dann Docker-Registrierung aus, und klicken Sie dann auf Weiter.

  4. Wählen Sie Azure Container Registry und dann verwaltete Dienstidentität als Authentifizierungstyp aus.

  5. Geben Sie Abonnement-ID, Abonnementname und den Anmeldeserver für die Azure-Containerregistrierung ein. Fügen Sie die systemseitig zugewiesene Mandanten-ID Ihrer VM, die Sie im vorherigen Schritt erstellt haben, in das Textfeld Mandanten-ID ein.

  6. Geben Sie einen Namen für Ihre Dienstverbindung ein, und aktivieren Sie dann das Kontrollkästchen Allen Pipelines die Zugriffsberechtigung gewähren. Um diese Option auszuwählen, benötigen Sie die Dienstverbindungsadministratorrolle.

  7. Wählen Sie Speichern aus, wenn Sie fertig sind.

    Screenshot: Einrichten von Dienstverbindungs-MSI für eine Docker-Registrierung

Erstellen und Veröffentlichen in Azure Container Registry

  1. Wählen Sie in Ihrem Azure DevOps-Projekts die Option Pipelines und anschließend Pipeline erstellen aus.

  2. Wählen Sie den Dienst aus, der Ihren Quellcode hostet (Azure Repos, GitHub usw.).

  3. Wählen Sie Ihr Repository und dann Starterpipeline aus.

  4. Löschen Sie die yaml-Standardpipeline, und verwenden Sie den folgenden Codeausschnitt:

    trigger:
    - main
    
    variables:
      dockerRegistryServiceConnection: '<SERVICE_CONNECTION_NAME>'
      imageRepository: '<IMAGE_NAME>'
      dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
      tag: '$(Build.BuildId)'
    
    stages:
    - stage: Build
      displayName: Build and publish stage
      jobs:
      - job: Build
        displayName: Build job
        pool:
          name: '<YOUR_AGENT_POOL_NAME>'
        steps:
        - task: DockerInstaller@0
          inputs:
            dockerVersion: '17.09.0-ce'
    
        - task: Docker@2
          displayName: Build and publish image to Azure Container Registry
          inputs:
            command: buildAndPush
            containerRegistry: $(dockerRegistryServiceConnection)
            repository: $(imageRepository)
            dockerfile: $(dockerfilePath)
            tags: |
              $(tag)
    
  5. Sobald die Pipelineausführung abgeschlossen ist, können Sie Ihr Image in Azure überprüfen. Navigieren Sie zu Ihrer Azure Container Registry-Instanz im Azure-Portal, und wählen Sie dann Repositorys aus.

    Screenshot: das Image im Azure-Portal

Bereinigen von Ressourcen

Wenn Sie diese Anwendung nicht weiter verwenden möchten, löschen Sie die Ressourcengruppe, um weitere Gebühren zu vermeiden.

az group delete --name myapp-rg