Docker 작업

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020 | 2019년 Azure DevOps Server | TFS 2018

이 작업을 사용하여 Docker 레지스트리 서비스 연결을 사용하여 Docker 이미지를 빌드하고 컨테이너 레지스트리에 푸시합니다.

개요

스크립트에서 Docker 클라이언트 이진 파일을 직접 사용하는 것과 비교할 때 Docker 작업을 사용할 때의 주요 이점은 다음과 같습니다.

  • Docker 레지스트리 서비스 연결과 통합합니다. 이 작업을 통해 컨테이너 레지스트리에 연결하기 위해 Docker 레지스트리 서비스 연결을 쉽게 사용할 수 있습니다. 로그인 후 Docker 태스크가 이미 수행한 로그인을 사용하여 작업 또는 스크립트를 실행하는 후속 작업을 작성할 수 있습니다. 예를 들어 Docker 작업을 사용하여 컨테이너 레지스트리에 로그인한 다음 후속 작업 또는 스크립트를 사용하여 이미지를 빌드하고 이 레지스트리에 푸시할 수 있습니다.

  • 레이블로 추가된 메타데이터입니다. 이 작업은 다음 레이블 형식의 이미지에 추적 가능성 관련 메타데이터를 추가합니다.

    • 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

작업 입력

매개 변수 필수 또는 선택 Description
command
명령
필수 가능한 값: buildAndPush, build, pushlogin,logout
버전 2.173.0에 추가됨: startstop
기본값: buildAndPush
containerRegistry
컨테이너 레지스트리
선택 사항 Docker 레지스트리 서비스 연결의 이름입니다.
repository
리포지토리
선택 사항 에 대한 containerRegistry입력으로 지정된 Docker 레지스트리 서비스 연결에 해당하는 컨테이너 레지스트리 내의 리포지토리 이름입니다. 접두사는 username/ Docker Hub.
container
컨테이너
명령 및 startstop 시작 또는 중지할 컨테이너 리소스입니다.
tags
태그
선택 사항 각 줄에 사용할 buildpush태그 또는 buildAndPush 명령이 포함된 여러 줄 입력입니다.
기본값: $(Build.BuildId)
Dockerfile
Dockerfile
선택 사항 Dockerfile의 경로입니다. 작업은 이미지를 빌드하기 위해 찾은 첫 번째 Dockerfile을 사용합니다.
기본값: **/Dockerfile
buildContext
빌드 컨텍스트
선택 사항 빌드 컨텍스트의 경로입니다.
기본값: **
arguments
인수
Optional Docker 클라이언트에 전달할 추가 인수입니다.
매개 변수 값을 buildAndPushcommand 사용하면 속성이 arguments 무시됩니다.
addPipelineData
이미지에 파이프라인 메타데이터 추가
선택 사항 원본 분기 이름 및 빌드 ID와 같은 파이프라인 데이터는 기본적으로 추가되므로 추적에 도움이 됩니다. 예를 들어 이미지를 검사하여 이미지를 빌드한 파이프라인을 확인할 수 있습니다. 이 기본 동작을 옵트아웃할 수 있습니다.
가능한 값: true, false
기본값: true
addBaseImageData
이미지에 기본 이미지 메타데이터 추가
선택 사항 기본 이미지 이름 및 다이제스트와 같은 기본 이미지 데이터는 기본적으로 추가되므로 추적에 도움이 됩니다. 이 기본 동작을 옵트아웃할 수 있습니다.
가능한 값: true, false
기본값: true

로그인

다음 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  
    tags: |
      tag1
      tag2

위의 코드 조각에서 이미지는 contosoRepository:tag1contosoRepository:tag2 빌드되고 해당 dockerRegistryServiceConnection1 되는 컨테이너 레지스트리에 푸시됩니다 dockerRegistryServiceConnection2.

인증된 모든 컨테이너 레지스트리를 한 번에 빌드하고 푸시하는 대신 특정 인증된 컨테이너 레지스트리를 빌드하고 푸시하려면 다음과 command: buildAndPush함께 입력을 containerRegistry 지정합니다.

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 has 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 Docker Hub
    tags: tag1
    arguments: --secret id=mysecret,src=mysecret.txt

참고

인수의 입력은 을 제외한 buildAndPush모든 명령에 대해 평가됩니다. buildAndPush 편의 명령build(뒤에)pusharguments이므로 이 명령에 대한 입력은 무시됩니다.

문제 해결

Docker 태스크에서 buildAndPush 명령에 전달된 인수를 무시하는 이유는 무엇인가요?

명령으로 buildAndPush 구성된 Docker 작업은 내부적으로 실행되는 빌드 및 푸시 명령에 모호해지기 때문에 전달된 인수를 무시합니다. 명령을 별도의 빌드 및 푸시 단계로 분할하고 적절한 인수를 전달할 수 있습니다. 예를 들어 이 Stack Overflow 게시물을 참조하세요.

Docker V2는 Docker 레지스트리 서비스 연결을 지원하지만 Azure Resource Manager 서비스 연결은 지원하지 않습니다. Docker 작업에서 인증에 기존 Azure 서비스 주체 이름을 사용하려면 어떻게 해야 하나요?

Azure SPN(서비스 사용자 이름) 자격 증명을 사용하여 Docker 레지스트리 서비스 연결을 만들 수 있습니다. 레지스트리 유형 에서 기타 를 선택하고 다음과 같이 세부 정보를 제공합니다.

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

오픈 소스

이 작업은 GitHub에서 오픈 소스. 피드백과 기여를 환영합니다.