자습서: 지역 웹앱 배포를 위해 업데이트된 컨테이너 이미지를 지리적으로 복제된 컨테이너 레지스트리로 푸시
세 부분으로 이루어진 자습서 시리즈의 세 번째 부분입니다. 이전 자습서에서 두 개의 서로 다른 지역 웹앱 배포에 대해 지역에서 복제가 구성되었습니다. 이 자습서에서는 먼저 애플리케이션을 수정한 다음, 새 컨테이너 이미지를 빌드하고 지역에서 복제된 레지스트리를 푸시합니다. 마지막으로 웹앱 인스턴스 모두에서 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를 선택합니다.
각 Webhook를 선택하여 해당 호출 및 응답의 기록을 봅니다. 두 Webhook의 로그에 푸시 작업에 대한 행이 표시됩니다. 여기에서 미국 서부 지역에 있는 Webhook에 대한 로그는 이전 단계에서 docker push
에 의해 트리거되는 푸시 동작을 보여 줍니다.
업데이트된 웹앱 보기
Webhook는 두 지역 웹앱에 업데이트된 컨테이너를 자동으로 배포하는 레지스트리에 새 이미지가 푸시됐음을 Web Apps에 알립니다.
웹 브라우저에서 두 지역 웹앱 배포로 이동하여 애플리케이션이 두 배포 모두에서 업데이트되었는지 확인합니다. 참고로 각 App Service 개요 탭의 상단 오른쪽에서 배포된 웹앱에 대한 URL을 찾을 수 있습니다.
업데이트된 애플리케이션을 보려면 App Service 개요에서 링크를 선택합니다. 미국 서부에서 실행되는 앱의 예제 보기는 다음과 같습니다.
브라우저에서 확인하여 업데이트된 컨테이너 이미지가 미국 동부 배포에 배포되었는지 확인합니다.
단일 docker push
를 사용하여 두 지역 웹앱 배포에서 실행되는 웹 애플리케이션을 자동으로 업데이트했습니다. 그리고 Azure Container Registry는 각 배포와 가장 가까이 있는 리포지토리의 컨테이너 이미지를 제공했습니다.
다음 단계
이 자습서에서는 지역에서 복제된 레지스트리에 새 버전의 웹 애플리케이션 컨테이너를 업데이트 및 푸시했습니다. Azure Container Registry의 웹후크가 가장 가까운 레지스트리 복제본에서 로컬 끌어오기를 트리거하는 업데이트를 Web App for Containers에 알렸습니다.
ACR Build: 자동화된 이미지 빌드 및 패치
지역 복제 외에도 ACR Build는 컨테이너 배포 파이프라인을 최적화할 수 있는 Azure Container Registry의 또 다른 기능입니다. ACR Build 개요부터 시작하여 그 기능을 알아보세요.