Aracılığıyla paylaş


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

Bu öğreticide Python Flask veya FastAPI web uygulamasını kapsayıcılı hale getirmek ve Azure Container Apps'e dağıtmak 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'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 Azure CLI kullanarak bir Docker görüntüsü oluşturup Azure Container Apps'e dağıtacaksınız. Visual Studio Code ve Azure Araçları Uzantısı ile de dağıtım yapabilirsiniz.

Ö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", "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==3.1.0
gunicorn

Gunicorn yapılandırma

Gunicorn bir gunicorn.conf.py dosyasıyla yapılandırılabilir. gunicorn.conf.py dosyası çalıştırıldığı gunicorn dizinde bulunduğ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 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.

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

Docker görüntüsünü Azure Container Apps'e 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:

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

Dağıtılan uygulamanın URL'si komutun çıkışındadır az containerapp up . Web uygulamasının Azure'da çalıştığını görmek için URL'yi tarayıcınızda açın. URL'nin biçimi aşağıdaki https://web-aca-app.<generated-text>.<location-info>.azurecontainerapps.io<generated-text> gibi görünür ve burada dağıtımınıza <location-info> özeldir.

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

Kod güncelleştirmeleri yaptıktan sonra önceki az containerapp up komutu yeniden çalıştırarak görüntüyü yeniden derleyebilir ve Azure Container Apps'e yeniden dağıtabilirsiniz. Komutu yeniden çalıştırmak, kaynak grubunun ve uygulamanın zaten var olduğunu hesaba ekler ve yalnızca kapsayıcı uygulamasını güncelleştirir.

Daha karmaşık güncelleştirme senaryolarında az acr build ve az containerapp update komutları ile birlikte yeniden dağıtarak kapsayıcı uygulamasını güncelleştirebilirsiniz.

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-flask-aca-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 için aşağıdaki kaynaklara bakın: