자습서: 지역 웹앱 배포를 위해 업데이트된 컨테이너 이미지를 지리적으로 복제된 컨테이너 레지스트리로 푸시

세 부분으로 이루어진 자습서 시리즈의 세 번째 부분입니다. 이전 자습서에서 두 개의 서로 다른 지역 웹앱 배포에 대해 지역에서 복제가 구성되었습니다. 이 자습서에서는 먼저 애플리케이션을 수정한 다음, 새 컨테이너 이미지를 빌드하고 지역에서 복제된 레지스트리를 푸시합니다. 마지막으로 웹앱 인스턴스 모두에서 Azure Container Registry webhook에 의해 자동으로 배포된 변경 내용을 확인합니다.

이 자습서는 시리즈의 마지막 부분입니다.

  • 웹 애플리케이션 HTML 수정
  • Docker 이미지 빌드 및 태그 지정
  • Azure Container Registry에 변경 내용 푸시
  • 두 개의 서로 다른 지역에서 업데이트된 앱 보기

두 개의 Web App for Containers 지역 배포를 아직 구성하지 않은 경우 시리즈의 이전 자습서, Azure Container Registry에서 웹앱 배포로 돌아갑니다.

웹 애플리케이션 수정

이 단계에서는 Azure Container Registry에 업데이트된 컨테이너 이미지를 푸시하면 항상 볼 수 있는 웹 애플리케이션을 변경합니다.

이전 자습서의 GitHub에서 복제한 애플리케이션 원본에서 AcrHelloworld/Views/Home/Index.cshtml 파일을 찾고 원하는 텍스트 편집기에서 엽니다. 기존 <h1> 줄 아래에 다음 줄을 추가합니다.

<h1>MODIFIED</h1>

수정된 Index.cshtml은 다음과 유사하게 표시됩니다.

@{
    ViewData["Title"] = "Azure Container Registry :: Geo-replication";
}
<style>
    body {
        background-image: url('images/azure-regions.png');
        background-size: cover;
    }
    .footer {
        position: fixed;
        bottom: 0px;
        width: 100%;
    }
</style>

<h1 style="text-align:center;color:blue">Hello World from:  @ViewData["REGION"]</h1>
<h1>MODIFIED</h1>
<div class="footer">
    <ul>
        <li>Registry URL: @ViewData["REGISTRYURL"]</li>
        <li>Registry IP: @ViewData["REGISTRYIP"]</li>
        <li>Registry Region: @ViewData["REGION"]</li>
    </ul>
</div>

이미지 다시 빌드

이제 웹 애플리케이션을 업데이트했으므로 해당 컨테이너 이미지를 다시 빌드합니다. 이전처럼 로그인 서버의 FQDN(정규화된 도메인 이름)을 포함한 정규화된 이미지 이름을 태그에 사용합니다.

docker build . -f ./AcrHelloworld/Dockerfile -t <acrName>.azurecr.io/acr-helloworld:v1

Azure Container Registry에 이미지 푸시하기

다음으로, 지역 복제된 레지스트리에 업데이트된 acr-helloworld 컨테이너 이미지를 푸시합니다. 여기에서 단일 docker push 명령을 실행하여 미국 서부미국 동부 지역 모두의 레지스트리 복제본에 업데이트된 이미지를 배포합니다.

docker push <acrName>.azurecr.io/acr-helloworld:v1

docker push 출력은 다음과 비슷합니다.

$ docker push uniqueregistryname.azurecr.io/acr-helloworld:v1
The push refers to a repository [uniqueregistryname.azurecr.io/acr-helloworld]
5b9454e91555: Pushed
d6803756744a: Layer already exists
b7b1f3a15779: Layer already exists
a89567dff12d: Layer already exists
59c7b561ff56: Layer already exists
9a2f9413d9e4: Layer already exists
a75caa09eb1f: Layer already exists
v1: digest: sha256:4c3f2211569346fbe2d1006c18cbea2a4a9dcc1eb3a078608cef70d3a186ec7a size: 1792

Webhook 로그 보기

이미지가 복제 중인 동안 트리거되는 Azure Container Registry webhook를 볼 수 있습니다.

이전 자습서에서 Web App for Containers에 컨테이너를 배포할 때 생성된 지역 webhook를 보려면 Azure Portal에서 컨테이너 레지스트리로 이동한 다음 서비스 아래에서 Webhook를 선택합니다.

Container registry Webhooks in the Azure portal

각 Webhook를 선택하여 해당 호출 및 응답의 기록을 봅니다. 두 Webhook의 로그에 푸시 작업에 대한 행이 표시됩니다. 여기에서 미국 서부 지역에 있는 Webhook에 대한 로그는 이전 단계에서 docker push에 의해 트리거되는 푸시 동작을 보여 줍니다.

Container registry Webhook log in the Azure portal (West US)

업데이트된 웹앱 보기

Webhook는 두 지역 웹앱에 업데이트된 컨테이너를 자동으로 배포하는 레지스트리에 새 이미지가 푸시됐음을 Web Apps에 알립니다.

웹 브라우저에서 두 지역 웹앱 배포로 이동하여 애플리케이션이 두 배포 모두에서 업데이트되었는지 확인합니다. 참고로 각 App Service 개요 탭의 상단 오른쪽에서 배포된 웹앱에 대한 URL을 찾을 수 있습니다.

App Service overview in the Azure portal

업데이트된 애플리케이션을 보려면 App Service 개요에서 링크를 선택합니다. 미국 서부에서 실행되는 앱의 예제 보기는 다음과 같습니다.

Browser view of modified web app running in West US region

브라우저에서 확인하여 업데이트된 컨테이너 이미지가 미국 동부 배포에 배포되었는지 확인합니다.

Browser view of modified web app running in East US region

단일 docker push를 사용하여 두 지역 웹앱 배포에서 실행되는 웹 애플리케이션을 자동으로 업데이트했습니다. 그리고 Azure Container Registry는 각 배포와 가장 가까이 있는 리포지토리의 컨테이너 이미지를 제공했습니다.

다음 단계

이 자습서에서는 지역에서 복제된 레지스트리에 새 버전의 웹 애플리케이션 컨테이너를 업데이트 및 푸시했습니다. Azure Container Registry의 웹후크가 가장 가까운 레지스트리 복제본에서 로컬 끌어오기를 트리거하는 업데이트를 Web App for Containers에 알렸습니다.

ACR Build: 자동화된 이미지 빌드 및 패치

지역 복제 외에도 ACR Build는 컨테이너 배포 파이프라인을 최적화할 수 있는 Azure Container Registry의 또 다른 기능입니다. ACR Build 개요부터 시작하여 그 기능을 알아보세요.

ACR Build를 사용하여 OS 및 프레임워크 패치 자동화