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.
Öğretici serisinin bu bölümünde, yerel bilgisayarınızda kapsayıcılı Django veya Flask Python web uygulaması oluşturmayı ve çalıştırmayı öğreneceksiniz. Bu uygulamanın verilerini depolamak için yerel mongoDB örneğini veya MongoDB için Azure Cosmos DB'yi kullanabilirsiniz. Bu makale, 5 bölümden oluşan bir öğretici serisinin 2. bölümüdür. Bu makaleye başlamadan önce 1. bölümü tamamlamanız gerekir.
Aşağıdaki hizmet diyagramı, bu makalede ele alınan yerel bileşenleri vurgular. Bu makalede, MongoDB için Azure Cosmos DB yerel bir MongoDB örneği yerine yerel bir Docker görüntüsüyle kullanmayı da öğreneceksiniz.
Örnek Python uygulamasını kopyalama veya indirme
Bu bölümde, Docker görüntüsü oluşturmak için kullandığınız örnek Python uygulamasını kopyalayabilir veya indirebilirsiniz. Django veya Flask Python web uygulaması arasında seçim yapabilirsiniz. Kendi Python web uygulamanız varsa, bunun yerine bunu kullanmayı seçebilirsiniz. Kendi Python web uygulamanızı kullanıyorsanız, uygulamanızın kök klasöründe bir Dockerfile olduğundan ve mongoDB veritabanına bağlanaabildiğinden emin olun.
Aşağıdaki komutlardan birini kullanarak Django veya Flask deposunu yerel bir klasöre kopyalayın:
Kopyalanan deponuzun kök klasörüne gidin.
Docker görüntüsü oluşturma
Bu bölümde, Visual Studio Code veya Azure CLI kullanarak Python web uygulaması için bir Docker görüntüsü oluşturacaksınız. Docker görüntüsü Python web uygulamasını, bağımlılıklarını ve Python çalışma zamanını içerir. Docker görüntüsünü, görüntünün içeriğini ve davranışını tanımlayan bir Dockerfile'dan oluşturursunuz. Dockerfile, kopyaladığınız veya indirdiğiniz (veya kendiniz sağladığınız) örnek uygulamanın kök klasöründedir.
Tavsiye
Azure CLI'yı kullanmaya yeni başladıysanız Azure CLI'yi yerel olarak indirip yüklemeyi veya Azure Cloud Shell'de Azure CLI komutlarını çalıştırmayı öğrenmek için bkz. Azure CLI ile çalışmaya başlama.
Docker CLI kullanarak Docker görüntüsünü oluşturmak için Docker gerekir. Docker'ı yükledikten sonra bir terminal penceresi açın ve örnek klasöre gidin.
Uyarı
Bu bölümdeki adımlar Docker daemon'unun çalışmasını gerektirir. Windows gibi bazı yüklemelerde, devam etmeden önce daemon'ı başlatan Docker Desktop açmanız gerekir.
Örnek uygulamanın kök klasöründe aşağıdaki komutu çalıştırarak Docker'ın erişilebilir olduğunu onaylayın.
dockerBu komutu çalıştırdıktan sonra Docker CLI ile ilgili yardım görürseniz Docker erişilebilir durumdadır. Aksi takdirde, Docker'ın yüklü olduğundan ve kabuğunuza Docker CLI'ye erişim izni verdiğinizden emin olun.
Docker build komutunu kullanarak Python web uygulaması için Docker görüntüsünü oluşturun .
Komutun genel biçimi şeklindedir
docker build --rm --pull --file "<path-to-project-root>/Dockerfile" --label "com.microsoft.created-by=docker-cli" --tag "<container-name>:latest" "<path-to-project-root>".Projenin kök klasöründeyseniz Docker görüntüsünü oluşturmak için aşağıdaki komutu kullanın. Komutun sonundaki nokta (".") komutun çalıştırıldığı geçerli dizine başvurur. Yeniden derlemeye zorlamak için şunu ekleyin:
--no-cache.Uyarı
Örnek depo Python 3.8 kullanır. Kendi Dockerfile'ınızı oluşturuyorsanız 3.12 veya 3.13 gibi desteklenen bir Python sürümü kullanın. Şu anda desteklenen sürümler için bkz. Python sürüm desteği.
#!/bin/bash docker build --rm --pull \ --file "Dockerfile" \ --label "com.microsoft.created-by=docker-cli" \ --tag "msdocspythoncontainerwebapp:latest" \ .Docker images komutunu kullanarak görüntünün başarıyla oluşturulduğundan emin olun.
docker imagesKomutu, diğer görüntü özellikleri arasında REPOSITORY adı, TAG ve CREATED tarihlerine göre görüntülerin listesini döndürür.
Bu noktada, "latest" etiketine sahip "msdocspythoncontainerwebapp" adlı yerel bir Docker görüntüye sahipsiniz. Etiketler sürüm ayrıntılarını, amaçlanan kullanımı, kararlılığı ve diğer ilgili bilgileri tanımlamaya yardımcı olur. Daha fazla bilgi için bkz . Kapsayıcı görüntülerini etiketleme ve sürüm oluşturma önerileri.
Uyarı
Vs Code'dan oluşturduğunuz görüntüleri veya Docker CLI'yi doğrudan Docker Desktop uygulamasını kullanarak görüntüleyebilirsiniz.
MongoDB'i ayarlama
Python web uygulamanız, verileri depolamak için bir MongoDB veritabanı ve her ikisi de restaurants_reviews adlı bir koleksiyon gerektirir. Bu öğreticide, veritabanı ve koleksiyon oluşturmak ve bunlara erişmek için hem MongoDB'nin yerel yüklemesini hem de MongoDB için Azure Cosmos DB örneğini kullanacaksınız.
Önemli
Üretimde kullandığınız mongoDB veritabanını kullanmayın. Bu öğreticide, bu MongoDB örneklerinden birine ait MongoDB bağlantı dizesini bir ortam değişkeninde depolayın. Kapsayıcınızı docker inspect kullanarak denetleyebilen herkes bu bağlantı dizesi görebilir.
Yerel MongoDB
Azure CLI kullanarak mongoDB'nin yerel bir örneğini oluşturun.
Henüz yüklü değilse MongoDB'yi yükleyin.
MongoDB'nin yüklü olup olmadığını denetlemek için MongoDB Kabuğunu (mongosh) kullanın. Aşağıdaki komutlar işe yaramazsa mongosh'u açıkça yüklemeniz veya mongosh'u MongoDB sunucunuza bağlamanız gerekebilir.
MongoDB kabuğunu açmak ve hem MongoDB kabuğunun hem de MongoDB sunucusunun sürümünü almak için aşağıdaki komutu kullanın:
mongoshTavsiye
Sisteminizde yüklü mongoDB sunucusunun yalnızca sürümünü döndürmek için MongoDB kabuğunu kapatıp yeniden açın ve aşağıdaki komutu kullanın:
mongosh --quiet --exec 'db.version()'Bazı kurulumlarda bash kabuğunuzda mongo daemon'unu doğrudan çağırabilirsiniz.
mongod --version
klasöründeki mongod.cfg dosyasını
\MongoDB\Server\8.0\bindüzenleyin ve anahtarına bilgisayarınızınbindIPyerel IP adresini ekleyin.Uyarı
Yapılandırma dosyası yolu işletim sistemine ve MongoDB sürümüne göre değişir. macOS'te
/usr/local/etc/mongod.confveya/opt/homebrew/etc/mongod.confifadesini arayın. Linux'ta/etc/mongod.conföğesini kontrol edin.bindipMongoD yapılandırma dosyasındaki anahtar, MongoDB'nin istemci bağlantıları için dinlediğini konak adlarını ve IP adreslerini tanımlar. Yerel geliştirme bilgisayarınızın geçerli IP'sini ekleyin. Docker kapsayıcısında yerel olarak çalışan örnek Python web uygulaması bu adresle konak bilgisayara iletişim kurar.Örneğin, yapılandırma dosyasının bir bölümü şu şekilde görünmelidir:
net: port: 27017 bindIp: 127.0.0.1,<local-ip-address>Değişikliklerinizi bu yapılandırma dosyasına kaydedin.
Önemli
Bu yapılandırma dosyasında yaptığınız değişiklikleri kaydetmek için yönetici ayrıcalıklarına sahip olmanız gerekir.
Yapılandırma dosyasındaki değişiklikleri almak için MongoDB'yi yeniden başlatın.
Bir MongoDB kabuğu açın ve aşağıdaki komutu çalıştırarak veritabanı adını "restaurants_reviews" ve koleksiyon adını "restaurants_reviews" olarak ayarlayın. VS Code MongoDB uzantısı veya mongoDB kullanan başka bir araçla da veritabanı ve koleksiyon oluşturabilirsiniz.
> help > use restaurants_reviews > db.restaurants_reviews.insertOne({}) > show dbs > exit
Önceki adımı tamamladıktan sonra yerel MongoDB bağlantı dizesi "mongodb://127.0.0.1:27017/", veritabanı adı "restaurants_reviews" ve koleksiyon adı "restaurants_reviews" olur.
MongoDB için Azure Cosmos DB
Şimdi Azure CLI kullanarak MongoDB örneği için bir Azure Cosmos DB oluşturun.
Uyarı
Bu öğretici serisinin 4. bölümünde, Web uygulamasını Azure App Service'te çalıştırmak için MongoDB için Azure Cosmos DB örneğini kullanırsınız.
Aşağıdaki betiği çalıştırmadan önce konumu, kaynak grubunu ve MongoDB için Azure Cosmos DB hesap adını uygun değerlerle değiştirin (isteğe bağlı). İşiniz bittiğinde bunların silinmesini kolaylaştırmak için bu öğreticide oluşturduğunuz tüm Azure kaynakları için aynı kaynak grubunu kullanın.
Komut dosyasının çalıştırılması birkaç dakika sürer. Komutun az cosmosdb create tamamlanması 5-10 dakika sürebilir.
#!/bin/bash
# LOCATION: The Azure region. Use the "az account list-locations -o table" command to find a region near you.
LOCATION='westus'
# RESOURCE_GROUP_NAME: The resource group name, which can contain underscores, hyphens, periods, parenthesis, letters, and numbers.
RESOURCE_GROUP_NAME='msdocs-web-app-rg'
# ACCOUNT_NAME: The Azure Cosmos DB for MongDB account name, which can contain lowercase letters, hyphens, and numbers.
ACCOUNT_NAME='msdocs-cosmos-db-account-name'
# Create a resource group
echo "Creating resource group $RESOURCE_GROUP_NAME in $LOCATION..."
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
# Create a Cosmos account for MongoDB API
echo "Creating $ACCOUNT_NAME. This command may take a while to complete."
az cosmosdb create --name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --kind MongoDB
# Create a MongoDB API database
echo "Creating database restaurants_reviews"
az cosmosdb mongodb database create --account-name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --name restaurants_reviews
# Create a MongoDB API collection
echo "Creating collection restaurants_reviews"
az cosmosdb mongodb collection create --account-name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --database-name restaurants_reviews --name restaurants_reviews
# Get the connection string for the MongoDB database
echo "Get the connection string for the MongoDB account"
az cosmosdb keys list --name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --type connection-strings
echo "Copy the Primary MongoDB Connection String from the list above"
Betik tamamlandığında, son komutun çıktısından Birincil MongoDB Bağlantı Dizesi'ni panonuza veya başka bir konuma kopyalayın.
{
"connectionStrings": [
{
"connectionString": ""mongodb://msdocs-cosmos-db:pnaMGVtGIRAZHUjsg4GJBCZMBJ0trV4eg2IcZf1TqV...5oONz0WX14Ph0Ha5IeYACDbuVrBPA==@msdocs-cosmos-db.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName=@msdocs-cosmos-db@"",
"description": "Primary MongoDB Connection String",
"keyKind": "Primary",
"type": "MongoDB"
},
...
]
}
Önceki adımı tamamladıktan sonra MongoDB için Azure Cosmos DB bağlantı dizesi mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>, adlı bir veritabanı ve adlı restaurants_reviewsrestaurants_reviewsbir koleksiyonunuz vardır.
Azure CLI kullanarak MongoDB hesabı için Cosmos DB oluşturma ve veritabanı ve koleksiyon oluşturma hakkında daha fazla bilgi için bkz. Azure CLI kullanarak Azure Cosmos DB için MongoDB için veritabanı ve koleksiyon oluşturma. PowerShell' i, VS Code Azure Veritabanları uzantısını ve Azure portalını da kullanabilirsiniz.
Tavsiye
VS Code Azure Veritabanları uzantısında MongoDB sunucusuna sağ tıklayıp bağlantı dizesini alabilirsiniz.
Görüntüyü bir kapsayıcıda yerel olarak çalıştırma
Artık yerel MongoDB örneğinizi veya MongoDB için Cosmos DB örneğinizi kullanarak Docker kapsayıcısını yerel olarak çalıştırmaya hazırsınız. Öğreticinin bu bölümünde, görüntüyü yerel olarak çalıştırmak için VS Code veya Azure CLI kullanmayı öğreneceksiniz. Örnek uygulama, ortam değişkenleri kullanılarak MongoDB bağlantı bilgilerinin geçirilmesini bekler. Ortam değişkenlerini yerel olarak kapsayıcıya geçirmek için çeşitli yöntemler vardır. Her yöntemin güvenlik açısından avantajları ve dezavantajları vardır. Kapsayıcıdaki kodda hassas bilgileri denetlemekten veya bırakmaktan kaçının.
Uyarı
Web uygulamasını Azure dağıttığınızda, web uygulaması App Service yapılandırma ayarları olarak ayarlanan ortam değerlerinden bağlantı bilgilerini alır. Yerel geliştirme ortamı senaryosunda yapılan değişikliklerin hiçbiri geçerli değildir.
MongoDB yerel
Docker görüntüsünü yerel olarak çalıştırmak için yerel MongoDB örneğiniz ile aşağıdaki komutları kullanın.
Görüntünün en son sürümünü çalıştırın.
#!/bin/bash # Define variables # Set the port number based on the framework being used: # 8000 for Django, 5000 for Flask export PORT=<port-number> # Replace with actual port (e.g., 8000 or 5000) # Set your computer''s IP address (replace with actual IP) export YOUR_IP_ADDRESS=<your-computer-ip-address> # Replace with actual IP address # Run the Docker container with the required environment variables docker run --rm -it \ --publish "$PORT:$PORT" \ --add-host "mongoservice:$YOUR_IP_ADDRESS" \ --env CONNECTION_STRING=mongodb://mongoservice:27017 \ --env DB_NAME=restaurants_reviews \ --env COLLECTION_NAME=restaurants_reviews \ --env SECRET_KEY="supersecretkeythatispassedtopythonapp" \ msdocspythoncontainerwebapp:latestKonteynerin çalıştığını onaylayın. Başka bir konsol penceresinde docker container ls komutunu çalıştırın.
docker container lsKapsayıcınızı
msdocspythoncontainerwebapp:latestlistede görürsünüz. ÇıkışınNAMESsütununa vePORTSsütununa dikkat edin. Kapsayıcıyı durdurmak için kapsayıcı adını kullanın.Web uygulamasını test edin.
Django için
http://127.0.0.1:8000, Flask içinhttp://127.0.0.1:5000/adresine gidin.Kapsayıcıyı kapatın.
docker container stop <container-name>
MongoDB için Azure Cosmos DB
Docker görüntüsünü Azure'da çalıştırmak için MongoDB için Azure Cosmos DB örneğinizle aşağıdaki komutları kullanın.
Görüntünün en son sürümünü çalıştırın.
#!/bin/bash # PORT=8000 for Django and 5000 for Flask export PORT=<port-number> export CONNECTION_STRING="<connection-string>" docker run --rm -it \ --publish $PORT:$PORT/tcp \ --env CONNECTION_STRING=$CONNECTION_STRING \ --env DB_NAME=restaurants_reviews \ --env COLLECTION_NAME=restaurants_reviews \ --env SECRET_KEY=supersecretkeythatyougenerate \ msdocspythoncontainerwebapp:latestTanıtım amacıyla, bu örnekte hassas bilgilerin geçirilmesi gösterilmektedir. docker container inspect komutunu kullanarak kapsayıcıyı inceleyerek bağlantı dizesi bilgilerini görüntüleyebilirsiniz. Gizli dizileri işlemenin bir diğer yolu da Docker'ın BuildKit işlevselliğini kullanmaktır.
Yeni bir konsol penceresi açın ve kapsayıcının çalıştığını onaylamak için aşağıdaki docker container ls komutunu çalıştırın.
docker container lsKapsayıcınızı
msdocspythoncontainerwebapp:latestlistede görürsünüz. ÇıkışınNAMESsütununa vePORTSsütununa dikkat edin. Kapsayıcıyı durdurmak için kapsayıcı adını kullanın.Web uygulamasını test edin.
Django için
http://127.0.0.1:8000, Flask içinhttp://127.0.0.1:5000/adresine gidin.Kapsayıcıyı kapatın.
docker container stop <container-name>
Ayrıca bir görüntüden kapsayıcı başlatabilir ve Docker Desktop uygulamasını kullanarak durdurabilirsiniz.