빠른 시작: Azure Pipelines를 사용하여 앱을 배포하는 컨테이너 이미지 빌드

Azure DevOps Services

이 빠른 시작에서는 Azure Pipelines를 사용하여 앱 배포를 위한 컨테이너 이미지를 빌드하는 방법을 보여 줍니다. 이 이미지를 빌드하려면 리포지토리의 Dockerfile만 있으면 됩니다. 파이프라인에서 사용하는 에이전트를 기반으로 Linux 또는 Windows 컨테이너를 빌드할 수 있습니다.

필수 조건

  • 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
  • GitHub 계정. 없는 경우 평가판에 등록하세요.
  • Docker가 설치된 Azure 파이프라인 Windows 또는 Linux 에이전트

샘플 리포지토리 포크

브라우저에서 다음 샘플 리포지토리로 이동하여 GitHub 계정으로 포크합니다.

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Linux 또는 Windows 이미지 빌드

  1. Azure DevOps 조직에 로그인하고 프로젝트로 이동합니다.

  2. 파이프라인으로 이동하여 프로젝트에서 첫 번째 파이프라인을 만드는 경우 새 파이프라인 또는 파이프라인 만들기를 선택합니다.

  3. 소스 코드의 위치로 GitHub를 선택합니다.

  4. 리포지토리를 선택한 다음 스타터 파이프라인을 선택합니다.

    • 로그인하기 위해 GitHub로 리디렉션되는 경우 GitHub 자격 증명을 입력합니다.
    • Azure Pipelines 앱을 설치하기 위해 GitHub로 리디렉션되는 경우 승인 및 설치를 선택합니다.
  5. azure-pipelines.yml 내용을 다음 코드로 바꿉니다. Linux 또는 Windows 앱을 배포하는지 여부에 따라 각각 중 하나 ubuntu-latest 또는 windows-latest.로 설정 vmImage 해야 합니다.

     trigger:
     - main
    
     pool:
       vmImage: 'ubuntu-latest' 
    
     variables:
       imageName: 'pipelines-javascript-docker'
    
     steps:
     - task: Docker@2
       displayName: Build an image
       inputs:
         repository: $(imageName)
         command: build
         Dockerfile: app/Dockerfile
    
  6. 완료되면 저장을 선택하고 실행합니다.

  7. 리포지토리에 azure-pipelines.yml 파일을 추가하면 커밋 메시지 추가하라는 메시지가 표시됩니다. 메시지를 입력한 다음 저장 및 실행을 선택합니다.

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

이미지를 빌드하려면 Docker를 에이전트의 호스트에 설치해야 하며 Docker 엔진/디먼이 상승된 권한으로 실행되어야 합니다. YAML 파이프라인 편집기를 사용하여 파이프라인을 만들려면 다음 단계를 사용합니다.

  1. 컬렉션으로 이동하여 프로젝트를 만듭니다.
  2. 프로젝트에서 파이프라인을 선택합니다.
  3. 파이프라인 생성를 선택합니다.
  4. 소스 코드의 위치로 GitHub Enterprise Server를 선택합니다.
  5. 아직 연결하지 않은 경우 GitHub Enterprise Server 계정에 연결하도록 Azure Pipelines에 권한을 부여합니다.
    1. GitHub Enterprise Server에 대한 커넥트 선택합니다.
    2. 계정 세부 정보를 입력한 다음 확인 및 저장을 선택합니다.
  6. 리포지토리를 선택합니다. Azure Pipelines 앱을 설치하기 위해 GitHub로 리디렉션되는 경우 승인 및 설치를 선택합니다.
  7. 파이프라인을 구성하려면 Docker 이미지 템플릿 빌드를 선택합니다.
  8. YAML 파이프라인 편집기에서 YAML 파일의 내용을 다음 코드로 바꿉니다. 풀 이름을 자체 호스팅 에이전트가 포함된 풀의 이름으로 Docker 기능으로 바꿉니다.
# Docker
# Build a Docker image
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker

trigger:
- main

pool:
  name: default
  demands: docker

variables:
  imageName: 'pipelines-javascript-docker'

steps:
 - task: Docker@2
   displayName: Build an image
   inputs:
     repository: $(imageName)
     command: build
     Dockerfile: '$(Build.SourcesDirectory)/app/Dockerfile'

  1. 저장 및 실행을 선택합니다.
  2. 저장 및 실행 페이지에서 저장을 선택하고 다시 실행합니다.

Docker 이미지를 빌드하는 방법에 대한 자세한 내용은 이 샘플 애플리케이션에서 사용하는 Docker 작업을 참조하세요. 명령줄 작업을 사용하여 Docker 명령을 직접 호출할 수도 있습니다.

컨테이너 이미지는 에이전트에 빌드되고 저장됩니다. Google Container Registry, Docker Hub 또는 Azure Container Registry에 이미지를 푸시할 수 있습니다. 자세한 내용은 Docker 허브 또는 Google Container Registry에 이미지 푸시 또는 Azure Container Registry에 이미지 푸시를 참조하세요.

리소스 정리

이 애플리케이션을 계속 사용하지 않으려면 파이프라인 및 코드 리포지토리를 삭제합니다.

FAQ

컨테이너 이미지를 빌드하는 데 사용할 수 있는 에이전트는 무엇인가요?

  • Microsoft 호스팅 Ubuntu 에이전트 또는 Linux 플랫폼 기반 자체 호스팅 에이전트를 사용하여 Linux 컨테이너 이미지를 빌드할 수 있습니다.

  • Microsoft 호스팅 Windows 에이전트 또는 Windows 플랫폼 기반 자체 호스팅 에이전트를 사용하여 Windows 컨테이너 이미지를 빌드할 수 있습니다. 모든 Microsoft 호스팅 Windows 플랫폼 기반 에이전트는 Docker 빌드에 필요한 Moby 엔진 및 클라이언트와 함께 제공됩니다.

  • 이미지를 빌드하는 데 필요한 Moby 엔진이 이러한 에이전트에 미리 설치되어 있지 않으므로 현재 Microsoft 호스팅 macOS 에이전트를 사용하여 컨테이너 이미지를 빌드할 수 없습니다.

자세한 내용은 Microsoft 호스팅 에이전트에서 사용할 수 있는 Windows 및 Linux 에이전트 옵션을 참조하세요.

호스트된 에이전트에서 사용할 수 있는 사전 캐시된 Docker 이미지는 무엇인가요?

컨테이너 레지스트리에서 모든 작업에 대해 Docker 이미지를 끌어당기는 데 긴 간격을 소비하지 않도록 하기 위해 일반적으로 사용되는 일부 이미지는 Microsoft 호스팅 에이전트에 사전 캐시됩니다. 사용 가능한 사전 캐시된 이미지 목록은 azure-pipelines-image-generation 리포지토리에서 사용 가능한 VM 이미지에 대한 포함된 소프트웨어를 참조하세요.

내 Docker 빌드에 대한 BuildKit 변수를 설정할 어떻게 할까요? 있나요?

BuildKit 에서는 성능, 스토리지 관리, 기능 기능 및 보안에 대한 빌드 개선 사항이 도입되었습니다. BuildKit은 현재 Windows 호스트에서 지원되지 않습니다.

BuildKit을 사용하여 Docker 빌드를 사용하도록 설정하려면 DOCKER_BUILDKIT 변수를 설정합니다.

trigger:
- main
   
pool:
  vmImage: 'ubuntu-latest'
   

variables:
  imageName: 'pipelines-javascript-docker'
  DOCKER_BUILDKIT: 1
    
steps:
- task: Docker@2
  displayName: Build an image
  inputs:
    repository: $(imageName)
    command: build
    Dockerfile: app/Dockerfile

자체 호스팅 에이전트를 사용하려면 어떻게 해야 하나요?

Docker를 설치하고 에이전트의 호스트에서 실행되는 엔진/디먼을 설치해야 합니다. Docker가 에이전트의 호스트에 설치되지 않은 경우 Docker 설치 관리자 작업을 파이프라인에 추가할 수 있습니다. Docker 작업 앞에 Docker 설치 관리자 작업을 추가해야 합니다.

Docker 작업을 사용하는 대신 스크립트 기반 Docker 빌드를 만들려면 어떻게 해야 하나요?

명령 또는 다른 Docker 명령을 사용할 build 수 있습니다.

docker build -f Dockerfile -t foobar.azurecr.io/hello:world .

이 명령은 Docker 작업으로 빌드된 이미지와 동등한 이미지를 만듭니다. 내부적으로 Docker 작업은 스크립트에서 Docker 이진 파일을 호출하고 몇 가지 더 많은 명령을 연결하여 몇 가지 이점을 제공합니다. Docker 작업에 대해 자세히 알아봅니다.

Azure Pipelines에서 빌드하는 동안 계층 캐싱을 다시 사용할 수 있나요?

Microsoft 호스팅 에이전트를 사용하는 경우 azure-pipelines-image-generation 리포지토리 템플릿에서 생성된 이미지에 따라 모든 작업이 새로 프로비전된 가상 머신으로 디스패치됩니다. 이러한 가상 머신은 작업이 완료된 후 클린. 이 임시 수명은 후속 작업 및 캐시된 Docker 계층의 재사용을 위해 이러한 가상 머신을 다시 사용할 수 없습니다. 해결 방법으로, 두 개의 이미지를 생성하고 초기 단계에서 이미지 레지스트리에 푸시하는 다단계 빌드를 설정할 수 있습니다. 그런 다음 이러한 이미지를 인수가 있는 캐시 원본으로 사용하도록 Docker에 지시할 --cache-from 수 있습니다.

자체 호스팅 에이전트를 사용하는 경우 임시 수명 문제가 이러한 에이전트에 적용되지 않으므로 해결 방법 없이 Docker 계층을 캐시할 수 있습니다.

x64 이외의 아키텍처용 Linux 컨테이너 이미지를 빌드하려면 어떻게 해야 하나요?

Microsoft 호스팅 Linux 에이전트를 사용하는 경우 x64 아키텍처에 대한 Linux 컨테이너 이미지를 만듭니다. x86 또는 ARM 프로세서와 같은 다른 아키텍처에 대한 이미지를 만들려면 QEMU와 같은 컴퓨터 에뮬레이터를 사용할 수 있습니다.

다음 단계에서는 QEMU를 사용하여 ARM 프로세서 컨테이너 이미지를 만드는 방법을 보여줍니다.

  1. 대상 아키텍처와 일치하는 기본 이미지를 사용하여 Dockerfile을 작성합니다.

    FROM arm64v8/alpine:latest
    
  2. 이미지를 빌드하기 전에 작업에서 다음 스크립트를 실행합니다.

    # register QEMU binary - this can be done by running the following image
    docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # build your image
    

자세한 내용은 GitHub의 qemu-user-static을 참조하세요.

컨테이너화된 애플리케이션에 대한 테스트를 실행하고 테스트 결과를 게시할 어떻게 할까요? 있나요?

컨테이너화된 애플리케이션을 테스트하고 결과 테스트 결과를 게시하는 다양한 옵션은 테스트 결과 게시 태스크를 참조 하세요.

다음 단계

컨테이너 이미지를 빌드한 후 Azure Container Registry, Docker Hub 또는 Google Container Registry에 이미지를 푸시합니다. 컨테이너 레지스트리에 이미지를 푸시하는 방법을 알아보려면 다음 문서 중 하나를 계속 진행합니다.