Docker@2 - Docker v2 任务

生成或推送 Docker 映像、登录或注销、启动或停止容器或运行 Docker 命令。

生成或推送 Docker 映像、登录或注销,或运行 Docker 命令。

语法

# 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.

输入

containerRegistry - 容器注册表
string.

Docker 注册表服务连接的名称。 对于使用注册表执行身份验证的命令是必需的。


repository - 容器存储库
string. 可选。 在 时 command != login && command != logout && command != start && command != stop使用 。

指定存储库的名称。


repository - 容器存储库
string. 可选。 在 时 command != login && command != logout使用 。

指定存储库的名称。


command - 命令
string. 必需。 允许的值:buildAndPush、、buildpushloginlogoutstart、。 stop 默认值:buildAndPush

指定要运行的 Docker 命令。


command - 命令
string. 必需。 允许的值:buildAndPushbuildpushloginlogout。 默认值:buildAndPush

指定要运行的 Docker 命令。


Dockerfile - Dockerfile
string. 当 command = build || command = buildAndPush 时,需要此选项。 默认值:**/Dockerfile

指定 Docker 文件的路径。 该任务使用找到的第一个 Docker 文件来生成映像。


buildContext - 生成上下文
string. 可选。 在 时 command = build || command = buildAndPush使用 。 默认值:**

指定生成上下文的路径。 传递 ** 以指示包含 Docker 文件的目录。


tags - 标签
string. 可选。 在 时 command = build || command = push || command = buildAndPush使用 。 默认值:$(Build.BuildId)

指定逗号分隔标记的列表。 这些标记在 和 pushbuildAndPush 命令中使用build


arguments - 参数
string. 可选。 在 时 command != login && command != logout && command != buildAndPush使用 。

指定要传递给 Docker 客户端的其他参数。 如果使用命令参数的值 buildAndPush ,则忽略 arguments 属性。

示例:使用生成命令 --build-arg HTTP_PROXY=http://10.20.30.2:1234 --quiet


addPipelineData - 将管道元数据添加到映像 ()
boolean. 默认值:true

默认情况下,会添加管道数据(如源分支名称或生成 ID),并帮助实现可跟踪性。 例如,可以检查映像,找出生成映像的管道。 可以选择禁用此默认行为。


addBaseImageData - 将基础图像元数据添加到映像 ()
boolean. 默认值:true

默认情况下,会添加基础映像数据(如基本映像名称或摘要),并帮助实现可跟踪性。 可以选择禁用此默认行为。


container - 容器
string. 可选。 在 时 command = start || command = stop使用 。

指定要启动或停止的容器资源的名称。 将此命令与 和 stop 命令一起使用start


任务控制选项

除了任务输入,所有任务都有控制选项。 有关详细信息,请参阅 控制选项和常见任务属性

输出变量

此任务定义以下 输出变量,可在下游步骤、作业和阶段中使用。

DockerOutput
指定包含命令输出的文件的路径。 可以在命令的单独行 buildAndPush 中列出两个文件路径,为任何其他命令列出一个文件路径。

注解

以下是在脚本中使用 Docker 任务而不是直接使用 Docker 客户端二进制文件的主要优势。

  • 与 Docker 注册表服务连接集成 - 通过该任务可以轻松使用 Docker 注册表服务连接连接到任何容器注册表。 登录后,可以通过利用 Docker 任务使用的登录来添加执行其他任务或脚本的后续任务。 例如,使用 Docker 任务登录到任何Azure 容器注册表,然后使用另一个任务或脚本生成映像并将其推送到注册表。

  • 添加为标签的元数据 - 任务将可追溯性相关的元数据添加到以下标签中的图像 -

    • 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

故障排除

为什么 Docker 任务会忽略传递给 buildAndPush 命令的参数?

使用 buildAndPush 命令配置的 Docker 任务会忽略传递的参数,因为它们对内部构建和推送命令变得不明确。 可以将命令拆分为单独的构建和推送步骤,并传递合适的参数。 有关示例,请参阅此 StackOverflow 文章

DockerV2 仅支持 Docker 注册表服务连接,不支持 ARM 服务连接。 如何使用现有的 Azure 服务主体 (SPN) 在 Docker 任务中进行身份验证?

可以使用 Azure SPN 凭据创建 Docker 注册表服务连接。 从注册表类型中选择其他类型,并提供以下详细信息:

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

示例

登录

以下 YAML 代码片段演示了使用 Docker 注册表服务连接的容器注册表登录。

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

生成和推送

使用名为 的 buildAndPush 便捷命令,可以在单个命令中生成映像并将其推送到容器注册表。

以下 YAML 代码片段是生成映像的多个标记并将其推送到多个注册表的示例。

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

在上面的代码片段中 contosoRepository:tag1 ,映像 和 contosoRepository:tag2 生成并推送到对应于 dockerRegistryServiceConnection1dockerRegistryServiceConnection2的容器注册表。

如果要生成并推送到经过身份验证的特定容器注册表,而不是一次性生成并推送到所有经过身份验证的容器注册表,请使用 显式指定 containerRegistry 输入 command: buildAndPush ,如下所示:

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

Logout

以下 YAML 代码片段演示如何使用 Docker 注册表服务连接从容器注册表注销。

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

启动/停止

使用此任务来控制作业和服务容器。 这种用法并不常见,但偶尔在特殊情况下使用。

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

其他命令和参数

命令和参数输入用于使用 Docker 客户端二进制文件为生成或推送命令传递其他参数,如示例所示。

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

注意

为除 之外 buildAndPush的所有命令计算参数输入。 buildAndPush 是一个方便的命令, (build 后跟 push) , arguments 使用时会忽略输入。

要求

要求 说明
管道类型 YAML、经典版本、经典版本
运行平台 Agent、DeploymentGroup
需求
功能 此任务不满足作业中后续任务的任何要求。
命令限制 任意
可设置变量 任意
代理版本 2.172.0 或更高版本
任务类别 构建
要求 说明
管道类型 YAML、经典版本、经典版本
运行平台 Agent、DeploymentGroup
需求
功能 此任务不满足作业中后续任务的任何要求。
命令限制 任意
可设置变量 任意
代理版本 所有支持的代理版本。
任务类别 构建