Partilhar via


Docker@2 - Tarefa do Docker v2

Crie ou envie imagens do Docker, inicie sessão ou termine sessão, inicie ou pare contentores ou execute um comando do Docker.

Crie ou envie imagens do Docker, inicie sessão ou termine sessão ou execute um comando do 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 - Registo de contentor
string.

Nome da ligação do serviço de registo do Docker. Necessário para comandos que efetuam a autenticação com um registo.


repository - Repositório de contentor
string. Opcional. Utilize quando command != login && command != logout && command != start && command != stop.

Especifica o nome do repositório.


repository - Repositório de contentor
string. Opcional. Utilize quando command != login && command != logout.

Especifica o nome do repositório.


command - Comando
string. Obrigatório. Valores permitidos: buildAndPush, , pushbuild, login, logout, start, . stop Valor predefinido: buildAndPush.

Especifica o comando do Docker a executar.


command - Comando
string. Obrigatório. Valores permitidos: buildAndPush, , buildpush, login, logout. Valor predefinido: buildAndPush.

Especifica o comando do Docker a executar.


Dockerfile - Dockerfile
string. Necessário quando command = build || command = buildAndPush. Valor predefinido: **/Dockerfile.

Especifica o caminho para o ficheiro do Docker. A tarefa utiliza o primeiro ficheiro do Docker que encontra para criar a imagem.


buildContext - Contexto de compilação
string. Opcional. Utilize quando command = build || command = buildAndPush. Valor predefinido: **.

Especifica o caminho para o contexto de compilação. Passe ** para indicar o diretório que contém o ficheiro do Docker.


tags - Etiquetas
string. Opcional. Utilize quando command = build || command = push || command = buildAndPush. Valor predefinido: $(Build.BuildId).

Especifica uma lista de etiquetas separadas por vírgulas. Estas etiquetas são utilizadas em buildcomandos e pushbuildAndPush .


arguments - Argumentos
string. Opcional. Utilize quando command != login && command != logout && command != buildAndPush.

Especifica argumentos adicionais a transmitir para o cliente do Docker. Se utilizar o valor buildAndPush para o parâmetro de comando, a propriedade arguments é ignorada.

Exemplo: com o comando build, --build-arg HTTP_PROXY=http://10.20.30.2:1234 --quiet.


addPipelineData - Adicionar metadados de pipeline a imagens
boolean. Valor predefinido: true.

Por predefinição, os dados do pipeline, como o nome do ramo de origem ou o ID de compilação, são adicionados e ajudam na rastreabilidade. Por exemplo, pode inspecionar uma imagem para saber que pipeline criou a imagem. Pode optar ativamente por não participar neste comportamento predefinido.


addBaseImageData - Adicionar metadados de imagem de base a imagens
boolean. Valor predefinido: true.

Por predefinição, os dados de imagem de base, como o nome da imagem de base ou o resumo, são adicionados e ajudam na rastreabilidade. Pode optar ativamente por não participar neste comportamento predefinido.


container - Contentor
string. Opcional. Utilize quando command = start || command = stop.

Especifica o nome do recurso de contentor a iniciar ou parar. Utilize este comando com start comandos e stop .


Opções de controlo de tarefas

Todas as tarefas têm opções de controlo para além das entradas de tarefas. Para obter mais informações, veja Opções de controlo e propriedades de tarefas comuns.

Variáveis de saída

Esta tarefa define as seguintes variáveis de saída, que pode consumir em passos, tarefas e fases a jusante.

DockerOutput
Especifica o caminho para os ficheiros que contêm a saída do comando. Pode listar dois caminhos de ficheiro em linhas separadas para o buildAndPush comando e um caminho de ficheiro para qualquer outro comando.

Observações

Seguem-se as principais vantagens de utilizar a tarefa do Docker em vez de utilizar diretamente o binário do cliente do Docker num script.

  • Integração com a ligação do serviço de registo do Docker – a tarefa facilita a utilização de uma ligação do serviço de registo do Docker para ligar a qualquer registo de contentor. Depois de iniciar sessão, pode adicionar tarefas de seguimento que executam outras tarefas ou scripts ao tirar partido do início de sessão utilizado pela tarefa do Docker. Por exemplo, utilize a tarefa do Docker para iniciar sessão em qualquer Azure Container Registry e, em seguida, utilize outra tarefa ou script para criar e enviar uma imagem para o registo.

  • Metadados adicionados como etiquetas – a tarefa adiciona metadados relacionados com a rastreabilidade à imagem nas seguintes etiquetas –

    • 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

Resolução de problemas

Por que motivo a tarefa do Docker ignora os argumentos transmitidos ao comando buildAndPush?

Uma tarefa do Docker configurada com o comando buildAndPush ignora os argumentos transmitidos porque se tornam ambíguos para os comandos internos de criação e envio. Pode dividir o comando em passos de criação e envio separados e transmitir os argumentos adequados. Por exemplo, veja esta publicação do StackOverflow.

O DockerV2 só suporta a ligação do serviço de registo do Docker e não suporta a ligação do serviço ARM. Como posso utilizar um principal de serviço (SPN) do Azure existente para autenticação na tarefa do Docker?

Pode criar uma ligação do serviço de registo do Docker com as credenciais do SPN do Azure. Escolha as outras no Tipo de registo e indique os detalhes da seguinte forma:

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

Exemplos

Iniciar sessão

O fragmento YAML seguinte mostra um início de sessão do registo de contentor com uma ligação do serviço de registo do Docker.

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

Criar e Emitir

Um comando de conveniência chamado buildAndPush permite criar e emitir imagens para um registo de contentor num único comando.

O fragmento YAML seguinte é um exemplo de criação e empção de várias etiquetas de uma imagem para vários registos.

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

No fragmento acima, as imagens contosoRepository:tag1 e contosoRepository:tag2 são criadas e enviadas para os registos de contentor correspondentes a dockerRegistryServiceConnection1 e dockerRegistryServiceConnection2.

Se quiser criar e emitir para um registo de contentor autenticado específico em vez de criar e emitir para todos os registos de contentor autenticados ao mesmo tempo, especifique explicitamente a containerRegistry entrada com command: buildAndPush , conforme mostrado:

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

Terminar sessão

O fragmento YAML seguinte mostra como terminar sessão a partir de um registo de contentor com uma ligação do serviço de registo do Docker.

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

Iniciar/parar

Utilize esta tarefa para controlar os contentores de tarefas e serviços. Esta utilização é invulgar, mas ocasionalmente utilizada em circunstâncias exclusivas.

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

Outros comandos e argumentos

As entradas de comandos e argumentos são utilizadas para transmitir argumentos adicionais para comandos de compilação ou push com o binário do cliente do Docker, conforme mostrado no exemplo.

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

A entrada de argumentos é avaliada para todos os comandos, exceto buildAndPush. buildAndPush é um comando conveniente (build seguido de push), arguments a entrada é ignorada quando é utilizada.

Requisitos

Requisito Description
Tipos de pipeline YAML, Compilação clássica, Versão clássica
É executado em Agent, DeploymentGroup
Exigências Nenhuma
Capacidades Esta tarefa não satisfaz quaisquer exigências para tarefas subsequentes na tarefa.
Restrições de comandos Qualquer
Variáveis de definição Qualquer
Versão do agente 2.172.0 ou superior
Categoria da tarefa Compilação
Requisito Description
Tipos de pipeline YAML, Compilação clássica, Versão clássica
É executado em Agent, DeploymentGroup
Exigências Nenhuma
Capacidades Esta tarefa não satisfaz quaisquer exigências para tarefas subsequentes na tarefa.
Restrições de comandos Qualquer
Variáveis de definição Qualquer
Versão do agente Todas as versões de agente suportadas.
Categoria da tarefa Compilação