Docker@2: tarea de Docker v2

Compile o inserte imágenes de Docker, inicie sesión o cierre sesión, inicie o detenga contenedores o ejecute un comando de Docker.

Compile o inserte imágenes de Docker, inicie sesión o cierre sesión o ejecute un comando de Docker.

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.

Entradas

containerRegistry - Registro de contenedor
string.

Nombre de la conexión de servicio de registro de Docker. Obligatorio para los comandos que realizan la autenticación con un registro.


repository - Repositorio de contenedores
string. Opcional. Use cuando command != login && command != logout && command != start && command != stop.

Especifica el nombre del repositorio.


repository - Repositorio de contenedores
string. Opcional. Use cuando command != login && command != logout.

Especifica el nombre del repositorio.


command - Comando
string. Obligatorio. Valores permitidos: buildAndPush, build, push, login, logout, start, . stop Valor predeterminado: buildAndPush.

Especifica el comando de Docker que se va a ejecutar.


command - Comando
string. Obligatorio. Valores permitidos: buildAndPush, build, push, login, . logout Valor predeterminado: buildAndPush.

Especifica el comando de Docker que se va a ejecutar.


Dockerfile - Dockerfile
string. Necesario cuando command = build || command = buildAndPush. Valor predeterminado: **/Dockerfile.

Especifica la ruta de acceso al archivo de Docker. La tarea usa el primer archivo de Docker que busca para compilar la imagen.


buildContext - Contexto de compilación
string. Opcional. Use cuando command = build || command = buildAndPush. Valor predeterminado: **.

Especifica la ruta de acceso al contexto de compilación. Pase ** para indicar el directorio que contiene el archivo de Docker.


tags - Etiquetas
string. Opcional. Use cuando command = build || command = push || command = buildAndPush. Valor predeterminado: $(Build.BuildId).

Especifica una lista de etiquetas separadas por comas. Estas etiquetas se usan en buildlos comandos , push y buildAndPush .


arguments - Argumentos
string. Opcional. Use cuando command != login && command != logout && command != buildAndPush.

Especifica argumentos adicionales que se van a pasar al cliente de Docker. Si usa el valor buildAndPush del parámetro command, se omite la propiedad arguments.

Ejemplo: Uso del comando build, --build-arg HTTP_PROXY=http://10.20.30.2:1234 --quiet.


addPipelineData - Agregar metadatos de canalización a imágenes
boolean. Valor predeterminado: true.

De forma predeterminada, se agregan datos de canalización como el nombre de la rama de origen o el identificador de compilación y ayudan con la rastreabilidad. Por ejemplo, puede inspeccionar una imagen para averiguar qué canalización ha creado la imagen. Puede rechazar este comportamiento predeterminado.


addBaseImageData - Adición de metadatos de imagen base a imágenes
boolean. Valor predeterminado: true.

De forma predeterminada, se agregan datos de imagen base como el nombre de la imagen base o el resumen y ayudan con la rastreabilidad. Puede rechazar este comportamiento predeterminado.


container - Contenedor
string. Opcional. Use cuando command = start || command = stop.

Especifica el nombre del recurso de contenedor que se va a iniciar o detener. Use este comando con start comandos y stop .


Opciones de control de tareas

Todas las tareas tienen opciones de control además de las entradas de tareas. Para obtener más información, vea Opciones de control y propiedades de tareas comunes.

Variables de salida

Esta tarea define las siguientes variables de salida, que puede consumir en pasos, trabajos y fases de bajada.

DockerOutput
Especifica la ruta de acceso a los archivos que contienen la salida del comando. Puede enumerar dos rutas de acceso de archivo en líneas independientes para el buildAndPush comando y una ruta de acceso de archivo para cualquier otro comando.

Comentarios

