title | intro | versions | type | topics | redirect_from | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Deploying Docker to Azure App Service |
You can deploy a Docker container to Azure App Service as part of your continuous deployment (CD) workflows. |
|
tutorial |
|
|
{% data reusables.actions.enterprise-github-hosted-runners %}
This guide explains how to use {% data variables.product.prodname_actions %} to build and deploy a Docker container to Azure App Service.
Note
{% data reusables.actions.about-oidc-short-overview %} and AUTOTITLE.
Before creating your {% data variables.product.prodname_actions %} workflow, you will first need to complete the following setup steps:
{% data reusables.actions.create-azure-app-plan %}
-
Create a web app.
For example, you can use the Azure CLI to create an Azure App Service web app:
az webapp create \ --name MY_WEBAPP_NAME \ --plan MY_APP_SERVICE_PLAN \ --resource-group MY_RESOURCE_GROUP \ --deployment-container-image-name nginx:latest
In the command above, replace the parameters with your own values, where
MY_WEBAPP_NAME
is a new name for the web app.
{% data reusables.actions.create-azure-publish-profile %}
-
Set registry credentials for your web app.
Create a {% data variables.product.pat_v1 %} with the
repo
andread:packages
scopes. For more information, see AUTOTITLE.Set
DOCKER_REGISTRY_SERVER_URL
tohttps://ghcr.io
,DOCKER_REGISTRY_SERVER_USERNAME
to the GitHub username or organization that owns the repository, andDOCKER_REGISTRY_SERVER_PASSWORD
to your {% data variables.product.pat_generic %} from above. This will give your web app credentials so it can pull the container image after your workflow pushes a newly built image to the registry. You can do this with the following Azure CLI command:az webapp config appsettings set \ --name MY_WEBAPP_NAME \ --resource-group MY_RESOURCE_GROUP \ --settings DOCKER_REGISTRY_SERVER_URL=https://ghcr.io DOCKER_REGISTRY_SERVER_USERNAME=MY_REPOSITORY_OWNER DOCKER_REGISTRY_SERVER_PASSWORD=MY_PERSONAL_ACCESS_TOKEN
-
Optionally, configure a deployment environment. {% data reusables.actions.about-environments %}
Once you've completed the prerequisites, you can proceed with creating the workflow.
The following example workflow demonstrates how to build and deploy a Docker container to Azure App Service when there is a push to the main
branch.
Ensure that you set AZURE_WEBAPP_NAME
in the workflow env
key to the name of the web app you created.
{% data reusables.actions.delete-env-key %}
{% data reusables.actions.actions-not-certified-by-github-comment %}
{% data reusables.actions.actions-use-sha-pinning-comment %}
name: Build and deploy a container to an Azure Web App
env:
AZURE_WEBAPP_NAME: MY_WEBAPP_NAME # set this to your application's name
on:
push:
branches:
- main
permissions:
contents: 'read'
packages: 'write'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: {% data reusables.actions.action-checkout %}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b
- name: Log in to GitHub container registry
uses: docker/login-action@8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d
with:
registry: ghcr.io
username: {% raw %}${{ github.actor }}{% endraw %}
password: {% raw %}${{ secrets.GITHUB_TOKEN }}{% endraw %}
- name: Lowercase the repo name
run: echo "REPO=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV}
- name: Build and push container image to registry
uses: docker/build-push-action@9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f
with:
push: true
tags: ghcr.io/{% raw %}${{ env.REPO }}{% endraw %}:{% raw %}${{ github.sha }}{% endraw %}
file: ./Dockerfile
deploy:
runs-on: ubuntu-latest
needs: build
environment:
name: 'production'
url: {% raw %}${{ steps.deploy-to-webapp.outputs.webapp-url }}{% endraw %}
steps:
- name: Lowercase the repo name
run: echo "REPO=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV}
- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@85270a1854658d167ab239bce43949edb336fa7c
with:
app-name: {% raw %}${{ env.AZURE_WEBAPP_NAME }}{% endraw %}
publish-profile: {% raw %}${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}{% endraw %}
images: 'ghcr.io/{% raw %}${{ env.REPO }}{% endraw %}:{% raw %}${{ github.sha }}{% endraw %}'
The following resources may also be useful:
- For the original workflow template, see
azure-container-webapp.yml
in the {% data variables.product.prodname_actions %}starter-workflows
repository. - The action used to deploy the web app is the official Azure
Azure/webapps-deploy
action. - For more examples of GitHub Action workflows that deploy to Azure, see the actions-workflow-samples repository.