次の方法で共有


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.

入力

コンテナー レジストリcontainerRegistry -
string.

Docker レジストリ サービス接続の名前。 レジストリで認証を実行するコマンドに必要です。


repository - コンテナー リポジトリの
string. 任意 command != login && command != logout && command != start && command != stopするときに使用します。

リポジトリの名前を指定します。


repository - コンテナー リポジトリの
string. 任意 command != login && command != logoutするときに使用します。

リポジトリの名前を指定します。


command - コマンド
string. 必須。 使用できる値: buildAndPushbuildpushloginlogoutstartstop。 既定値: buildAndPush.

実行する Docker コマンドを指定します。


command - コマンド
string. 必須。 使用できる値: buildAndPushbuildpushloginlogout。 既定値: buildAndPush.

実行する Docker コマンドを指定します。


DockerfileDockerfile - する
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).

コンマ区切りのタグの一覧を指定します。 これらのタグは、buildpush、および buildAndPush コマンドで使用されます。


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するときに使用します。

開始または停止するコンテナー リソースの名前を指定します。 このコマンドは、start コマンドと stop コマンドと共に使用します。


タスク コントロールのオプション

すべてのタスクには、タスク入力に加えて制御オプションがあります。 詳細については、「コントロール オプションと一般的なタスク プロパティを参照してください。

出力変数

このタスクでは、次の 出力変数を定義します。この変数は、ダウンストリームのステップ、ジョブ、およびステージで使用できます。

DockerOutput
コマンド出力を含むファイルへのパスを指定します。 buildAndPush コマンドの 2 つのファイル パスと、他のコマンドの 1 つのファイル パスを別々の行に一覧表示できます。

注釈

スクリプトで Docker クライアント バイナリを直接使用するのではなく、Docker タスクを使用する主な利点を次に示します。

  • Docker レジストリ サービス接続 との統合 - このタスクにより、任意のコンテナー レジストリに接続するために Docker レジストリ サービス接続を簡単に使用できます。 サインインしたら、Docker タスクで使用されるサインオンを利用して、他のタスクまたはスクリプトを実行するフォローアップ タスクを追加できます。 たとえば、Docker タスクを使用して任意の Azure Container Registry にサインインし、別のタスクまたはスクリプトを使用してイメージをビルドし、レジストリにプッシュします。

  • メタデータがラベルとして追加 - タスクは、次のラベルの画像にトレーサビリティ関連のメタデータを追加します。

    • 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 サービス接続はサポートされません。 Docker タスクでの認証に既存の Azure サービス プリンシパル (SPN) を使用するにはどうすればよいですか?

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 と呼ばれる便利なコマンドを使用すると、1 つのコマンドでイメージをビルドしてコンテナー レジストリにプッシュできます。

次の 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:tag1contosoRepository:tag2 がビルドされ、dockerRegistryServiceConnection1dockerRegistryServiceConnection2に対応するコンテナー レジストリにプッシュされます。

すべての認証済みコンテナー レジストリを一度にビルドしてプッシュするのではなく、特定の認証済みコンテナー レジストリをビルドしてプッシュする場合は、次に示すように、command: buildAndPush を使用して containerRegistry 入力を明示的に指定します。

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

ログアウト

次の 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、クラシック ビルド、クラシック リリース
実行日 エージェント、DeploymentGroup
の需要 なし
機能の このタスクは、ジョブ内の後続のタスクに対する要求を満たしていません。
コマンドの制限 どれでも
設定可能な変数 どれでも
エージェントのバージョン 2.172.0 以上
タスク カテゴリ 建築する
要件 説明
パイプラインの種類 YAML、クラシック ビルド、クラシック リリース
実行日 エージェント、DeploymentGroup
の需要 なし
機能の このタスクは、ジョブ内の後続のタスクに対する要求を満たしていません。
コマンドの制限 どれでも
設定可能な変数 どれでも
エージェントのバージョン サポートされているすべてのエージェント バージョン。
タスク カテゴリ 建築する