Aracılığıyla paylaş


Kapsayıcılı Python web uygulamasını yerel olarak derleme ve çalıştırma

Öğ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ı öneririz.

Aşağıdaki hizmet diyagramı, bu makalede ele alınan yerel bileşenleri vurgular. Bu makalede, MongdoDB için Azure Cosmos DB'yi MongoDB'nin yerel bir örneği yerine yerel bir Docker görüntüsüyle kullanmayı da öğreneceksiniz.

Yerel bölümün vurgulandığı Kılavuz - Azure'da Container Python Uygulamasının ekran görüntüsü.

Ö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.

  1. Aşağıdaki komutlardan birini kullanarak Django veya Flask deposunu yerel bir klasöre kopyalayın:

    # Django
    git clone https://github.com/Azure-Samples/msdocs-python-django-container-web-app.git
    
  2. Kopyalanan deponuzun kök klasörüne gidin.

    # Django
    cd msdocs-python-django-container-web-app
    

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ü, görüntünün içeriğini ve davranışını tanımlayan bir Dockerfile'dan oluşturulur. 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 gereklidir. Docker yüklendikten 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.

  1. Örnek uygulamanın kök klasöründe aşağıdaki komutu çalıştırarak Docker'ın erişilebilir olduğunu onaylayın.

    docker
    

    Bu 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.

  2. 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.

    #!/bin/bash
    docker build --rm --pull \
      --file "Dockerfile" \
      --label "com.microsoft.create-by=docker-cli" \
      --tag "msdocspythoncontainerwebapp:latest" \
        .
    
  3. Docker images komutunu kullanarak görüntünün başarıyla oluşturulduğundan emin olun.

    docker images
    

    Komutu, 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ı

DOĞRUDAN VS Code'dan veya Docker CLI kullanılarak oluşturulan görüntüler Docker Desktop uygulamasıyla da görüntülenebilir.

MongoDB'i ayarlama

Python web uygulamanız için restaurants_reviews adlı bir MongoDB veritabanı ve verileri depolamak için restaurants_reviews adlı bir koleksiyon gerekir. 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, MongoDB bağlantı dizesini bu MongoDB örneklerinden birine bir ortam değişkeninde depolarsınız (kapsayıcınızı denetleyebilen herkes tarafından gözlemlenebilir ; örneğin kullanarak docker inspect).

Yerel MongoDB

Azure CLI kullanarak mongoDB'nin yerel bir örneğini oluşturarak başlayalım.

  1. MongoDB'yi yükleyin (henüz yüklü değilse).

    MongoDB Kabuğunu (mongosh) kullanarak MongoDB yüklemesini de kontrol edebilirsiniz. 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:

      mongosh
      

      Tavsiye

      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
      
  2. klasöründeki mongod.cfg dosyasını \MongoDB\Server\8.0\bin düzenleyin ve anahtarına bilgisayarınızın bindIP yerel IP adresini ekleyin.

    bindip MongoD 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>
    
  3. 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.

  4. Yapılandırma dosyasındaki değişiklikleri almak için MongoDB'yi yeniden başlatın.

  5. 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 De Azure CLI kullanarak MongoDB için Azure Cosmos DB örneği oluşturalım.

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şturulan tüm Azure kaynakları için aynı kaynak grubunu kullanmanızı öneririz.

Komut dosyasının çalıştırılması birkaç dakika sürer.

#!/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 çıkışı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şkenleriyle MongoDB bağlantı bilgilerinin ona geçirilmesini bekler. Ortam değişkenlerinin kapsayıcıya yerel olarak geçirilmesini sağlamanın çeşitli yolları vardır. Her birinin güvenlik açısından avantajları ve dezavantajları vardır. Herhangi bir hassas bilgiyi denetlemekten veya kapsayıcıdaki kodda hassas bilgileri bırakmaktan kaçınmanız gerekir.

Uyarı

Web uygulaması Azure'a dağıtıldığında, web uygulaması App Service yapılandırma ayarları olarak ayarlanan ortam değerlerinden bağlantı bilgilerini alır ve 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.

  1. 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" \
      --publish 27017:27017 \
      --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:latest
    
  2. Konteynerin çalıştığını onaylayın. Başka bir konsol penceresinde docker container ls komutunu çalıştırın.

    docker container ls
    

    Listedeki "msdocspythoncontainerwebapp:latest:latest" kapsayıcınızı görün. Çıkışın NAMES sütununa ve PORTS sütununa dikkat edin. Kapsayıcıyı durdurmak için kapsayıcı adını kullanın.

  3. Web uygulamasını test edin.

    "http://127.0.0.1:8000"'e gidin; Django ve "http://127.0.0.1:5000/"'e gidin; Flask için."

  4. 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.

  1. 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:latest
    

    Hassas bilgilerin geçirilmesi yalnızca tanıtım amacıyla gösterilir. Bağlantı dizesi bilgileri , docker container inspect komutuyla kapsayıcı incelenerek görüntülenebilir. Gizli dizileri işlemenin bir diğer yolu da Docker'ın BuildKit işlevselliğini kullanmaktır.

  2. Yeni bir konsol penceresi açın, kapsayıcının çalıştığını onaylamak için aşağıdaki docker container ls komutunu çalıştırın.

    docker container ls
    

    Listedeki "msdocspythoncontainerwebapp:latest:latest" kapsayıcınızı görün. Çıkışın NAMES sütununa ve PORTS sütununa dikkat edin. Kapsayıcıyı durdurmak için kapsayıcı adını kullanın.

  3. Web uygulamasını test edin.

    "http://127.0.0.1:8000"'e gidin; Django ve "http://127.0.0.1:5000/"'e gidin; Flask için."

  4. 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ıyla durdurabilirsiniz.

Sonraki adım