Continuous deployment with Azure Web App and Containers for your private Apps

I’ve recently got chance of exploring Azure Web app and was surprised how simple and useful the Web apps and App service plans are. But the only down side being not so great documentation which are mostly interlinked articles.

Azure web apps are Platform As A Service(PAAS), what it means to us is it provides few features(like auto scaling) out of the box. (click here to know more what web apps).Linux Web apps are based on Docker containers making deployments simple.

Here is the quick tutorial for the complete setup in Azure. For this tutorial I’ve used the Azure cli commands, also you can use azure portal to achieve the same.

Step 1: Create a Resource Group

az group create --name MyRG --location "South Central US"

Step 2: First we start with creating the App service plan (ASP) into the resource group.

az appservice plan create -g MyRG -n MyPlan --is-linux -l "South Central US" --sku S1 --number-of-workers 1

Step 3: Create a Linux web app so that we can host our docker containers.

az webapp create -g MyRG -p MyPlan -n MyUniqueAppName --runtime "node|6.2"

Do not worry about run time, it doesn’t matter as we going to use docker image

Step 4:Enable the port in the Web app, this must be the same port number that is exposed in Docker file

az webapp config appsettings set -g MyRG -n MyUniqueAppName --settings PORT=8000

Step 4: Enable container continuous deployment feature in the Web app created

az webapp deployment container config -n MyUniqueAppName -g MyRG -e true

Step 5: Get Webhook URL of the Web app to trigger aoti deployemnt

az webapp deployment container show-cd-url -n MyUniqueAppName -g MyRG

The above command will echo a URL similar to https://<publishingusername>:<publishingpwd>@<sitename>.scm.azurewebsites.net/docker/hook.

Step 6:Create a container registry to host private images, If the images are public and are available on docker hub then you can skip this step.

az acr create -n MyContregistryxyqwe -g MyRG --sku Standard -l "South Central US" --admin-enabled true

Step 8: Get the credentials of the private registry we created

az acr credential show -g MyRG -n MyContregistryxyqwe

Use one of the above credentials to push the docker image to private registry

Step 7: Add Webhook to the container registry to trigger when the image is pushed to the registry.

az acr webhook create -r <my-cr-name> -n <my-wh-name> --actions push --uri <wh-url-from-step-6> --scope <repo-name:latest_tag>