Implantar um aplicativo Web Flask ou FastAPI em contêiner no Serviço de Aplicativo do Azure
Este tutorial mostra como implantar um aplicativo Web Python Flask ou FastAPI no Serviço de Aplicativo do Azure usando o recurso Aplicativo Web para Contêineres. O Aplicativo Web para Contêineres fornece uma rampa fácil para os desenvolvedores aproveitarem a plataforma totalmente gerenciada do Serviço de Aplicativo do Azure, mas que também desejam um único artefato implantável contendo um aplicativo e todas as suas dependências. Para obter mais informações sobre como usar contêineres no Azure, consulte Comparando opções de contêiner do Azure.
Neste tutorial, você usa a CLI do Docker e o Docker para, opcionalmente, criar uma imagem do Docker e testá-la localmente. Além disso, você usa a CLI do Azure para criar uma imagem do Docker no Azure e implantá-la no Serviço de Aplicativo do Azure. Você também pode implantar com o Visual Studio Code com a Extensão de Ferramentas do Azure instalada. Para obter um exemplo de criação e criação de uma imagem do Docker para ser executada em Aplicativos de Contêiner do Azure, consulte Implantar um aplicativo Web Flask ou FastPI em Aplicativos de Contêiner do Azure.
Nota
Este tutorial mostra a criação de uma imagem do Docker que pode ser executada no Serviço de Aplicativo. Isso não é necessário para usar o Serviço de Aplicativo. Você pode implantar código diretamente de um espaço de trabalho local no Serviço de Aplicativo sem criar uma imagem do Docker. Para obter um exemplo, consulte Guia de início rápido: implantar um aplicativo Web Python (Django ou Flask) no Serviço de Aplicativo do Azure.
Pré-requisitos
Para concluir este tutorial, precisa de:
Uma conta do Azure onde você pode implantar um aplicativo Web no Serviço de Aplicativo do Azure e no Registro de Contêiner do Azure.
CLI do Azure para criar uma imagem do Docker e implantá-la no Serviço de Aplicativo. E, opcionalmente, o Dockere a CLI do Docker para criar um Docker e testá-lo em seu ambiente local.
Obter o código de exemplo
Em seu ambiente local, obtenha o código.
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart.git
Adicionar arquivos Dockerfile e .dockerignore
Adicione um Dockerfile para instruir o Docker sobre como criar a imagem. O Dockerfile especifica o uso do Gunicorn, um servidor Web de nível de produção que encaminha solicitações da Web para as estruturas Flask e FastAPI. Os comandos ENTRYPOINT e CMD instruem o Gunicorn a lidar com solicitações para o objeto do aplicativo.
# syntax=docker/dockerfile:1
FROM python:3.11
WORKDIR /code
COPY requirements.txt .
RUN pip3 install -r requirements.txt
COPY . .
EXPOSE 50505
ENTRYPOINT ["gunicorn", "app:app"]
50505
é usado para a porta de contêiner (interna) neste exemplo, mas você pode usar qualquer porta livre.
Verifique o ficheiro requirements.txt para se certificar de que contém gunicorn
ficheiros .
Flask==2.2.2
gunicorn
Werkzeug==2.2.2
Adicione um arquivo .dockerignore para excluir arquivos desnecessários da imagem.
.git*
**/*.pyc
.venv/
Configurar gunicorn
Gunicorn pode ser configurado com um arquivo gunicorn.conf.py . Quando o arquivo gunicorn.conf.py está localizado no mesmo diretório onde gunicorn é executado, você não precisa especificar seu local no Dockerfile. Para obter mais informações sobre como especificar o arquivo de configuração, consulte Configurações do Gunicorn.
Neste tutorial, o arquivo de configuração sugerido configura o gunicorn para aumentar seu número de trabalhadores com base no número de núcleos de CPU disponíveis. Para obter mais informações sobre gunicorn.conf.py configurações de arquivo, consulte Configuração do Gunicorn.
# Gunicorn configuration file
import multiprocessing
max_requests = 1000
max_requests_jitter = 50
log_file = "-"
bind = "0.0.0.0:50505"
workers = (multiprocessing.cpu_count() * 2) + 1
threads = workers
timeout = 120
Crie e execute a imagem localmente
Crie a imagem localmente.
docker build --tag flask-demo .
Nota
Se o docker build
comando retornar um erro, verifique se o docker deamon está em execução. No Windows, verifique se o Docker Desktop está em execução.
Execute a imagem localmente num contentor do Docker.
docker run --detach --publish 5000:50505 flask-demo
Abra o http://localhost:5000
URL no navegador para ver o aplicativo Web em execução localmente.
A --detach
opção executa o contêiner em segundo plano. A --publish
opção mapeia a porta do contêiner para uma porta no host. A porta host (externa) é a primeira no par e a porta do contêiner (interna) é a segunda. Para obter mais informações, consulte Referência de execução do Docker.
Criar um grupo de recursos e o Registro de Contêiner do Azure
Crie um grupo com o comando az group create .
az group create --name web-app-simple-rg --location eastus
Um grupo de recursos do Azure é um contentor lógico no qual os recursos do Azure são implementados e geridos. Ao criar um grupo de recursos, você especifica um local, como eastus.
Crie um Registro de Contêiner do Azure com o comando az acr create .
az acr create --resource-group web-app-simple-rg \ --name webappacr123 --sku Basic --admin-enabled true
Nota
O nome do Registro deve ser exclusivo no Azure. Se você receber um erro, tente um nome diferente. Os nomes de registo podem consistir em 5-50 caracteres alfanuméricos. Hífens e sublinhados não são permitidos. Para saber mais, consulte Regras de nome do Registro de Contêiner do Azure. Se você usar um nome diferente, certifique-se de usar seu nome em vez dos
webappacr123
comandos que fazem referência aos artefatos do Registro e do Registro nas seções a seguir.Um Registro de Contêiner do Azure é um registro privado do Docker que armazena imagens para uso em Instâncias de Contêiner do Azure, Serviço de Aplicativo do Azure, Serviço Kubernetes do Azure e outros serviços. Ao criar um registro, especifique um nome, uma SKU e um grupo de recursos. O segundo comando salva a senha em uma variável com o comando az credential show . A senha é usada para autenticar no registro em uma etapa posterior.
Defina uma variável de ambiente para o valor da senha para o registro.
ACR_PASSWORD=$(az acr credential show \ --resource-group web-app-simple-rg \ --name webappacr123 \ --query "passwords[?name == 'password'].value" \ --output tsv)
O comando para criar a variável de ambiente é mostrado para o shell Bash. Altere a sintaxe e o caractere de continuação (
\
) conforme apropriado para outros shells.Também pode obter a palavra-passe (
ACR_PASSWORD
) a partir do portal do Azure acedendo ao registo, selecionando Chaves de acesso e copiando a palavra-passe.
Criar a imagem no Registro de Contêiner do Azure
Crie a imagem do Docker no Azure com o comando az acr build . O comando usa o Dockerfile no diretório atual e envia a imagem para o registro.
az acr build \
--resource-group web-app-simple-rg \
--registry webappacr123 \
--image webappsimple:latest .
A --registry
opção especifica o nome do Registro e a --image
opção especifica o nome da imagem. O nome da imagem está no formato registry.azurecr.io/repository:tag
.
Implantar aplicativo Web no Azure
Crie um plano do Serviço de Aplicativo com o comando az appservice plan .
az appservice plan create \ --name webplan \ --resource-group web-app-simple-rg \ --sku B1 \ --is-linux
Crie o aplicativo Web com o comando az webapp create .
az webapp create \ --resource-group web-app-simple-rg \ --plan webplan --name webappsimple123 \ --docker-registry-server-password $ACR_PASSWORD \ --docker-registry-server-user webappacr123 \ --role acrpull \ --deployment-container-image-name webappacr123.azurecr.io/webappsimple:latest
Notas:
O nome do aplicativo Web deve ser exclusivo no Azure. Se você receber um erro, tente um nome diferente. O nome pode consistir em caracteres alfanuméricos e hífenes, mas não pode começar ou terminar com um hífen. Para saber mais, consulte Regras de nome Microsoft.Web.
Se você estiver usando um nome diferente do
webappacr123
do seu Registro de Contêiner do Azure, certifique-se de atualizar os--docker-registry-server-user
parâmetros e--deployment-container-image-name
apropriadamente.Pode levar alguns minutos para que o aplicativo Web seja criado. Você pode verificar os logs de implantação com o comando az webapp log tail . Por exemplo,
az webapp log tail --resource-group web-app-simple-rg --name webappsimple123
. Se você vir entradas com "aquecimento" neles, o contêiner está sendo implantado.O URL da aplicação Web é
<web-app-name>.azurewebsites.net
, por exemplo,https://webappsimple123.azurewebsites.net
.
Fazer atualizações e reimplantar
Depois de fazer alterações de código, você pode reimplantar no Serviço de Aplicativo com os comandos az acr build e az webapp update .
Limpeza
Todos os recursos do Azure criados neste tutorial estão no mesmo grupo de recursos. A remoção do grupo de recursos remove todos os recursos do grupo de recursos e é a maneira mais rápida de remover todos os recursos do Azure usados para seu aplicativo.
Para remover recursos, use o comando az group delete .
az group delete --name web-app-simple-rg
Você também pode remover o grupo no portal do Azure ou no Visual Studio Code e na Extensão de Ferramentas do Azure.
Próximos passos
Para obter mais informações, consulte os seguintes recursos:
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários