다음을 통해 공유


Azure Container Registry에 Docker 이미지 빌드 및 게시

Azure DevOps Services | Azure DevOps Server 2022

Azure Pipelines를 사용하여 Docker 이미지를 빌드하고 Azure Container Registry에 게시하는 파이프라인 워크플로를 설정할 수 있습니다. 이 아티클에서는 다음 방법을 설명합니다.

  • Azure Container Registry 만들기
  • Azure VM에서 자체 호스팅 에이전트 설정
  • 관리 서비스 ID 설정
  • Docker 레지스트리 서비스 연결 만들기
  • Azure Container Registry에 이미지 빌드 및 게시

필수 조건

코드 가져오기

이 자습서와 함께 수행할 샘플 앱을 포크하거나 복제합니다.

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

Azure Container Registry 만들기

  1. Azure Portal로 이동합니다.

  2. 왼쪽 탐색 패널에서 리소스 만들기를 선택한 다음 컨테이너를 선택한 다음 Container Registry를 선택합니다.

  3. 구독을 선택한 다음 리소스 그룹을 선택하거나 새 그룹을 만듭니다.

  4. 컨테이너 레지스트리의 레지스트리 이름을 입력합니다. 레지스트리 이름은 Azure 내에서 고유해야 하며 5자 이상을 포함해야 합니다.

  5. 원하는 위치SKU를 선택한 다음 검토 + 만들기를 선택합니다.

  6. 설정을 검토한 다음, 완료되면 만들기를 선택합니다.

자체 호스팅 에이전트 VM 설정

Azure Pipelines와 함께 관리 서비스 ID를 사용하여 Azure Container Registry에 Docker 이미지를 게시하려면 Azure VM에서 자체 호스팅 에이전트를 설정해야 합니다.

VM 만들기

  1. Azure Portal로 이동합니다.

  2. 왼쪽 탐색 패널에서 리소스 만들기를 선택한 다음, 가상 머신 ->만들기를 선택합니다.

  3. 구독선택한 다음 컨테이너 레지스트리를 만드는 데 사용한 리소스 그룹을 선택합니다.

  4. 가상 머신에 이름을 지정하고 이미지를 선택합니다.

  5. 사용자 이름암호를 입력한 다음 검토 + 만들기를 선택합니다.

  6. 설정을 검토한 다음 완료되면 만들기를 선택합니다.

  7. 배포가 완료되면 리소스로 이동을 선택합니다.

에이전트 풀 만들기

  1. Azure DevOps 프로젝트에서 기어 아이콘 기어 아이콘 을 선택하여 프로젝트 설정으로 이동합니다.

  2. 에이전트 풀을 선택한 다음, 풀 추가를 선택합니다.

  3. 새로 만들기를 선택한 다음 풀 유형 드롭다운 메뉴에서 자체 호스팅선택합니다.

  4. 풀에 이름을 지정한 다음 모든 파이프라인에 대한 액세스 권한 부여 확인란을 선택합니다.

  5. 완료되면 만들기를 선택합니다.

  6. 이제 방금 만든 풀을 선택한 다음 새 에이전트를 선택합니다.

  7. 이 창의 지침을 사용하여 이전에 만든 VM에서 에이전트를 설정합니다. 복사 단추를 선택하여 다운로드 링크를 클립보드에 복사합니다.

    에이전트를 설정하는 방법을 보여 주는 스크린샷

개인용 액세스 토큰 만들기

  1. Azure DevOps 프로젝트에서 사용자 설정을 선택한 다음 개인용 액세스 토큰을 선택합니다.

  2. 새 토큰을 선택하여 새 개인용 액세스 토큰을 만듭니다.

  3. PAT의 이름을 입력한 다음 만료 날짜를 선택합니다.

  4. 범위에 정의된 사용자 지정을 선택한 다음, 모든 범위 표시를 선택합니다.

  5. 에이전트 풀 선택 -> 읽기 및 관리배포 그룹 ->읽기 및 관리.

  6. 완료되면 만들기를 선택하고 PAT를 안전한 위치에 저장합니다.

자체 호스팅 에이전트 설정

  1. Azure Portal에서 VM에 연결합니다.

  2. 관리자 권한 PowerShell 명령 프롬프트에서 다음 명령을 실행하여 에이전트를 다운로드합니다.

    Invoke-WebRequest -URI <YOUR_AGENT_DOWNLOAD_LINK> -UseBasicParsing  -OutFile <FILE_PATH> 
    ##Example: Invoke-WebRequest -URI https://vstsagentpackage.azureedge.net/agent/2.213.2/vsts-agent-win-x64-2.213.2.zip -OutFile C:\vsts-agent-win-x64-2.213.2.zip
    
  3. 다음 명령을 실행하여 에이전트를 추출하고 만듭니다.

    mkdir agent ; cd agent
    Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("<FILE_PATH>", "$PWD")
    
  4. 다음 명령을 실행하여 에이전트 구성을 시작합니다.

    .\config.cmd
    
  5. 입력을 요청하면 서버 URL을 입력합니다. 예: https://dev.azure.com/fabrikamFiber

  6. 인증 유형이 PAT 인증을 선택하라는 메시지가 표시되면 Enter 키를 누릅니다.

  7. 이전에 만든 개인용 액세스 토큰을 붙여넣은 다음 Enter 키를 누릅니다.

  8. 에이전트 풀의 이름을 입력한 다음 에이전트 이름을 입력합니다.

  9. 작업 폴더의 기본값을 그대로 두고 에이전트를 서비스로 실행하려면 Y를 입력합니다.

    Azure VM에서 에이전트를 설정하는 방법을 보여 주는 스크린샷

  10. 이제 에이전트가 작업 수신 대기를 시작할 준비가 되었으므로 VM에 Docker를 설치해 보겠습니다. 다음 명령을 실행하여 Docker를 다운로드합니다.

    Invoke-WebRequest -URI https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe -OutFile <DOWNLOAD_PATH>
    
  11. 다운로드 경로로 이동한 다음, 다음 명령을 실행하여 Docker를 설치하고 시작합니다.

    Start-Process 'Docker%20Desktop%20Installer.exe' -Wait install
    
  12. 이제 에이전트 폴더로 다시 이동하고 cmd 파일을 실행하여 Azure VM에서 에이전트를 실행합니다.

    .\run.cmd
    
  13. 이제 에이전트가 Azure DevOps 포털의 에이전트 풀 ->Agents 에 나열되어야 합니다.

    에이전트 탭에서 사용할 수 있는 에이전트를 보여 주는 스크린샷

관리 ID 설정

  1. Azure Portal에서 이전에 만든 VM으로 이동합니다.

  2. 왼쪽 탐색 패널에서 ID를 선택한 다음 시스템 할당 ID를 사용하도록 설정합니다.

  3. 완료되면 저장을 선택한 다음 선택 사항을 확인합니다.

    시스템 할당 ID를 사용하도록 설정하는 방법을 보여 주는 스크린샷

  4. Azure 역할 할당을 선택한 다음, 역할 할당 추가를 선택합니다.

  5. 범위 드롭다운 메뉴에서 리소스 그룹을 선택합니다.

  6. 구독리소스 그룹을 선택한 다음, AcrPush 역할을 선택합니다.

  7. 5단계와 6단계를 반복하여 AcrPull 역할을 추가합니다.

    acrpull 및 푸시 역할을 설정하는 방법을 보여 주는 스크린샷.

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

  1. Azure DevOps 프로젝트에서 기어 아이콘 기어 아이콘 을 선택하여 프로젝트 설정으로 이동합니다.

  2. 왼쪽 창에서 서비스 연결을 선택합니다.

  3. 새 서비스 연결을 선택한 다음, Docker 레지스트리를 선택한 다음, 다음을 선택합니다.

  4. Azure Container Registry를 선택한 다음, 인증 유형으로 관리 서비스 ID선택합니다.

  5. 구독 ID 구독 이름Azure Container Registry 로그인 서버를 입력합니다. 이전 단계에서 만든 VM의 시스템 할당 테넌트 ID를 테넌트 ID 텍스트 필드에 붙여넣습니다.

  6. 서비스 연결의 이름을 입력한 다음 모든 파이프라인에 대한 액세스 권한 부여 확인란을 선택합니다. 이 옵션을 선택하려면 서비스 연결 관리자 역할이 필요합니다.

  7. 완료하면 저장을 선택합니다.

    Docker 레지스트리 서비스 연결 MSI를 설정하는 방법을 보여 주는 스크린샷

Azure Container Registry 빌드 및 게시

  1. Azure DevOps 프로젝트에서 파이프라인을 선택한 다음, 파이프라인 만들기를 선택합니다.

  2. 소스 코드를 호스팅하는 서비스(Azure Repos, GitHub 등)를 선택합니다.

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

  4. 기본 yaml 파이프라인을 삭제하고 다음 코드 조각을 사용합니다.

    trigger:
    - main
    
    variables:
      dockerRegistryServiceConnection: '<SERVICE_CONNECTION_NAME>'
      imageRepository: '<IMAGE_NAME>'
      dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
      tag: '$(Build.BuildId)'
    
    stages:
    - stage: Build
      displayName: Build and publish stage
      jobs:
      - job: Build
        displayName: Build job
        pool:
          name: '<YOUR_AGENT_POOL_NAME>'
        steps:
        - task: DockerInstaller@0
          inputs:
            dockerVersion: '17.09.0-ce'
    
        - task: Docker@2
          displayName: Build and publish image to Azure Container Registry
          inputs:
            command: buildAndPush
            containerRegistry: $(dockerRegistryServiceConnection)
            repository: $(imageRepository)
            dockerfile: $(dockerfilePath)
            tags: |
              $(tag)
    
  5. 파이프라인 실행이 완료되면 Azure에서 이미지를 확인할 수 있습니다. Azure Portal에서 Azure Container Registry로 이동한 다음, 리포지토리를 선택합니다.

    Azure Portal의 이미지를 보여 주는 스크린샷.

리소스 정리

이 애플리케이션을 계속 사용하지 않으려면 지속적인 요금이 발생하지 않도록 리소스 그룹을 삭제합니다.

az group delete --name myapp-rg