Teilen über


Schnellstart: Erstellen eines Containerimages zum Bereitstellen von Apps mit Azure Pipelines

Azure DevOps Services

In dieser Schnellstartanleitung wird erläutert, wie Sie ein Containerimage für die App-Bereitstellung mithilfe von Azure Pipelines erstellen. Zum Erstellen dieses Images benötigen Sie lediglich ein Dockerfile in Ihrem Repository. Sie können Linux- oder Windows-Container basierend auf dem Agent erstellen, den Sie in Ihrer Pipeline verwenden.

Voraussetzungen

  • Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
  • Ein GitHub-Konto. Falls Sie noch nicht über ein Konto verfügen, können Sie sich kostenlos registrieren.
  • Ein Azure-Pipeline-Windows- oder Linux-Agent, auf dem Docker installiert ist.

Forken des Beispielrepositorys

Wechseln Sie in Ihrem Browser zum folgenden Beispiel-Repository und forken Sie es zu Ihrem GitHub-Konto.

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

Erstellen eines Linux- oder Windows-Images

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und wechseln Sie zu Ihrem Projekt.

  2. Wechseln Sie zu Pipelines und wählen Sie Neue Pipeline oder Pipeline erstellen aus, wenn Sie in diesem Projekt die erste Pipeline erstellen.

  3. Wählen Sie GitHub als Speicherort für Ihren Quellcode aus.

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

    • Wenn Sie zu GitHub umgeleitet werden, um sich anzumelden, geben Sie Ihre GitHub-Anmeldeinformationen ein.
    • Wenn Sie zu GitHub umgeleitet werden, um die Azure Pipelines-App zu installieren, wählen Sie Zustimmen und installieren aus.
  5. Ersetzen Sie den Inhalt von azure-pipelines.yml durch den folgenden Code. Je nachdem, ob Sie eine Linux- oder Windows-App bereitstellen, stellen Sie sicher, dass Sie vmImage auf ubuntu-latest bzw. windows-latest festlegen.

     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. Wenn Sie fertig sind, klicken Sie auf Speichern und ausführen.

  7. Wenn Sie Ihrem Repository die Datei azure-pipelines.yml hinzufügen, werden Sie aufgefordert, eine Commitnachricht hinzuzufügen. Geben Sie eine Nachricht ein und wählen Sie anschließend Speichern und ausführen aus.

Achten Sie bei der Verwendung von selbstgehosteten Agents darauf, dass Docker auf dem Host des Agents installiert ist und die Docker-Engine/der Docker-Daemon mit erhöhten Rechten ausgeführt wird.

Docker muss auf dem Host des Agents installiert sein und die Docker-Engine/der Docker-Daemon muss mit erhöhten Rechten ausgeführt werden, damit Sie das Bild erstellen können. Führen Sie die folgenden Schritte aus, um Ihre Pipeline mithilfe des YAML-Pipeline-Editors zu erstellen.

  1. Wechseln Sie zu Ihrer Sammlung und erstellen Sie ein Projekt.
  2. Wählen Sie in Ihrem Projekt Pipelines aus.
  3. Wählen Sie Pipeline erstellen aus.
  4. Wählen Sie als Standort Ihres Quellcodes GitHub Enterprise Server aus.
  5. Wenn Sie Azure Pipelines noch autorisiert haben, eine Verbindung zu Ihrem GitHub Enterprise Server-Konto herzustellen, dann tun Sie es jetzt.
    1. Wählen Sie Verbindung zu GitHub Enterprise Server herstellen aus.
    2. Geben Sie Ihre Kontodetails ein und wählen Sie anschließend Überprüfen und speichern aus.
  6. Wählen Sie Ihr Repository aus. Wenn Sie zu GitHub umgeleitet werden, um die Azure Pipelines-App zu installieren, wählen Sie Zustimmen und installieren aus.
  7. Wählen Sie die Vorlage Ein Docker-Image erstellen aus, um Ihre Pipeline zu konfigurieren.
  8. Ersetzen Sie im YAML-Pipeline-Editor den Inhalt der YAML-Datei durch den folgenden Code. Ersetzen Sie den Poolnamen mit dem Namen des Pools, der Ihren selbstgehosteten Agent mit Docker-Funktion enthält.
# 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. Klicken Sie auf Speichern und ausführen.
  2. Wählen Sie auf der Seite Speichern und ausführen erneut die Option Speichern und ausführen aus.

Weitere Informationen zum Erstellen von Docker-Images finden Sie in der Docker-Aufgabe, die in dieser Beispielanwendung verwendet wurde. Sie können Docker-Befehle auch direkt mithilfe einer Befehlszeilenaufgabe aufrufen.

Die Containerimages werden auf dem Agent erstellt und gespeichert. Sie können Ihr Image in Google Container Registry, Docker Hub oder Azure Container Registry pushen. Weitere Informationen finden Sie unter Image in Docker Hub oder Google Container Registry pushen oder Image in Azure Container Registry pushen.

Bereinigen von Ressourcen

Wenn Sie nicht beabsichtigen, diese Anwendung weiterhin zu verwenden, löschen Sie die Pipeline und das Coderepository.

Häufig gestellte Fragen

Welche Agents kann ich verwenden, um Containerimages zu erstellen?

  • Sie können Linux-Containerimages mit von Microsoft gehosteten Ubuntu-Agents oder selbstgehosteten Linux-basierten Agents erstellen.

  • Sie können Windows-Containerimages mit von Microsoft gehosteten Windows-Agents oder selbstgehosteten Windows-basierten Agents erstellen. Alle von Microsoft gehosteten, plattformbasierten Windows-Agents werden mit der Moby-Engine und dem -Client ausgeliefert, die für Docker-Builds benötigt werden.

  • Sie können derzeit keine von Microsoft gehosteten macOS-Agents verwenden, um Containerimages zu erstellen, weil die für die Erstellung der Images erforderliche Moby-Engine in diesen Agents nicht vorinstalliert ist.

Weitere Informationen finden Sie unter Windows- und Linux-Agent-Optionen, die für von Microsoft gehostete Agents verfügbar sind.

Welche zwischengespeicherten Docker-Images sind auf gehosteten Agents verfügbar?

Einige häufig verwendete Images werden auf Microsoft-gehosteten Agents zwischengespeichert. Auf diese Weise kann für jede Aufgabe der Zeitaufwand für das Abrufen von Docker-Images aus der Containerregistrierung reduziert werden.

Wie lege ich die BuildKit-Variable für meine Docker-Builds fest?

BuildKit führt Buildverbesserungen rund um die Leistung, Speicherverwaltung, Featurefunktionalität und Sicherheit ein. BuildKit wird derzeit auf Windows-Hosts nicht unterstützt.

Um Docker-Builds mit BuildKit zu aktivieren, legen Sie die DOCKER_BUILDKIT-Variable fest.

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

Wie kann ich einen selbstgehosteten Agent verwenden?

Docker muss installiert sein und die Engine/der Daemon muss auf dem Host des Agents ausgeführt werden. Wenn Docker nicht auf dem Host des Agents installiert ist, können Sie der Pipeline den Docker-Installertask hinzufügen. Sie müssen den Docker-Installertask vor dem Docker-Task hinzufügen.

Wie kann ich einen skriptbasierten Docker-Build erstellen, anstatt die Docker-Aufgabe zu verwenden?

Sie können den build-Befehl oder einen anderen Docker-Befehl verwenden.

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

Mit diesem Befehl wird ein Image erstellt, das dem mit der Docker-Aufgabe erstellten Image entspricht. Intern ruft die Docker-Aufgabe die Docker-Binärdatei in einem Skript auf und fügt ein paar weitere Befehle zusammen, um weitere Vorteile zu bieten. Informieren Sie sich weiter über Docker-Aufgaben.

Kann ich das Zwischenspeichern von Ebenen während Builds in Azure Pipelines wiederverwenden?

Wenn Sie von Microsoft gehostete Agents verwenden, wird jeder Auftrag basierend auf dem von den Repositoryvorlagen azure-pipelines-image-generation generierten Image auf einen neu bereitgestellten virtuellen Computer verteilt. Diese virtuellen Computer werden nach Abschluss des Auftrags bereinigt. Diese kurze Lebensdauer verhindert die erneute Verwendung dieser virtuellen Computer für nachfolgende Aufträge und die Wiederverwendung von zwischengespeicherten Docker-Ebenen. Als Problemumgehung können Sie einen mehrstufigen Build einrichten, der zwei Images generiert und diese zu einem frühen Zeitpunkt an eine Imageregistrierung pusht. Anschließend können Sie Docker mit der --cache-from-Anweisung anweisen, diese Images als Cachequelle zu verwenden.

Wenn Sie selbstgehostete Agents verwenden, können Sie Docker-Ebenen ohne Problemumgehungen zwischenspeichern, da das Problem der kurzen Lebensdauer nicht für diese Agents gilt.

Wie erstelle ich Linux-Containerimages für andere Architekturen als x64?

Wenn Sie von Microsoft gehostete Linux-Agents verwenden, erstellen Sie Linux-Containerimages für die x64-Architektur. Um Images für andere Architekturen (z. B. x86- oder ARM-Prozessor) zu erstellen, können Sie einen Computeremulator wie QEMU verwenden.

Die folgenden Schritte zeigen, wie Sie mithilfe von QEMU ein ARM-Prozessorcontainerimage erstellen:

  1. Erstellen Sie Ihr Dockerfile mit einem Basisimage, das der Zielarchitektur entspricht:

    FROM arm64v8/alpine:latest
    
  2. Führen Sie das folgende Skript in Ihrem Auftrag aus, bevor Sie das Image erstellen:

    # 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
    

Weitere Informationen finden Sie unter qemu-user-static auf GitHub.

Wie kann ich Tests ausführen und Testergebnisse für containerisierte Anwendungen veröffentlichen?

Verschiedene Optionen zum Testen containerisierter Anwendungen und Veröffentlichen der resultierenden Testergebnisse finden Sie unter Aufgabe zum Veröffentlichen von Testergebnissen.

Nächste Schritte

Nachdem Sie Ihr Containerimage erstellt haben, pushen Sie das Image an Azure Container Registry, Docker Hub oder Google Container Registry. Wenn Sie erfahren möchten, wie Sie ein Image an eine Containerregistrierung pushen, fahren Sie mit einem der folgenden Artikel fort: