Docker@2: Docker v2-Aufgabe

Erstellen oder Pushen von Docker-Images, Anmelden oder Abmelden, Starten oder Beenden von Containern oder Ausführen eines Docker-Befehls.

Erstellen oder pushen Sie Docker-Images, melden Sie sich an oder melden Sie sich ab, oder führen Sie einen Docker-Befehl aus.

Syntax

# Docker v2
# Build or push Docker images, login or logout, start or stop containers, or run a Docker command.
- task: Docker@2
  inputs:
  # Container Repository
    #containerRegistry: # string. Container registry. 
    #repository: # string. Optional. Use when command != login && command != logout && command != start && command != stop. Container repository. 
  # Commands
    command: 'buildAndPush' # 'buildAndPush' | 'build' | 'push' | 'login' | 'logout' | 'start' | 'stop'. Required. Command. Default: buildAndPush.
    Dockerfile: '**/Dockerfile' # string. Required when command = build || command = buildAndPush. Dockerfile. Default: **/Dockerfile.
    #buildContext: '**' # string. Optional. Use when command = build || command = buildAndPush. Build context. Default: **.
    #tags: '$(Build.BuildId)' # string. Optional. Use when command = build || command = push || command = buildAndPush. Tags. Default: $(Build.BuildId).
    #arguments: # string. Optional. Use when command != login && command != logout && command != buildAndPush. Arguments. 
    #addPipelineData: true # boolean. Add Pipeline metadata to image(s). Default: true.
    #addBaseImageData: true # boolean. Add base image metadata to image(s). Default: true.
    #container: # string. Optional. Use when command = start || command = stop. Container.
# Docker v2
# Build or push Docker images, login or logout, start or stop containers, or run a Docker command.
- task: Docker@2
  inputs:
  # Container Repository
    #containerRegistry: # string. Container registry. 
    #repository: # string. Optional. Use when command != login && command != logout && command != start && command != stop. Container repository. 
  # Commands
    command: 'buildAndPush' # 'buildAndPush' | 'build' | 'push' | 'login' | 'logout' | 'start' | 'stop'. Required. Command. Default: buildAndPush.
    Dockerfile: '**/Dockerfile' # string. Required when command = build || command = buildAndPush. Dockerfile. Default: **/Dockerfile.
    #buildContext: '**' # string. Optional. Use when command = build || command = buildAndPush. Build context. Default: **.
    #tags: '$(Build.BuildId)' # string. Optional. Use when command = build || command = push || command = buildAndPush. Tags. Default: $(Build.BuildId).
    #arguments: # string. Optional. Use when command != login && command != logout && command != buildAndPush. Arguments. 
    #addPipelineData: true # boolean. Add Pipeline metadata to image(s). Default: true.
    #container: # string. Optional. Use when command = start || command = stop. Container.
# Docker v2
# Build or push Docker images, login or logout, or run a Docker command.
- task: Docker@2
  inputs:
  # Container Repository
    #containerRegistry: # string. Container registry. 
    #repository: # string. Optional. Use when command != login && command != logout. Container repository. 
  # Commands
    command: 'buildAndPush' # 'buildAndPush' | 'build' | 'push' | 'login' | 'logout'. Required. Command. Default: buildAndPush.
    Dockerfile: '**/Dockerfile' # string. Required when command = build || command = buildAndPush. Dockerfile. Default: **/Dockerfile.
    #buildContext: '**' # string. Optional. Use when command = build || command = buildAndPush. Build context. Default: **.
    #tags: '$(Build.BuildId)' # string. Optional. Use when command = build || command = push || command = buildAndPush. Tags. Default: $(Build.BuildId).
    #arguments: # string. Optional. Use when command != login && command != logout && command != buildAndPush. Arguments. 
    #addPipelineData: true # boolean. Add Pipeline metadata to image(s). Default: true.
# Docker v2
# Build or push Docker images, login or logout, or run a Docker command.
- task: Docker@2
  inputs:
  # Container Repository
    #containerRegistry: # string. Container registry. 
    #repository: # string. Optional. Use when command != login && command != logout. Container repository. 
  # Commands
    command: 'buildAndPush' # 'buildAndPush' | 'build' | 'push' | 'login' | 'logout'. Required. Command. Default: buildAndPush.
    Dockerfile: '**/Dockerfile' # string. Required when command = build || command = buildAndPush. Dockerfile. Default: **/Dockerfile.
    #buildContext: '**' # string. Optional. Use when command = build || command = buildAndPush. Build context. Default: **.
    #tags: '$(Build.BuildId)' # string. Optional. Use when command = build || command = push || command = buildAndPush. Tags. Default: $(Build.BuildId).
    #arguments: # string. Optional. Use when command != login && command != logout && command != buildAndPush. Arguments.

Eingaben

containerRegistry - Containerregistrierung
string.

Name der Docker-Registrierungsdienstverbindung. Erforderlich für Befehle, die die Authentifizierung mit einer Registrierung ausführen.


repository - Containerrepository
string. Optional. Verwenden Sie , wenn command != login && command != logout && command != start && command != stop.

Gibt den Namen des Repositorys an.


repository - Containerrepository
string. Optional. Verwenden Sie , wenn command != login && command != logout.

Gibt den Namen des Repositorys an.


command - Befehl
string. Erforderlich. Zulässige Werte: buildAndPush, build, loginpush, logout, start, , , stop. Standardwert. buildAndPush.

Gibt den auszuführenden Docker-Befehl an.


command - Befehl
string. Erforderlich. Zulässige Werte: buildAndPush, build, push, login, logout. Standardwert. buildAndPush.

Gibt den auszuführenden Docker-Befehl an.


Dockerfile - Dockerfile
string. Erforderlich, wenn command = build || command = buildAndPush. Standardwert. **/Dockerfile.

Gibt den Pfad zur Docker-Datei an. Die Aufgabe verwendet die erste gefundene Docker-Datei, um das Image zu erstellen.


buildContext - Buildkontext
string. Optional. Verwenden Sie , wenn command = build || command = buildAndPush. Standardwert. **.

Gibt den Pfad zum Buildkontext an. Übergeben Sie ** , um das Verzeichnis anzugeben, das die Docker-Datei enthält.


tags - Schilder
string. Optional. Verwenden Sie , wenn command = build || command = push || command = buildAndPush. Standardwert. $(Build.BuildId).

Gibt eine Liste von Tags in separaten Zeilen an. Diese Tags werden in buildden Befehlen , push und buildAndPush verwendet.


arguments - Argumente
string. Optional. Verwenden Sie , wenn command != login && command != logout && command != buildAndPush.

Gibt zusätzliche Argumente an, die an den Docker-Client übergeben werden sollen. Wenn Sie den Wert buildAndPush für den Befehlsparameter verwenden, wird die Arguments-Eigenschaft ignoriert.

Beispiel: Verwenden des Buildbefehls --build-arg HTTP_PROXY=http://10.20.30.2:1234 --quiet.


addPipelineData - Hinzufügen von Pipelinemetadaten zu Bildern
boolean. Standardwert. true.

Standardmäßig werden Pipelinedaten wie Quellbranchname oder Build-ID hinzugefügt und helfen bei der Rückverfolgbarkeit. Sie können beispielsweise ein Image untersuchen, um herauszufinden, welche Pipeline das Image erstellt hat. Sie können dieses Standardverhalten deaktivieren.


addBaseImageData - Hinzufügen von Basisimagemetadaten zu Bildern
boolean. Standardwert. true.

Standardmäßig werden Basisimagedaten wie Der Name des Basisimages oder der Digest hinzugefügt und helfen bei der Rückverfolgbarkeit. Sie können dieses Standardverhalten deaktivieren.


container - Container
string. Optional. Verwenden Sie , wenn command = start || command = stop.

Gibt den Namen der Containerressource an, die gestartet oder beendet werden soll. Verwenden Sie diesen Befehl mit start den Befehlen und stop .


Aufgabensteuerungsoptionen

Alle Aufgaben verfügen zusätzlich zu ihren Aufgabeneingaben über Steuerungsoptionen. Weitere Informationen finden Sie unter Steuerungsoptionen und allgemeine Aufgabeneigenschaften.

Ausgabevariablen

Diese Aufgabe definiert die folgenden Ausgabevariablen, die Sie in Downstreamschritten, Aufträgen und Phasen verwenden können.

DockerOutput
Gibt den Pfad zu den Dateien an, die die Befehlsausgabe enthalten. Sie können zwei Dateipfade in separaten Zeilen für den buildAndPush Befehl und einen Dateipfad für jeden anderen Befehl auflisten.

Hinweise

Im Folgenden finden Sie die wichtigsten Vorteile der Verwendung der Docker-Aufgabe anstelle der direkten Verwendung der Docker-Clientbinärdatei in einem Skript.

  • Integration mit Docker-Registrierungsdienstverbindung : Die Aufgabe erleichtert die Verwendung einer Docker-Registrierungsdienstverbindung zum Herstellen einer Verbindung mit einer Containerregistrierung. Nach der Anmeldung können Sie Folgeaufgaben hinzufügen, die andere Aufgaben oder Skripts ausführen, indem Sie die anmeldung nutzen, die von der Docker-Aufgabe verwendet wird. Verwenden Sie beispielsweise die Docker-Aufgabe, um sich bei einer beliebigen Azure Container Registry anzumelden, und verwenden Sie dann eine andere Aufgabe oder ein anderes Skript, um ein Image zu erstellen und in die Registrierung zu übertragen.

  • Als Bezeichnungen hinzugefügte Metadaten : Der Task fügt dem Bild in den folgenden Bezeichnungen Metadaten im Zusammenhang mit der Rückverfolgbarkeit hinzu:

    • com.azure.dev.image.build.buildnumber
    • com.azure.dev.image.build.builduri
    • com.azure.dev.image.build.definitionname
    • com.azure.dev.image.build.repository.name
    • com.azure.dev.image.build.repository.uri
    • com.azure.dev.image.build.sourcebranchname
    • com.azure.dev.image.build.sourceversion
    • com.azure.dev.image.release.definitionname
    • com.azure.dev.image.release.releaseid
    • com.azure.dev.image.release.releaseweburl
    • com.azure.dev.image.system.teamfoundationcollectionuri
    • com.azure.dev.image.system.teamproject

Problembehandlung

Warum ignoriert die Docker-Aufgabe Argumente, die an den Befehl buildAndPush übergeben werden?

Eine docker-Aufgabe, die mit dem buildAndPush Befehl konfiguriert wurde, ignoriert die übergebenen Argumente, da sie für die internen Build- und Pushbefehle mehrdeutig werden. Sie können Ihren Befehl in separate Build- und Pushschritte aufteilen und die geeigneten Argumente übergeben. Sehen Sie sich z. B. diesen Stackoverflow-Beitrag an.

DockerV2 unterstützt nur die Verbindung mit dem Docker-Registrierungsdienst und nicht die ARM-Dienstverbindung. Wie kann ich einen vorhandenen Azure-Dienstprinzipal (SPN) für die Authentifizierung im Docker-Task verwenden?

Sie können eine Docker-Registrierungsdienstverbindung mit Ihren Azure SPN-Anmeldeinformationen erstellen. Wählen Sie die anderen unter Registrierungstyp aus, und geben Sie die Details wie folgt an:

Docker Registry:    Your container registry URL (eg. https://myacr.azurecr.io)
Docker ID:          Service principal client ID
Password:           Service principal key

Beispiele

Anmelden

Der folgende YAML-Codeausschnitt zeigt eine Containerregistrierungsanmeldung mithilfe einer Docker-Registrierungsdienstverbindung.

- task: Docker@2
  displayName: Login to ACR
  inputs:
    command: login
    containerRegistry: dockerRegistryServiceConnection1

Erstellen und Pushen

Ein Komfortbefehl namens buildAndPush ermöglicht das Erstellen und Pushen von Images in eine Containerregistrierung in einem einzigen Befehl.

Der folgende YAML-Codeausschnitt ist ein Beispiel für das Erstellen und Pushen mehrerer Tags eines Images an mehrere Registrierungen.

steps:
- task: Docker@2
  displayName: Login to ACR
  inputs:
    command: login
    containerRegistry: dockerRegistryServiceConnection1
- task: Docker@2
  displayName: Login to Docker Hub
  inputs:
    command: login
    containerRegistry: dockerRegistryServiceConnection2
- task: Docker@2
  displayName: Build and Push
  inputs:
    command: buildAndPush
    repository: contosoRepository # username/contosoRepository for DockerHub
    tags: |
      tag1
      tag2

Im obigen Codeausschnitt werden die Images contosoRepository:tag1 und contosoRepository:tag2 erstellt und an die Containerregistrierungen gepusht, die und dockerRegistryServiceConnection2entsprechendockerRegistryServiceConnection1.

Wenn Sie eine bestimmte authentifizierte Containerregistrierung erstellen und pushen möchten, anstatt alle authentifizierten Containerregistrierungen gleichzeitig zu erstellen und zu pushen, geben Sie die containerRegistry Eingabe explizit mit command: buildAndPush an:

steps:
- task: Docker@2
  displayName: Build and Push
  inputs:
    command: buildAndPush
    containerRegistry: dockerRegistryServiceConnection1
    repository: contosoRepository
    tags: |
      tag1
      tag2

Logout

Der folgende YAML-Codeausschnitt zeigt, wie Sie sich mithilfe einer Docker-Registrierungsdienstverbindung von einer Containerregistrierungsregistrierung abmelden.

- task: Docker@2
  displayName: Logout of ACR
  inputs:
    command: logout
    containerRegistry: dockerRegistryServiceConnection1

Starten/Beenden

Verwenden Sie diese Aufgabe, um Auftrags- und Dienstcontainer zu steuern. Diese Verwendung ist ungewöhnlich, wird aber gelegentlich unter bestimmten Umständen verwendet.

resources:
  containers:
  - container: builder
    image: ubuntu:18.04
steps:
- script: echo "I can run inside the container (it starts by default)"
  target:
    container: builder
- task: Docker@2
  inputs:
    command: stop
    container: builder
# any task beyond this point would not be able to target the builder container
# because it's been stopped

Andere Befehle und Argumente

Die Befehls- und Argumenteingaben werden verwendet, um zusätzliche Argumente für Build- oder Pushbefehle mithilfe der Docker-Clientbinärdatei zu übergeben, wie im Beispiel gezeigt.

steps:
- task: Docker@2
  displayName: Login to ACR
  inputs:
    command: login
    containerRegistry: dockerRegistryServiceConnection1
- task: Docker@2
  displayName: Build
  inputs:
    command: build
    repository: contosoRepository # username/contosoRepository for DockerHub
    tags: tag1
    arguments: --secret id=mysecret,src=mysecret.txt

Hinweis

Die Argumenteingabe wird für alle Befehle mit Ausnahme buildAndPushvon ausgewertet. buildAndPush ist ein Komfortbefehl (build gefolgt von push), arguments die Eingabe wird ignoriert, wenn sie verwendet wird.

Anforderungen

Anforderung Beschreibung
Pipelinetypen YAML, Klassischer Build, klassische Version
Wird ausgeführt auf Agent, DeploymentGroup
Forderungen Keine
Capabilities Diese Aufgabe erfüllt keine Anforderungen an nachfolgende Aufgaben im Auftrag.
Befehlseinschränkungen Any
Einstellbare Variablen Any
Agent-Version 2.172.0 oder höher
Aufgabenkategorie Entwickeln
Anforderung Beschreibung
Pipelinetypen YAML, Klassischer Build, klassische Version
Wird ausgeführt auf Agent, DeploymentGroup
Forderungen Keine
Capabilities Diese Aufgabe erfüllt keine Anforderungen an nachfolgende Aufgaben im Auftrag.
Befehlseinschränkungen Any
Einstellbare Variablen Any
Agent-Version Alle unterstützten Agent-Versionen.
Aufgabenkategorie Entwickeln