Azure Uygulaması Hizmetinde kapsayıcılı Flask veya FastAPI web uygulaması dağıtma

Bu öğreticide, Kapsayıcılar için Web Uygulaması özelliğini kullanarak Azure Uygulaması Hizmeti'ne Python Flask veya FastAPI web uygulamasının nasıl dağıtılacağı gösterilmektedir. Kapsayıcılar için Web App, geliştiricilerin tam olarak yönetilen Azure Uygulaması Hizmeti platformundan yararlanması için kolay bir rampa sağlar, ancak bir uygulamayı ve tüm bağımlılıklarını içeren tek bir dağıtılabilir yapıt da ister. Azure'da kapsayıcıları kullanma hakkında daha fazla bilgi için bkz . Azure kapsayıcı seçeneklerini karşılaştırma.

Bu öğreticide , docker CLI ve Docker kullanarak isteğe bağlı olarak bir Docker görüntüsü oluşturup yerel olarak test edebilirsiniz. Azure CLI kullanarak Azure'da bir Docker görüntüsü oluşturup Azure Uygulaması Hizmeti'ne dağıtabilirsiniz. Ayrıca, Azure Araçları Uzantısı'nın yüklü olduğu Visual Studio Code ile de dağıtım yapabilirsiniz. Azure Container Apps'te çalıştırılacak bir Docker görüntüsü oluşturma ve oluşturma örneği için bkz . Azure Container Apps'te Flask veya FastPI web uygulaması dağıtma.

Not

Bu öğreticide Daha sonra App Service'te çalıştırılabilir bir Docker görüntüsü oluşturma işlemi gösterilmektedir. App Service'i kullanmak için bu gerekli değildir. Docker görüntüsü oluşturmadan kodu doğrudan yerel bir çalışma alanından App Service'e dağıtabilirsiniz. Örnek için bkz. Hızlı Başlangıç: Azure Uygulaması Hizmetine Python (Django veya Flask) web uygulaması dağıtma.

Önkoşullar

Bu öğreticiyi tamamlamak için aşağıdakiler gerekir:

Örnek kodunu alma

Yerel ortamınızda kodu alın.

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart.git

Dockerfile ve .dockerignore dosyaları ekleme

Docker'a görüntünün nasıl derleneceğini bildirmek için bir Dockerfile ekleyin. Dockerfile, web isteklerini Flask ve FastAPI çerçevelerine ileten üretim düzeyinde bir web sunucusu olan Gunicorn'un kullanımını belirtir. ENTRYPOINT ve CMD komutları Gunicorn'a uygulama nesnesi isteklerini işlemesini sağlar.

# 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 bu örnekte kapsayıcı bağlantı noktası (iç) için kullanılır, ancak herhangi bir ücretsiz bağlantı noktasını kullanabilirsiniz.

requirements.txt dosyasının içerdiğinden gunicornemin olmak için dosyasını denetleyin.

Flask==2.2.2
gunicorn
Werkzeug==2.2.2

Gereksiz dosyaları görüntüden dışlamak için bir .dockerignore dosyası ekleyin.

