Aracılığıyla paylaş


Azure Container Apps'de Flask veya FastAPI web uygulaması dağıtma

Bu öğreticide bir Python Flask veya FastAPI web uygulamasını kapsayıcıya alma ve Azure Container Apps'ye dağıtma işlemleri gösterilmektedir. Azure Container Apps hem yerleşik görüntüleri hem de özel görüntüleri barındırmak için Docker kapsayıcı teknolojisini kullanır. Azure 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 Azure CLI kullanarak bir Docker görüntüsü oluşturacak ve bunu Azure Container Apps'e dağıtacaksınız. ayrıca Visual Studio Code ve Azure Araçları Uzantısı kullanarak da dağıtabilirsiniz.

Önkoşullar

Bu eğitimi tamamlamak için şunlara ihtiyacınız olacak:

Ö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", "--config", "gunicorn.conf.py", "app:app"]

Bu örnekte 50505 kapsayıcı bağlantı noktası (iç) kullanılır, ancak herhangi bir ücretsiz bağlantı noktasını kullanabilirsiniz.

requirements.txt dosyasının gunicorn içerdiğinden emin olmak için dosyayı kontrol edin.

Flask==3.1.0
gunicorn

Gunicorn'u yapılandır

Gunicorn.conf.py dosyası kullanarak Gunicorn'ı yapılandırabilirsiniz. gunicorn.conf.py dosyası çalıştırdığınız gunicorndizinde olduğunda ENTRYPOINT dosyasında veya CMD yönergesinde 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ı Gunicorn'un çalışan sayısını kullanılabilir CPU çekirdeği sayısına göre artıracak şekilde 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

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

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

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

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

docker build --tag flask-demo .

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 yerel olarak çalıştığını görmek için tarayıcınızda açın http://localhost:5000 .

--detach seçeneği, kapsayıcıyı arka planda çalıştırır. Seçenek --publish, kapsayıcı bağlantı noktasını konak üzerindeki bir bağlantı noktasına eşler. Ana bilgisayar bağlantı noktası (dış) çiftte ilk sıradadır, container bağlantı noktası (iç) ise ikinci sıradadır. Daha fazla bilgi için bkz Docker çalıştırma referansı.

web uygulamasını Azure dağıtma

Docker görüntüsünü Azure Container Apps dağıtmak için az containerapp up komutunu kullanın. (Bash kabuğu için aşağıdaki komutlar verilmiştir. Devam karakterini (\) diğer kabuklar için uygun şekilde değiştirin.

az containerapp up \
  --resource-group web-flask-aca-rg --name web-aca-app \
  --ingress external --target-port 50505 --source .

Dağıtım tamamlandığında, içinde aşağıdaki kaynakları içeren bir kaynak grubunuz olur:

  • bir Azure Container Registry
  • Kapsayıcı Uygulama Ortamı
  • Web uygulaması görüntüsünü çalıştıran bir Kapsayıcı Uygulaması
  • Log Analytics çalışma alanı

Komutun çıktısı az containerapp up , dağıtılan uygulamanın URL'sini içerir. web uygulamasının Azure çalıştığını görmek için tarayıcınızda URL'yi açın. URL aşağıdaki https://web-aca-app.<generated-text>.<location-info>.azurecontainerapps.io<generated-text><location-info> gibi görünür ve dağıtımınıza özeldir.

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

Kod güncelleştirmeleri yaptıktan sonra önceki az containerapp up komutu yeniden çalıştırın. Komut, görüntüyü yeniden oluşturur ve Azure Container Apps'e yeniden dağıtır. Komutu yeniden çalıştırdığınızda, kaynak grubunun ve uygulamanın zaten var olduğunu algılar ve yalnızca kapsayıcı uygulamasını güncelleştirir.

Daha karmaşık güncelleştirme senaryolarında, kapsayıcı uygulamasını güncelleştirmek için az acr build ve az containerapp update komutlarını birlikte kullanarak yeniden dağıtabilirsiniz.

Temizleme

Bu öğreticide oluşturduğunuz tüm Azure kaynakları aynı kaynak grubunda yer alır. Kaynak grubunun kaldırılması, kaynak grubundaki tüm kaynakları kaldırır. 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-flask-aca-rg

Grubu Azure portalında veya Visual Studio CodeAzure Araçları Uzantısı kullanarak da kaldırabilirsiniz.

Sonraki Adımlar

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