Pulling a new image in a Container App Service
January 21, 2020 - Søren Alsbjerg HørupContainers are now first class citizens in App Services. A Container App Service can be created with a specific image that is pulled from DockerHub or other registry.
Pulling the image only happens when the App Service is started or restarted. Pulling the image automatically seems not to be supported, meaning that one has to manually restart the App Service every-time the image has been updated and needs to be re-pulled.
Luckily, App Service exposes a Webhook which will pull the latest image and restart the container if necessary. This can be enabled by setting Continuous Deployment to On. Afterwards, the Webhook URL can be copied and used as part of a CI/CD pipeline.
The URL has the form:
https://${appservicename}:{password}@{appservicename}.scm.azurewebsites.net/docker/hook
The webhook uses basic authentication. POSTing to the URL will pull the latest image. curl can be used for this purpose as such:
curl --data '' https://\${appservicename}:{password}@{appservicename}.scm.azurewebsites.net/docker/hook
Note: Remember to escape the dollar sign if using a Bash Shell
For CI/CD, this can be easily integrated. Example from one of my github projects:
name: Dockerize
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Login to Docker
run: docker login -u ${{secrets.DOCKER_USERNAME}} -p ${{secrets.DOCKER_PASSWORD}}
- name: Build the Docker image
run: docker build . --file Dockerfile --tag horup/outfitty:latest --tag horup/outfitty:$(date +%s)
- name: Push the Docker image
run: docker push horup/outfitty
- name: Trigger App Service
run: "curl --data '' ${{secrets.APP_SERVICE_WEBHOOK_URL}}"
Here, the last step posts empty data to the Webhook URL. Note that the URL is kept in a secret in Github due to it containing basic authentication credentials. Also remember to escape the dollar sign when keeping this as a secret.
That’s it!