다음을 통해 공유


Azure Pipelines를 사용하여 컨테이너 이미지를 빌드하고 레지스트리에 푸시

Azure DevOps Services

이 문서에서는 Azure Container Registry 또는 Docker Hub에 Docker 이미지를 빌드하고 푸시하는 파이프라인을 만드는 방법을 안내합니다.

필수 조건

제품 요구 사항
Azure DevOps - Azure DevOps 프로젝트.
- 권한:
    - 프로젝트의 모든 파이프라인에 대한 액세스 권한을 부여하려면 프로젝트 관리자 그룹구성원이어야 합니다.
    서비스 연결을 만들려면, 관리자 또는 작성자 역할이 있어야 합니다.
- 자체 호스팅 에이전트를 사용하는 경우 Docker가 설치되어 있고 Docker 엔진이 상승된 권한으로 실행되고 있는지 확인합니다. Microsoft 호스팅 에이전트에는 Docker가 미리 설치되어 있습니다.
GitHub - GitHub 계정입니다.
- Dockerfile이 있는 GitHub 리포지토리입니다. 고유한 프로젝트가 없는 경우 샘플 리포지토리 사용합니다.
- Azure Pipelines에 권한을 부여하는 GitHub 서비스 연결.
Azure - Azure 구독권.
- Azure Container Registry.
제품 요구 사항
Azure DevOps - Azure DevOps 프로젝트.
- 권한:
    - 프로젝트의 모든 파이프라인에 대한 액세스 권한을 부여하려면 프로젝트 관리자 그룹구성원이어야 합니다.
    서비스 연결을 만들려면, 관리자 또는 작성자 역할이 있어야 합니다.
- 자체 호스팅 에이전트를 사용하는 경우 Docker가 설치되어 있고 Docker 엔진이 상승된 권한으로 실행되고 있는지 확인합니다. Microsoft 호스팅 에이전트에는 Docker가 미리 설치되어 있습니다.
GitHub - GitHub 계정입니다.
- Dockerfile이 있는 GitHub 리포지토리입니다. 고유한 프로젝트가 없는 경우 샘플 리포지토리 사용합니다.
- Azure Pipelines에 권한을 부여하는 GitHub 서비스 연결.
Docker Hub - Docker Hub 계정.
- Docker Hub 이미지 리포지토리입니다.

Docker 레지스트리 서비스 연결 만들기

레지스트리에 컨테이너 이미지를 푸시하기 전에 Azure DevOps에서 서비스 연결을 만들어야 합니다. 이 서비스 연결은 컨테이너 레지스트리를 사용하여 안전하게 인증하는 데 필요한 자격 증명을 저장합니다. 자세한 내용은 Docker 레지스트리 서비스 연결참조하세요.

  1. Azure DevOps 프로젝트에서 프로젝트 설정>서비스 연결를 선택합니다.

    프로젝트 설정 선택 스크린샷

  2. 새 서비스 연결 및 Docker 레지스트리선택하십시오.

    Docker 레지스트리 선택 스크린샷

  3. Docker Hub을 선택하고 다음 정보를 입력합니다.

    분야 설명
    Docker ID Docker ID를 입력합니다.
    Docker 암호 Docker 암호를 입력합니다.
    서비스 연결 이름 서비스 연결의 이름을 입력합니다.
    모든 파이프라인에 대한 액세스 권한 부여 모든 파이프라인에 대한 액세스 권한을 부여하려면 이 옵션을 선택합니다.

    Docker Hub 서비스 연결 대화 상자의 스크린샷

  4. 선택하고확인 및 저장합니다.

Docker 이미지를 빌드하고 푸시하는 파이프라인 만들기

Docker@2 작업은 이미지를 빌드하고 컨테이너 레지스트리에 푸시하는 데 사용됩니다. Docker@2 작업은 Azure Pipelines 내에서 Docker 이미지를 빌드, 푸시 및 관리하는 프로세스를 간소화하도록 설계되었습니다. 이 작업은 빌드, 푸시, 로그인, 로그아웃, 시작, 중지 및 실행을 비롯한 광범위한 Docker 명령을 지원합니다.

다음 단계를 사용하여 Docker@2 작업을 사용하여 이미지를 빌드하고 푸시하는 YAML 파이프라인을 만듭니다.

  1. Azure DevOps 프로젝트에서 Pipelines 을 선택한 후, 새 파이프라인을 선택합니다.

  2. GitHub 소스 코드의 위치로 선택하고 리포지토리를 선택합니다.

    • 로그인하기 위해 GitHub로 리디렉션되는 경우 GitHub 자격 증명을 입력합니다.
    • Azure Pipelines 앱을 설치하기 위해 GitHub로 리디렉션되는 경우 승인 및 설치를 선택합니다.
  3. 리포지토리를 선택합니다.

  4. 시작 파이프라인 템플릿을 선택하여 기본 파이프라인 구성을 만듭니다.

  5. azure-pipelines.yml 내용을 다음 코드로 바꿉니다.

    
    trigger:
    - main
    
    pool:
      vmImage: 'ubuntu-latest' 
    
    variables:
      repositoryName: '<target repository name>' 
    
    steps:
    - task: Docker@2
      inputs:
        containerRegistry: '<docker registry service connection>'
        repository: $(repositoryName)
        command: 'buildAndPush'
        Dockerfile: '**/Dockerfile'
    
    
  6. 다음과 같이 파이프라인 YAML 파일을 편집합니다.

    • 이미지를 푸시하려는 컨테이너 레지스트리의 리포지토리 이름으로 바꿉 <target repository name> 습니다.
    • <docker registry service connection>을(를) 이전에 생성한 Docker 레지스트리 서비스 연결의 이름으로 바꿉니다.
  7. 완료되면 저장 및 실행을 선택하고>저장 및 실행을실행합니다.

  8. 작업 선택하여 로그를 보고 파이프라인이 성공적으로 실행되었는지 확인합니다.

  1. Azure DevOps 프로젝트로 이동하여 왼쪽 메뉴에서 파이프라인 선택합니다.

  2. 새 파이프라인선택하기.

  3. GitHub 소스 코드의 위치로 선택하고 리포지토리를 선택합니다.

    • 로그인하기 위해 GitHub로 리디렉션되는 경우 GitHub 자격 증명을 입력합니다.
    • Azure Pipelines 앱을 설치하기 위해 GitHub로 리디렉션되는 경우 승인 및 설치를 선택합니다.
  4. Docker를 선택합니다. 이미지를 빌드하고 Azure Container Registry 템플릿에 푸시합니다.

  5. Azure 구독을 선택하고 계속.

  6. Container Registry를 선택한 다음 유효성 검사를 선택하고구성합니다.

    YAML 파이프라인 예제:

    # Docker
    # Build and push an image to Azure Container Registry
    # https://docs.microsoft.com/azure/devops/pipelines/languages/docker
    
    trigger:
    - main
    
    resources:
    - repo: self
    
    variables:
      # Container registry service connection established during pipeline creation
      dockerRegistryServiceConnection: '7f9dc28e-5551-43ee-891f-33bf61a995de'
      imageRepository: 'usernamepipelinesjavascriptdocker'
      containerRegistry: 'repoistoryname.azurecr.io'
      dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
      tag: '$(Build.BuildId)'
    
      # Agent VM image name
      vmImageName: 'ubuntu-latest'
    
    stages:
    - stage: Build
      displayName: Build and push stage
      jobs:
      - job: Build
        displayName: Build
        pool:
          vmImage: $(vmImageName)
        steps:
        - task: Docker@2
          displayName: Build and push an image to container registry
          inputs:
            command: buildAndPush
            repository: $(imageRepository)
            dockerfile: $(dockerfilePath)
            containerRegistry: $(dockerRegistryServiceConnection)
            tags: |
              $(tag)
    
    
  7. 저장 및 실행 그런 다음 저장 및 실행을(를) 다시 선택합니다.

  8. 작업 선택하여 로그를 보고 파이프라인이 성공적으로 실행되었는지 확인합니다.

Docker 템플릿은 Azure Container Registry에 대한 서비스 연결을 만들고 Docker@2 작업을 사용하여 Docker 이미지를 빌드하고 레지스트리에 푸시합니다.

Docker@2 작업은 Azure Pipelines 내에서 Docker 이미지를 빌드, 푸시 및 관리하는 프로세스를 간소화하도록 설계되었습니다. 이 작업은 빌드, 푸시, 로그인, 로그아웃, 시작, 중지 및 실행을 비롯한 광범위한 Docker 명령을 지원합니다.

자체 호스팅 에이전트를 사용하는 경우 Docker가 에이전트의 호스트에 설치되어 있고 Docker 엔진/디먼이 상승된 권한으로 실행되고 있는지 확인합니다.