A continuación se muestran las principales ventajas de usar la tarea de Docker en lugar de usar directamente el binario de cliente de Docker en un script.

  • Integración con la conexión del servicio del registro de Docker : la tarea facilita el uso de una conexión de servicio del registro de Docker para conectarse a cualquier registro de contenedor. Una vez que haya iniciado sesión, puede agregar tareas de seguimiento que ejecuten otras tareas o scripts aprovechando el inicio de sesión usado por la tarea de Docker. Por ejemplo, use la tarea de Docker para iniciar sesión en cualquier Azure Container Registry y, a continuación, use otra tarea o script para compilar e insertar una imagen en el registro.

  • Metadatos agregados como etiquetas : la tarea agrega metadatos relacionados con la rastreabilidad a la imagen en las etiquetas siguientes:

    • 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

Solución de problemas

¿Por qué la tarea docker omite los argumentos pasados al comando buildAndPush?

Una tarea de Docker configurada mediante el comando buildAndPush omite los argumentos que se pasan porque se vuelven ambiguos para los comandos internos de compilación e inserción. Puede dividir el comando en pasos de compilación e inserción independientes y pasar los argumentos adecuados. Por ejemplo, consulte esta publicación de stackoverflow.

DockerV2 solo admite la conexión del servicio del registro de Docker y no admite la conexión del servicio ARM. ¿Cómo puedo usar una entidad de servicio de Azure (SPN) existente para la autenticación en la tarea de Docker?

Puede crear una conexión de servicio del registro de Docker mediante las credenciales de SPN de Azure. Elija las demás del tipo de Registro y proporcione los detalles siguientes:

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

Ejemplos

Iniciar sesión

El siguiente fragmento de código YAML muestra un inicio de sesión del registro de contenedor mediante una conexión de servicio del registro de Docker.

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

Compilación e inserción

Un comando cómodo denominado buildAndPush permite la compilación e inserción de imágenes en un registro de contenedor en un único comando.

El siguiente fragmento de código YAML es un ejemplo de creación e inserción de varias etiquetas de una imagen en varios registros.

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

En el fragmento de código anterior, las imágenes contosoRepository:tag1 y contosoRepository:tag2 se compilan e insertan en los registros de contenedor correspondientes a dockerRegistryServiceConnection1 y dockerRegistryServiceConnection2.

Si desea compilar e insertar en un registro de contenedor autenticado específico en lugar de compilar e insertar en todos los registros de contenedor autenticados a la vez, especifique explícitamente la containerRegistry entrada con command: buildAndPush como se muestra:

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

Logout

En el siguiente fragmento de código YAML se muestra cómo cerrar sesión desde un registro de contenedor mediante una conexión de servicio del registro de Docker.

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

Arranque/parada

Use esta tarea para controlar los contenedores de trabajos y servicios. Este uso es poco común, pero en ocasiones se usa en circunstancias únicas.

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

Otros comandos y argumentos

Las entradas de comando y argumento se usan para pasar argumentos adicionales para comandos de compilación o inserción mediante el binario del cliente de Docker, como se muestra en el ejemplo.

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

Nota

La entrada de argumentos se evalúa para todos los comandos excepto buildAndPush. buildAndPush es un comando de conveniencia (build seguido de push), arguments la entrada se omite cuando se usa.

Requisitos

Requisito Descripción
Tipos de canalización YAML, compilación clásica, versión clásica
Se ejecuta en Agente, DeploymentGroup
Peticiones None
Capabilities Esta tarea no satisface ninguna demanda de tareas posteriores en el trabajo.
Restricciones de comandos Any
Variables que se pueden establecer Any
Versión del agente 2.172.0 o superior
Categoría de la tarea: Build
Requisito Descripción
Tipos de canalización YAML, compilación clásica, versión clásica
Se ejecuta en Agente, DeploymentGroup
Peticiones None
Capabilities Esta tarea no satisface ninguna demanda de tareas posteriores en el trabajo.
Restricciones de comandos Any
Variables que se pueden establecer Any
Versión del agente Todas las versiones de agente compatibles.
Categoría de la tarea: Build