Tarea de Docker

Use esta tarea para compilar e insertar imágenes de Docker en cualquier registro de contenedor mediante la conexión del servicio de registro de Docker.

Información general

A continuación se incluyen las principales ventajas de usar la tarea de Docker en comparación con el uso directo del binario de cliente de Docker en el script :

  • Integración con la conexión del servicio de registro de Docker: la tarea facilita el uso de una conexión de servicio de registro de Docker para conectarse a cualquier registro de contenedor. Una vez iniciada la sesión, el usuario puede crear tareas de seguimiento para ejecutar cualquier tarea o script aprovechando el inicio de sesión ya realizado por la tarea de Docker. Por ejemplo, puede usar la tarea docker para iniciar sesión en cualquier Azure Container Registry y, a continuación, usar una tarea o script subsiguientes para compilar e insertar una imagen en este registro.

  • Metadatos agregados como etiquetas: la tarea agrega metadatos relacionados con la rastreabilidad a la imagen en forma de 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

Entradas de tareas

Parámetros Descripción
command
Comando
(Obligatorio) Valores posibles: buildAndPush , build , , pushlogin , logout
Se agregó en la versión 2.173.0: start , stop
Valor predeterminado: buildAndPush
containerRegistry
Registro de contenedor
(Opcional) Nombre de la conexión del servicio de registro de Docker
repository
Repositorio
(Opcional) Nombre del repositorio dentro del registro de contenedor correspondiente a la conexión del servicio de registro de Docker especificada como entrada para containerRegistry
container
Contenedor
(Obligatorio para los comandos start y ) El recurso de contenedor que se debe iniciar o stop detener
tags
Etiquetas
(Opcional) Entrada multilínea donde cada línea contiene una etiqueta que se va a usar en buildpush los comandos buildAndPush o
Valor predeterminado: $(Build.BuildId)
Dockerfile
Dockerfile
(Opcional) Ruta de acceso al Dockerfile. La tarea usará el primer dockerfile que encuentre para compilar la imagen.
Valor predeterminado: **/Dockerfile
buildContext
Contexto de compilación
(Opcional) Ruta de acceso al contexto de compilación
Valor predeterminado: **
arguments
Argumentos
(Opcional) Argumentos adicionales que se pasarán al cliente de Docker
Tenga en cuenta que si usa el buildAndPush valor para el parámetro , se commandarguments omitirá la propiedad .
addPipelineData
Agregar datos de canalización
(Opcional) Agrega los metadatos mencionados anteriormente como etiquetas a la imagen.
Valores posibles: true, false
Valor predeterminado: true

Iniciar sesión

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

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

Compilación e inserción

Un comando de conveniencia llamado buildAndPush permite compilar e insertar imágenes en el registro de contenedor en un solo comando. El siguiente fragmento de código YAML es un ejemplo de creación e insertar 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
    tags: |
      tag1
      tag2

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

Si se 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, la entrada se puede especificar explícitamente junto con , como se muestra a containerRegistrycommand: buildAndPush continuación:

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

Logout

El siguiente fragmento de código de YAML muestra el cierre de sesión del registro de contenedor mediante una conexión de servicio de registro de Docker:

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

Inicio y detenerse

Esta tarea también se puede usar para controlar los contenedores de trabajos y servicios. Este uso es poco frecuente, 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 comandos y argumentos se pueden usar para pasar argumentos adicionales para comandos de compilación o inserción mediante el binario de cliente de Docker, como se muestra a continuación:

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

Nota

La entrada de argumentos se evalúa para todos los comandos excepto buildAndPush . Como buildAndPush es un comando de conveniencia ( seguido de ), la entrada se omite para este buildpusharguments comando.

Solución de problemas

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

La tarea de Docker configurada con el comando buildAndPush omite los argumentos pasados porque se convierten en ambiguos para los comandos de compilación e inserción que se ejecutan internamente. Puede dividir el comando en pasos de compilación e inserción independientes y pasar los argumentos adecuados. Consulte esta entrada de stackoverflow para obtener un ejemplo.

DockerV2 solo admite la conexión de servicio del Registro de Docker y no admite la conexión de 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 con sus credenciales de SPN de Azure. Elija el tipo Otros del Registro y proporcione los detalles como se muestra a continuación:

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

Código Abierto

Esta tarea es de código abierto en GitHub. Los comentarios y las contribuciones son bienvenidos.