.git*
**/*.pyc
.venv/

Gunicorn yapılandırma

Gunicorn bir gunicorn.conf.py dosyasıyla yapılandırılabilir. gunicorn.conf.py dosyası gunicorn'un çalıştırıldığı dizinde bulunduğunda Dockerfile'da konumunu belirtmeniz gerekmez. Yapılandırma dosyasını belirtme hakkında daha fazla bilgi için bkz . Gunicorn ayarları.

Bu öğreticide önerilen yapılandırma dosyası, kullanılabilir CPU çekirdeği sayısına göre çalışan sayısını artırmak için gunicorn yapılandırmaktadır. gunicorn.conf.py dosya ayarları hakkında daha fazla bilgi için bkz. Gunicorn yapılandırması.

# 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

Görüntüyü yerel olarak derleme ve çalıştırma

Görüntüyü yerel olarak oluşturun.

docker build --tag flask-demo .

Not

docker build Komut bir hata döndürürse docker deamon'un çalıştığından emin olun. Windows'ta Docker Desktop'ın çalıştığından emin olun.

Görüntüyü yerel ortamdaki bir Docker kapsayıcısında çalıştırın.

docker run --detach --publish 5000:50505 flask-demo

Web uygulamasının http://localhost:5000 yerel olarak çalıştığını görmek için tarayıcınızda URL'yi açın.

seçeneği --detach kapsayıcıyı arka planda çalıştırır. seçeneği kapsayıcı --publish bağlantı noktasını konak üzerindeki bir bağlantı noktasına eşler. Konak bağlantı noktası (dış) çiftte ilk, kapsayıcı bağlantı noktası (iç) ise ikincidir. Daha fazla bilgi için bkz . Docker çalıştırma başvurusu.

Kaynak grubu ve Azure Container Registry oluşturma

  1. az group create komutuyla bir grup oluşturun .

    az group create --name web-app-simple-rg --location eastus
    

    Azure kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği bir mantıksal kapsayıcıdır. Kaynak grubu oluştururken eastus gibi bir konum belirtirsiniz.

  2. az acr create komutuyla bir Azure Container Registry oluşturun .

    az acr create --resource-group web-app-simple-rg \
    --name webappacr123 --sku Basic --admin-enabled true
    

    Not

    Kayıt defteri adı Azure'da benzersiz olmalıdır. Hata alırsanız farklı bir ad deneyin. Kayıt defteri adları 5-50 alfasayısal karakterden oluşabilir. Kısa çizgilere ve alt çizgilere izin verilmez. Daha fazla bilgi edinmek için bkz . Azure Container Registry ad kuralları. Farklı bir ad kullanıyorsanız, aşağıdaki bölümlerde kayıt defterine ve kayıt defteri yapıtlarına başvuran komutlar yerine webappacr123 adınızı kullandığınızdan emin olun.

    Azure Container Registry, Azure Container Instances, Azure Uygulaması Service, Azure Kubernetes Service ve diğer hizmetlerde kullanılmak üzere görüntüleri depolayan özel bir Docker kayıt defteridir. Kayıt defteri oluştururken bir ad, SKU ve kaynak grubu belirtirsiniz. İkinci komut, az credential show komutuyla parolayı bir değişkene kaydeder. Parola, sonraki bir adımda kayıt defterinde kimlik doğrulaması yapmak için kullanılır.

  3. Kayıt defteri için parola değerine bir ortam değişkeni ayarlayın.

    $ACR_PASSWORD=(az acr credential show \
    --resource-group web-app-simple-rg \
    --name webappacr123 \
    --query "passwords[?name == 'password'].value" \
    --output tsv)
    

    Ortam değişkeni oluşturma komutu Bash kabuğu için gösterilir. Söz dizimini ve devamlılık karakterini (\) diğer kabuklar için uygun şekilde değiştirin.

    Ayrıca azure portalından kayıt defterine gidip Erişim anahtarları'nı seçerek ve parolayı kopyalayarak da parolayı (ACR_PASSWORD) alabilirsiniz.

Görüntüyü Azure Container Registry'de oluşturma

Az acr build komutuyla Azure'da Docker görüntüsünü oluşturun . Komut geçerli dizindeki Dockerfile dosyasını kullanır ve görüntüyü kayıt defterine gönderir.

az acr build \
  --resource-group web-app-simple-rg \
  --registry webappacr123 \
  --image webappsimple:latest .

--registry seçeneği kayıt defteri adını, seçeneği ise --image görüntü adını belirtir. Resim adı biçimindedir registry.azurecr.io/repository:tag.

Web uygulamasını Azure'a dağıtma

  1. az appservice plan komutuyla bir App Service planı oluşturun.

    az appservice plan create \
    --name webplan \
    --resource-group web-app-simple-rg \
    --sku B1 \
    --is-linux
    
  2. az webapp create komutuyla web uygulamasını oluşturun .

    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 
    

    Notlar:

    • Web uygulamasının adı Azure'da benzersiz olmalıdır. Hata alırsanız farklı bir ad deneyin. Ad alfasayısal karakterler ve kısa çizgilerden oluşabilir, ancak kısa çizgiyle başlayamaz veya bitemez. Daha fazla bilgi edinmek için bkz . Microsoft.Web adı kuralları.

    • Azure Container Registry'niz için farklı webappacr123 bir ad kullanıyorsanız ve --deployment-container-image-name parametrelerini uygun şekilde güncelleştirdiğinizden --docker-registry-server-user emin olun.

    • Web uygulamasının oluşturulması birkaç dakika sürebilir. az webapp log tail komutuyla dağıtım günlüklerini de kontrol edebilirsiniz. Örneğin, az webapp log tail --resource-group web-app-simple-rg --name webappsimple123. İçlerinde "ısınma" olan girdiler görürseniz kapsayıcı dağıtılır.

    • Web uygulamasının URL'si, örneğin şeklindedir<web-app-name>.azurewebsites.nethttps://webappsimple123.azurewebsites.net.

Güncelleştirmeler yapma ve yeniden dağıtma

Kod değişiklikleri yaptıktan sonra az acr build ve az webapp update komutları ile App Service'e yeniden dağıtabilirsiniz.

Temizleme

Bu öğreticide oluşturulan tüm Azure kaynakları aynı kaynak grubunda yer alır. Kaynak grubunu kaldırmak, kaynak grubundaki tüm kaynakları kaldırır ve uygulamanız için kullanılan tüm Azure kaynaklarını kaldırmanın en hızlı yoludur.

Kaynakları kaldırmak için az group delete komutunu kullanın.

az group delete --name web-app-simple-rg

Grubu Azure portalından veya Visual Studio Code'da ve Azure Araçları Uzantısı'nda da kaldırabilirsiniz.

Sonraki adımlar

Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın: