Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu öğreticide, Kapsayıcılar için Web Uygulaması özelliğini kullanarak Azure Uygulaması Hizmeti'nePython Flask veya FastAPI web uygulamasının nasıl dağıtılacağı gösterilmektedir. Bu yaklaşım, tam olarak yönetilen bir platformun avantajlarını isteyen geliştiriciler için kolaylaştırılmış bir yol sağlarken, uygulamalarını dahil edilen tüm bağımlılıklarla tek bir kapsayıcılı yapıt olarak dağıtı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 Docker'ı kullanarak isteğe bağlı olarak bir Docker görüntüsünü yerel olarak derleyip test edebilirsiniz. Ardından Docker görüntüsünü AzureContainer Registry'ye (ACR) göndermek ve Azure App Service'e dağıtmak için Azure CLI'yi kullanırsınız. Web uygulaması, Azure rol tabanlı erişim denetimi (RBAC) kullanarak görüntüyü ACR'den çekmek için güvenli, parolasız erişim için sistem tarafından atanan yönetilen kimliğiyle yapılandırılır. Ayrıca, Azure Araçları Uzantısı'nınyü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, Azure App Service'e dağıtılabilir bir Docker görüntüsünün nasıl oluşturulacağı gösterilmektedir. Ancak, App Service'e dağıtmak için Docker görüntüsü kullanmak gerekli değildir. Uygulama kodunuzu docker görüntüsü oluşturmadan doğrudan yerel çalışma alanınızdan App Service'e de 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:
Azure Uygulaması Service ve Azure Container Registry'ye bir web uygulaması dağıtabileceğiniz bir Azure hesabı. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Docker görüntüsü oluşturmak ve App Service'e dağıtmak için Azure CLI . İsteğe bağlı olarak Dockerve Docker CLI bir Docker oluşturup yerel ortamınızda test eder.
Örnek kodunu alma
Yerel ortamınızda kodu alın.
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart.git
cd msdocs-python-flask-webapp-quickstart
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
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.
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
Azure'da oturum açmak için az login komutunu çalıştırın.
az loginAzure CLI sürümünüzün güncel olduğundan emin olmak için az upgrade komutunu çalıştırın.
az upgradeaz group create komutuyla bir grup oluşturun .
RESOURCE_GROUP_NAME=<resource-group-name> LOCATION=<location> az group create --name $RESOURCE_GROUP_NAME --location $LOCATIONAzure 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.
<location>ile seçtiğiniz konumu değiştirin. Belirli SKU'lar belirli konumlarda kullanılamadığından bunu belirten bir hata alabilirsiniz. Farklı bir konum kullanın ve yeniden deneyin.az acr create komutuyla bir Azure Container Registry oluşturun .
<container-registry-name>'ı örneğiniz için benzersiz bir adla değiştirin.CONTAINER_REGISTRY_NAME=<container-registry-name> az acr create --resource-group $RESOURCE_GROOUP_NAME \ --name $CONTAINER_REGISTRY_NAME --sku BasicNot
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
webappacr123adı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.
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 $RESOURCE_GROUP_NAME \
--registry $CONTAINER_REGISTRY_NAME \
--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
az appservice plan komutuyla bir App Service planı oluşturun.
az appservice plan create \ --name webplan \ --resource-group $RESOURCE_GROUP_NAME \ --sku B1 \ --is-linuxAbonelik kimliğinize bir ortam değişkeni ayarlayın. Sonraki komutta
--scopeparametresinde kullanılır.SUBSCRIPTION_ID=$(az account show --query id --output tsv)Ortam değişkeni oluşturma komutu Bash kabuğu için gösterilir. Söz dizimini diğer ortamlar için uygun şekilde değiştirin.
az webapp create komutuyla web uygulamasını oluşturun .
export MSYS_NO_PATHCONV=1 # This line is for Windows users to prevent path conversion issues in Git Bash. az webapp create \ --resource-group $RESOURCE_GROUP_NAME \ --plan webplan --name <container-registry-name> \ --assign-identity [system] \ --role AcrPull \ --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME \ --acr-use-identity --acr-identity [system] \ --container-image-name $CONTAINER_REGISTRY_NAME.azurecr.io/webappsimple:latestNotlar:
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ı
webappacr123bir ad kullanıyorsanız parametreyi uygun şekilde güncelleştirdiğinizden--container-image-nameemin olun.--assign-identity,--roleve--scopeparametreleri web uygulamasında sistem tarafından atanan yönetilen kimliği etkinleştirir ve buAcrPullkimliği kaynak grubunda atar. Bu, yönetilen kimliğe kaynak grubundaki herhangi bir Azure Container Registry'den görüntü çekme izni verir.--acr-use-identityve--acr-identityparametreleri, web uygulamasını Azure Container Registry'den görüntü çekmek için sistem tarafından atanan yönetilen kimliğini kullanacak şekilde yapılandırır.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 $RESOURCE_GROUP_NAME --yes --no-wait
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: