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에 이미지 빌드 및 게시
필수 조건
GitHub 계정 아직 등록하지 않은 경우 무료로 등록하세요.
Azure DevOps 프로젝트의 서비스 연결에 대한 관리자 역할입니다.
활성 구독이 있는 Azure 계정. 아직 등록하지 않은 경우 무료로 등록하세요.
코드 가져오기
이 자습서와 함께 수행할 샘플 앱을 포크하거나 복제합니다.
https://github.com/MicrosoftDocs/pipelines-javascript-docker
Azure Container Registry 만들기
Azure Portal로 이동합니다.
왼쪽 탐색 패널에서 리소스 만들기를 선택한 다음 컨테이너를 선택한 다음 Container Registry를 선택합니다.
구독을 선택한 다음 리소스 그룹을 선택하거나 새 그룹을 만듭니다.
컨테이너 레지스트리의 레지스트리 이름을 입력합니다. 레지스트리 이름은 Azure 내에서 고유해야 하며 5자 이상을 포함해야 합니다.
원하는 위치 및 SKU를 선택한 다음 검토 + 만들기를 선택합니다.
설정을 검토한 다음, 완료되면 만들기를 선택합니다.
자체 호스팅 에이전트 VM 설정
Azure Pipelines와 함께 관리 서비스 ID를 사용하여 Azure Container Registry에 Docker 이미지를 게시하려면 Azure VM에서 자체 호스팅 에이전트를 설정해야 합니다.
VM 만들기
Azure Portal로 이동합니다.
왼쪽 탐색 패널에서 리소스 만들기를 선택한 다음, 가상 머신 ->만들기를 선택합니다.
구독을 선택한 다음 컨테이너 레지스트리를 만드는 데 사용한 리소스 그룹을 선택합니다.
가상 머신에 이름을 지정하고 이미지를 선택합니다.
사용자 이름 및 암호를 입력한 다음 검토 + 만들기를 선택합니다.
설정을 검토한 다음 완료되면 만들기를 선택합니다.
배포가 완료되면 리소스로 이동을 선택합니다.
에이전트 풀 만들기
Azure DevOps 프로젝트에서 기어 아이콘 을 선택하여 프로젝트 설정으로 이동합니다.
에이전트 풀을 선택한 다음, 풀 추가를 선택합니다.
새로 만들기를 선택한 다음 풀 유형 드롭다운 메뉴에서 자체 호스팅을 선택합니다.
풀에 이름을 지정한 다음 모든 파이프라인에 대한 액세스 권한 부여 확인란을 선택합니다.
완료되면 만들기를 선택합니다.
이제 방금 만든 풀을 선택한 다음 새 에이전트를 선택합니다.
이 창의 지침을 사용하여 이전에 만든 VM에서 에이전트를 설정합니다. 복사 단추를 선택하여 다운로드 링크를 클립보드에 복사합니다.
개인용 액세스 토큰 만들기
Azure DevOps 프로젝트에서 사용자 설정을 선택한 다음 개인용 액세스 토큰을 선택합니다.
새 토큰을 선택하여 새 개인용 액세스 토큰을 만듭니다.
PAT의 이름을 입력한 다음 만료 날짜를 선택합니다.
범위에 정의된 사용자 지정을 선택한 다음, 모든 범위 표시를 선택합니다.
에이전트 풀 선택 -> 읽기 및 관리 및 배포 그룹 ->읽기 및 관리.
완료되면 만들기를 선택하고 PAT를 안전한 위치에 저장합니다.
자체 호스팅 에이전트 설정
Azure Portal에서 VM에 연결합니다.
관리자 권한 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
다음 명령을 실행하여 에이전트를 추출하고 만듭니다.
mkdir agent ; cd agent Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("<FILE_PATH>", "$PWD")
다음 명령을 실행하여 에이전트 구성을 시작합니다.
.\config.cmd
입력을 요청하면 서버 URL을 입력합니다. 예: https://dev.azure.com/fabrikamFiber
인증 유형이 PAT 인증을 선택하라는 메시지가 표시되면 Enter 키를 누릅니다.
이전에 만든 개인용 액세스 토큰을 붙여넣은 다음 Enter 키를 누릅니다.
에이전트 풀의 이름을 입력한 다음 에이전트 이름을 입력합니다.
작업 폴더의 기본값을 그대로 두고 에이전트를 서비스로 실행하려면 Y를 입력합니다.
이제 에이전트가 작업 수신 대기를 시작할 준비가 되었으므로 VM에 Docker를 설치해 보겠습니다. 다음 명령을 실행하여 Docker를 다운로드합니다.
Invoke-WebRequest -URI https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe -OutFile <DOWNLOAD_PATH>
다운로드 경로로 이동한 다음, 다음 명령을 실행하여 Docker를 설치하고 시작합니다.
Start-Process 'Docker%20Desktop%20Installer.exe' -Wait install
이제 에이전트 폴더로 다시 이동하고 cmd 파일을 실행하여 Azure VM에서 에이전트를 실행합니다.
.\run.cmd
이제 에이전트가 Azure DevOps 포털의 에이전트 풀 ->Agents 에 나열되어야 합니다.
관리 ID 설정
Azure Portal에서 이전에 만든 VM으로 이동합니다.
왼쪽 탐색 패널에서 ID를 선택한 다음 시스템 할당 ID를 사용하도록 설정합니다.
완료되면 저장을 선택한 다음 선택 사항을 확인합니다.
Azure 역할 할당을 선택한 다음, 역할 할당 추가를 선택합니다.
범위 드롭다운 메뉴에서 리소스 그룹을 선택합니다.
구독 및 리소스 그룹을 선택한 다음, AcrPush 역할을 선택합니다.
5단계와 6단계를 반복하여 AcrPull 역할을 추가합니다.
Docker 레지스트리 서비스 연결 만들기
Azure DevOps 프로젝트에서 기어 아이콘 을 선택하여 프로젝트 설정으로 이동합니다.
왼쪽 창에서 서비스 연결을 선택합니다.
새 서비스 연결을 선택한 다음, Docker 레지스트리를 선택한 다음, 다음을 선택합니다.
Azure Container Registry를 선택한 다음, 인증 유형으로 관리 서비스 ID를 선택합니다.
구독 ID 구독 이름 및 Azure Container Registry 로그인 서버를 입력합니다. 이전 단계에서 만든 VM의 시스템 할당 테넌트 ID를 테넌트 ID 텍스트 필드에 붙여넣습니다.
서비스 연결의 이름을 입력한 다음 모든 파이프라인에 대한 액세스 권한 부여 확인란을 선택합니다. 이 옵션을 선택하려면 서비스 연결 관리자 역할이 필요합니다.
완료하면 저장을 선택합니다.
Azure Container Registry 빌드 및 게시
Azure DevOps 프로젝트에서 파이프라인을 선택한 다음, 파이프라인 만들기를 선택합니다.
소스 코드를 호스팅하는 서비스(Azure Repos, GitHub 등)를 선택합니다.
리포지토리를 선택한 다음 스타터 파이프라인을 선택합니다.
기본 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)
파이프라인 실행이 완료되면 Azure에서 이미지를 확인할 수 있습니다. Azure Portal에서 Azure Container Registry로 이동한 다음, 리포지토리를 선택합니다.
리소스 정리
이 애플리케이션을 계속 사용하지 않으려면 지속적인 요금이 발생하지 않도록 리소스 그룹을 삭제합니다.
az group delete --name myapp-rg