Azure Machine Learning çıkarımı HTTP sunucusu ile hata ayıklama puanlama betiği

Azure Machine Learning çıkarımı HTTP sunucusu, puanlama işlevinizi bir HTTP uç noktası olarak kullanıma sunan ve Flask sunucu kodunu ve bağımlılıklarını tek bir pakete sarmalayan bir Python paketidir. Azure Machine Learning ile bir modeli dağıtırken kullanılan çıkarım için önceden oluşturulmuş Docker görüntülerine dahildir. Paketi tek başına kullanarak modeli üretim için yerel olarak dağıtabilir ve ayrıca puanlama (giriş) betiğinizi yerel bir geliştirme ortamında kolayca doğrulayabilirsiniz. Puanlama betiğinde bir sorun varsa, sunucu bir hata ve hatanın oluştuğu konumu döndürür.

Sunucu, sürekli tümleştirme ve dağıtım işlem hattında doğrulama geçitleri oluşturmak için de kullanılabilir. Örneğin, adayı betik ile sunucuyu başlatabilir ve test paketini yerel uç noktada çalıştırabilirsiniz.

Bu makale temelde çıkarım sunucusunu kullanarak yerel olarak hata ayıklamak isteyen kullanıcıları hedefler, ancak çıkarım sunucusunu çevrimiçi uç noktalarla nasıl kullanacağınızı anlamanıza da yardımcı olur.

Çevrimiçi uç nokta yerel hata ayıklama

Uç noktaları buluta dağıtmadan önce yerel olarak hata ayıklamak, kod ve yapılandırmanızdaki hataları daha önce yakalamanıza yardımcı olabilir. Uç noktalarda yerel olarak hata ayıklamak için şunları kullanabilirsiniz:

  • Azure Machine Learning çıkarımı HTTP sunucusu
  • yerel uç nokta

Bu makalede Azure Machine Learning çıkarımı HTTP sunucusuna odaklanmaktadır.

Aşağıdaki tabloda, sizin için en uygun olanı seçmenize yardımcı olacak senaryolara genel bir bakış sağlanmaktadır.

Senaryo Çıkarım HTTP sunucusu Yerel uç nokta
Docker görüntüsü yeniden derlemesi olmadan yerel Python ortamını güncelleştirme Yes Hayır
Puanlama betiğini güncelleştirme Yes Yes
Dağıtım yapılandırmalarını güncelleştirme (dağıtım, ortam, kod, model) Hayır Evet
VS Code Hata Ayıklayıcısını Tümleştirme Yes Yes

Çıkarım HTTP sunucusunu yerel olarak çalıştırarak, dağıtım kapsayıcısı yapılandırmalarından etkilenmeden puanlama betiğinizde hata ayıklamaya odaklanabilirsiniz.

Önkoşullar

  • Gerekli: Python >=3.8
  • Anaconda

İpucu

Azure Machine Learning çıkarımı HTTP sunucusu Windows ve Linux tabanlı işletim sistemlerinde çalışır.

Yükleme

Not

Paket çakışmalarını önlemek için sunucuyu sanal bir ortama yükleyin.

yüklemek azureml-inference-server-http packageiçin cmd/terminalinizde aşağıdaki komutu çalıştırın:

python -m pip install azureml-inference-server-http

Puanlama betiğinizde yerel olarak hata ayıklama

Puanlama betiğinizde yerel olarak hata ayıklamak için sunucunun sahte puanlama betiğiyle nasıl davrandığını test edebilir, azureml-inference-server-http paketiyle hata ayıklamak için VS Code kullanabilir veya sunucuyu örnek depomuzdan gerçek bir puanlama betiği, model dosyası ve ortam dosyasıyla test edebilirsiniz.

Sahte puanlama betiğiyle sunucu davranışını test etme

  1. Dosyalarınızı tutmak için bir dizin oluşturun:

    mkdir server_quickstart
    cd server_quickstart
    
  2. Paket çakışmalarını önlemek için bir sanal ortam oluşturun ve etkinleştirin:

    python -m venv myenv
    source myenv/bin/activate
    

    İpucu

    Test ettikten sonra Python sanal ortamını devre dışı bırakmak için komutunu çalıştırın deactivate .

  3. azureml-inference-server-http Paketi pypi akışından yükleyin:

    python -m pip install azureml-inference-server-http
    
  4. Giriş betiğinizi (score.py) oluşturun. Aşağıdaki örnek, temel bir giriş betiği oluşturur:

    echo '
    import time
    
    def init():
        time.sleep(1)
    
    def run(input_data):
        return {"message":"Hello, World!"}
    ' > score.py
    
  5. Sunucuyu (azmlinfsrv) başlatın ve giriş betiği olarak ayarlayın score.py :

    azmlinfsrv --entry_script score.py
    

    Not

    Sunucu 0.0.0.0 üzerinde barındırılır, yani barındırma makinesinin tüm IP adreslerini dinler.

  6. kullanarak curlsunucuya puanlama isteği gönderin:

    curl -p 127.0.0.1:5001/score
    

    Sunucu bu şekilde yanıt vermelidir.

    {"message": "Hello, World!"}
    

Test ettikten sonra sunucuyu sonlandırmak için basabilirsiniz Ctrl + C . Artık puanlama betiğini (score.py) değiştirebilir ve sunucuyu yenidenazmlinfsrv --entry_script score.py () çalıştırarak değişikliklerinizi test edebilirsiniz.

Visual Studio Code ile tümleştirme

Azureml-inference-server-http paketiyle hata ayıklamak için Visual Studio Code (VS Code) ve Python Uzantısı'nı kullanmanın iki yolu vardır (Başlatma ve Ekleme modları).

  • Başlatma modu: VS Code'da öğesini ayarlayın launch.json ve VS Code içinde Azure Machine Learning çıkarım HTTP sunucusunu başlatın.

    1. VS Code'ı başlatın ve betiği (score.py) içeren klasörü açın.

    2. VS Code'da bu çalışma alanı için aşağıdaki yapılandırmayı launch.json ekleyin:

      launch.json

      {
          "version": "0.2.0",
          "configurations": [
              {
                  "name": "Debug score.py",
                  "type": "python",
                  "request": "launch",
                  "module": "azureml_inference_server_http.amlserver",
                  "args": [
                      "--entry_script",
                      "score.py"
                  ]
              }
          ]
      }
      
    3. VS Code'da hata ayıklama oturumu başlatın. "Çalıştır" -> "Hata Ayıklamayı Başlat" (veya F5) öğesini seçin.

  • Ekleme modu: Azure Machine Learning çıkarım HTTP sunucusunu bir komut satırında başlatın ve işleme eklemek için VS Code + Python Uzantısı'nı kullanın.

    Not

    Linux ortamı kullanıyorsanız, önce komutunu çalıştırarak sudo apt-get install -y gdbpaketini yükleyingdb.

    1. VS Code'da bu çalışma alanı için aşağıdaki yapılandırmayı launch.json ekleyin:

      launch.json

      {
          "version": "0.2.0",
          "configurations": [
              {
                  "name": "Python: Attach using Process Id",
                  "type": "python",
                  "request": "attach",
                  "processId": "${command:pickProcess}",
                  "justMyCode": true
              },
          ]
      }
      
    2. ÇıKARıM sunucusunu CLI ()azmlinfsrv --entry_script score.py kullanarak başlatın.

    3. VS Code'da hata ayıklama oturumu başlatın.

      1. VS Code'da "Çalıştır" -> "Hata Ayıklamayı Başlat" (veya F5) öğesini seçin.
      2. CLI'da görüntülenen günlükleri (çıkarım sunucusundan) kullanarak işlem kimliğini azmlinfsrv ( gunicorndeğil) girin. Sunucunun işlem kimliğini gösteren CLI'nin ekran görüntüsü.

      Not

      İşlem seçici görüntülenmiyorsa, alanına işlem kimliğini processIdlaunch.jsonel ile girin.

Her iki şekilde de kesme noktası ayarlayabilir ve adım adım hata ayıklayabilirsiniz.

Uçtan uca örnek

Bu bölümde, sunucuyu örnek depomuzda örnek dosyalarla (puanlama betiği, model dosyası ve ortam) yerel olarak çalıştıracağız. Örnek dosyalar, çevrimiçi uç nokta kullanarak makine öğrenmesi modelini dağıtma ve puanlandırma makalemizde de kullanılır

  1. Örnek depoyu kopyalayın.

    git clone --depth 1 https://github.com/Azure/azureml-examples
    cd azureml-examples/cli/endpoints/online/model-1/
    
  2. conda ile sanal ortam oluşturma ve etkinleştirme. Bu örnekte, paketin azureml-inference-server-http bağımlı kitaplığı olarak eklendiğinden azureml-defaults paket conda.yml aşağıdaki gibi otomatik olarak yüklenir.

    # Create the environment from the YAML file
    conda env create --name model-env -f ./environment/conda.yml
    # Activate the new environment
    conda activate model-env
    
  3. Puanlama betiğinizi gözden geçirin.

    çevrimiçi puanlama/score.py

    import os
    import logging
    import json
    import numpy
    import joblib
    
    
    def init():
        """
        This function is called when the container is initialized/started, typically after create/update of the deployment.
        You can write the logic here to perform init operations like caching the model in memory
        """
        global model
        # AZUREML_MODEL_DIR is an environment variable created during deployment.
        # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
        # Please provide your model's folder name if there is one
        model_path = os.path.join(
            os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
        )
        # deserialize the model file back into a sklearn model
        model = joblib.load(model_path)
        logging.info("Init complete")
    
    
    def run(raw_data):
        """
        This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
        In the example we extract the data from the json input and call the scikit-learn model's predict()
        method and return the result back
        """
        logging.info("model 1: request received")
        data = json.loads(raw_data)["data"]
        data = numpy.array(data)
        result = model.predict(data)
        logging.info("Request processed")
        return result.tolist()
    
  4. Puanlama betiği ve model dosyası belirterek çıkarım sunucusunu çalıştırın. Belirtilen model dizini (model_dir parametre) değişken olarak AZUREML_MODEL_DIR tanımlanır ve puanlama betiğinde alınır. Bu durumda, alt dizin puanlama betiğinde olarak model/sklearn_regression_model.pklbelirtildiğinden geçerli dizini (./) belirtiriz.

    azmlinfsrv --entry_script ./onlinescoring/score.py --model_dir ./
    

    Örnek başlangıç günlüğü , sunucu başlatılırsa ve puanlama betiği başarıyla çağrılırsa gösterilir. Aksi takdirde, günlükte hata iletileri olur.

  5. Puanlama betiğini örnek verilerle test edin. Başka bir terminal açın ve komutunu çalıştırmak için aynı çalışma dizinine geçin. Sunucuya curl örnek bir istek göndermek ve bir puanlama sonucu almak için komutunu kullanın.

    curl --request POST "127.0.0.1:5001/score" --header "Content-Type:application/json" --data @sample-request.json
    

    Puanlama betiğinizde sorun yoksa puanlama sonucu döndürülür. Yanlış bir şey bulursanız puanlama betiğini güncelleştirmeyi deneyebilir ve güncelleştirilmiş betiği test etmek için sunucuyu yeniden başlatabilirsiniz.

Sunucu Yolları

Sunucu bu yollarda 5001 numaralı bağlantı noktasını (varsayılan olarak) dinliyor.

Veri Akışı Adı Rota
Canlılık Yoklaması 127.0.0.1:5001/
Puan 127.0.0.1:5001/score
OpenAPI (swagger) 127.0.0.1:5001/swagger.json

Sunucu parametreleri

Aşağıdaki tablo, sunucu tarafından kabul edilen parametreleri içerir:

Parametre Zorunlu Varsayılan Açıklama
entry_script True Yok Puanlama betiğinin göreli veya mutlak yolu.
model_dir False Yok Çıkarım için kullanılan modeli tutan dizinin göreli veya mutlak yolu.
port False 5001 Sunucunun sunum bağlantı noktası.
worker_count False 1 Eşzamanlı istekleri işleyecek çalışan iş parçacığı sayısı.
appinsights_instrumentation_key False Yok Günlüklerin yayımlanacağı uygulama içgörülerinin izleme anahtarı.
access_control_allow_origins False Yok Belirtilen kaynaklar için CORS'yi etkinleştirin. Birden çok kaynağı "," ile ayırın.
Örnek: "microsoft.com, bing.com"

İstek akışı

Aşağıdaki adımlar, Azure Machine Learning çıkarım HTTP sunucusunun (azmlinfsrv) gelen istekleri nasıl işlediğini açıklar:

  1. Python CLI sarmalayıcı, sunucunun ağ yığınının etrafında yer alır ve sunucuyu başlatmak için kullanılır.
  2. İstemci sunucuya bir istek gönderir.
  3. bir istek alındığında, WSGI sunucusundan geçer ve ardından çalışanlardan birine gönderilir.
    • Gunicorn Linux üzerinde kullanılır.
    • Garson Windows'ta kullanılır.
  4. İstekler daha sonra giriş betiğini ve tüm bağımlılıkları yükleyen bir Flask uygulaması tarafından işlenir.
  5. Son olarak, istek giriş betiğinize gönderilir. Giriş betiği daha sonra yüklenen modele bir çıkarım çağrısı yapar ve bir yanıt döndürür.

HTTP sunucusu işleminin diyagramı.

Günlükleri anlama

Burada Azure Machine Learning çıkarım HTTP sunucusunun günlüklerini açıklıyoruz. Yerel olarak çalıştırdığınızda azureml-inference-server-http günlüğü alabilir veya çevrimiçi uç noktalar kullanıyorsanız kapsayıcı günlüklerini alabilirsiniz.

Not

Günlük biçimi 0.8.0 sürümünden bu yana değişti. Günlüğünüzü farklı bir stilde bulursanız paketi en son sürüme güncelleştirin azureml-inference-server-http .

İpucu

Çevrimiçi uç noktaları kullanıyorsanız çıkarım sunucusundan günlük ile Azure Machine Learning Inferencing HTTP server <version>başlar.

Başlangıç günlükleri

Sunucu başlatıldığında, sunucu ayarları ilk olarak günlükler tarafından aşağıdaki gibi görüntülenir:

Azure Machine Learning Inferencing HTTP server <version>


Server Settings
---------------
Entry Script Name: <entry_script>
Model Directory: <model_dir>
Worker Count: <worker_count>
Worker Timeout (seconds): None
Server Port: <port>
Application Insights Enabled: false
Application Insights Key: <appinsights_instrumentation_key>
Inferencing HTTP server version: azmlinfsrv/<version>
CORS for the specified origins: <access_control_allow_origins>


Server Routes
---------------
Liveness Probe: GET   127.0.0.1:<port>/
Score:          POST  127.0.0.1:<port>/score

<logs>

Örneğin, sunucuyu başlattığınızda uçtan uca örneği takip edin:

Azure Machine Learning Inferencing HTTP server v0.8.0


Server Settings
---------------
Entry Script Name: /home/user-name/azureml-examples/cli/endpoints/online/model-1/onlinescoring/score.py
Model Directory: ./
Worker Count: 1
Worker Timeout (seconds): None
Server Port: 5001
Application Insights Enabled: false
Application Insights Key: None
Inferencing HTTP server version: azmlinfsrv/0.8.0
CORS for the specified origins: None


Server Routes
---------------
Liveness Probe: GET   127.0.0.1:5001/
Score:          POST  127.0.0.1:5001/score

2022-12-24 07:37:53,318 I [32726] gunicorn.error - Starting gunicorn 20.1.0
2022-12-24 07:37:53,319 I [32726] gunicorn.error - Listening at: http://0.0.0.0:5001 (32726)
2022-12-24 07:37:53,319 I [32726] gunicorn.error - Using worker: sync
2022-12-24 07:37:53,322 I [32756] gunicorn.error - Booting worker with pid: 32756
Initializing logger
2022-12-24 07:37:53,779 I [32756] azmlinfsrv - Starting up app insights client
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - Found user script at /home/user-name/azureml-examples/cli/endpoints/online/model-1/onlinescoring/score.py
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - run() is not decorated. Server will invoke it with the input in JSON string.
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - Invoking user's init function
2022-12-24 07:37:55,974 I [32756] azmlinfsrv.user_script - Users's init has completed successfully
2022-12-24 07:37:55,976 I [32756] azmlinfsrv.swagger - Swaggers are prepared for the following versions: [2, 3, 3.1].
2022-12-24 07:37:55,977 I [32756] azmlinfsrv - AML_FLASK_ONE_COMPATIBILITY is set, but patching is not necessary.

Günlük biçimi

Çıkarım sunucusundaki günlükler, python paketinin parçası olmadığından başlatıcı betikleri dışında aşağıdaki biçimde oluşturulur:

<UTC Time> | <level> [<pid>] <logger name> - <message>

İşlem <pid> kimliği ve <level> günlüğe kaydetme düzeyinin ilk karakteri şöyledir: HATA için E, BİlGİ için I vb.

Python'da önem derecesiyle ilişkili sayılar içeren altı günlük düzeyi vardır:

Günlük düzeyi Sayısal değer
KRİTİK 50
HATA 40
UYARI 30
INFO 20
HATA AYIKLAMA 10
NOTSET 0

Sorun giderme kılavuzu

Bu bölümde, Azure Machine Learning çıkarım HTTP sunucusu için temel sorun giderme ipuçları sağlayacağız. Çevrimiçi uç nokta sorunlarını gidermek istiyorsanız bkz . Çevrimiçi uç nokta dağıtımı sorunlarını giderme

Temel adımlar

Sorun gidermenin temel adımları şunlardır:

  1. Python ortamınız için sürüm bilgilerini toplayın.
  2. Ortam dosyasında belirtilen azureml-inference-server-http python paketi sürümünün başlangıç günlüğünde görüntülenen AzureML Çıkarım HTTP sunucusu sürümüyle eşleştiğinden emin olun. Bazen Pip'in bağımlılık çözümleyicisi yüklenen paketlerin beklenmeyen sürümlerine yol açar.
  3. Ortamınızda Flask (ve veya bağımlılıkları) belirtirseniz, bunları kaldırın. Bağımlılıklar , , Jinja2, itsdangerous, Werkzeug, MarkupSafeve clickbağımlılıklarıdırFlask. Flask, sunucu paketinde bağımlılık olarak listelenir ve sunucumuzun yüklemesine izin vermek en iyisidir. Bu şekilde sunucu Flask'in yeni sürümlerini desteklediğinde bunları otomatik olarak alırsınız.

Sunucu sürümü

Sunucu paketi azureml-inference-server-http PyPI'da yayımlanır. Değişiklik günlüğümüzü ve önceki tüm sürümleri PyPI sayfamızda bulabilirsiniz. Önceki bir sürümü kullanıyorsanız en son sürüme güncelleştirin.

  • 0.4.x: ≤ ve içindeki eğitim görüntülerinde 20220601azureml-defaults>=1.34,<=1.43paketlenen sürüm. 0.4.13 son kararlı sürümdür. sürümünden 0.4.11önce sunucuyu kullanıyorsanız, 'den jinja2ad Markup içeri aktaramama gibi Flask bağımlılık sorunlarını görebilirsiniz. Mümkünse veya 0.8.x sürümüne 0.4.13 (en son sürüm) yükseltmeniz önerilir.
  • 0.6.x: Görüntülerin ≤ 20220516 çıkarıldığında önceden yüklenmiş olan sürüm. En son kararlı sürüm: 0.6.1.
  • 0.7.x: Flask 2'yi destekleyen ilk sürüm. En son kararlı sürüm: 0.7.7.
  • 0.8.x: Günlük biçimi değişti ve Python 3.6 desteği bırakıldı.

Paket bağımlılıkları

Sunucu azureml-inference-server-http için en uygun paketler aşağıdaki paketlerdir:

  • Şişe
  • opencensus-ext-azure
  • çıkarım şeması

Python ortamınızda belirttiyseniz azureml-defaults paket azureml-inference-server-http bağlıdır ve otomatik olarak yüklenir.

İpucu

Python SDK v1 kullanıyorsanız ve Python ortamınızda açıkça belirtmezseniz azureml-defaults SDK paketi sizin için ekleyebilir. Ancak, SDK'nın açık olduğu sürüme kilitlenir. Örneğin, SDK sürümü ise 1.38.0ortamın pip gereksinimlerine eklenir azureml-defaults==1.38.0 .

Sık sorulan sorular

1. Sunucu başlatma sırasında aşağıdaki hatayla karşılaştım:


TypeError: register() takes 3 positional arguments but 4 were given

  File "/var/azureml-server/aml_blueprint.py", line 251, in register

    super(AMLBlueprint, self).register(app, options, first_registration)

TypeError: register() takes 3 positional arguments but 4 were given

Python ortamınızda Flask 2 yüklü ancak Flask 2'yi azureml-inference-server-http desteklemeyen bir sürümünü çalıştırıyorsunuz. Flask 2 desteği, içinde azureml-inference-server-http>=0.7.0de azureml-defaults>=1.44bulunan öğesine eklenir.

  • Bu paketi bir AzureML docker görüntüsünde kullanmıyorsanız en son veya azureml-defaultssürümünü azureml-inference-server-http kullanın.

  • Bu paketi bir AzureML docker görüntüsüyle kullanıyorsanız Temmuz 2022'de veya sonrasında yerleşik bir görüntü kullandığınızdan emin olun. Görüntü sürümü kapsayıcı günlüklerinde kullanılabilir. Aşağıdakine benzer bir günlük bulabilmelisiniz:

    2022-08-22T17:05:02,147738763+00:00 | gunicorn/run | AzureML Container Runtime Information
    2022-08-22T17:05:02,161963207+00:00 | gunicorn/run | ###############################################
    2022-08-22T17:05:02,168970479+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,174364834+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,187280665+00:00 | gunicorn/run | AzureML image information: openmpi4.1.0-ubuntu20.04, Materializaton Build:20220708.v2
    2022-08-22T17:05:02,188930082+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,190557998+00:00 | gunicorn/run | 
    

    Görüntünün derleme tarihi yukarıdaki örnekte 20220708veya 8 Temmuz 2022'de yer alan "Gerçekleştirme Derlemesi"nin ardından görünür. Bu görüntü Flask 2 ile uyumludur. Kapsayıcı günlüğünüzde bunun gibi bir başlık görmüyorsanız, görüntünüz güncel değildir ve güncelleştirilmelidir. CUDA görüntüsü kullanıyorsanız ve daha yeni bir görüntü bulamıyorsanız, görüntünüzün AzureML Kapsayıcıları'nda kullanım dışı olup olmadığını denetleyin. Varsa, yenilerini bulabilmeniz gerekir.

  • Sunucuyu çevrimiçi uç noktayla kullanıyorsanız, günlükleri Azure Machine Learning stüdyosu'deki çevrimiçi uç nokta sayfasındaki "Dağıtım günlükleri" altında da bulabilirsiniz. SDK v1 ile dağıtım yaparsanız ve dağıtım yapılandırmanızda açıkça bir görüntü belirtmezseniz, varsayılan olarak yerel SDK araç takımınızla eşleşen ve görüntünün en son sürümü olmayan bir openmpi4.1.0-ubuntu20.04 sürümünü kullanırsınız. Örneğin, SDK 1.43 varsayılan olarak uyumsuz olan öğesini kullanır openmpi4.1.0-ubuntu20.04:20220616. Dağıtımınız için en son SDK'yi kullandığınızdan emin olun.

  • Bir nedenle görüntüyü güncelleştiremiyorsanız, eski sürüm sunucusunu ile Flask 1.0.xyükleyecek olan veya azureml-inference-server-http~=0.4.13sabitleyerek azureml-defaults==1.43 geçici olarak sorundan kaçınabilirsiniz.

2. , , MarkupSafeclickjinja2veya ModuleNotFoundError modüllerinde opencensusveya başlatma sırasında aşağıdaki ileti gibi bir ImportError veya ile karşılaştım:

ImportError: cannot import name 'Markup' from 'jinja2'

Sunucunun eski sürümleri (<= 0.4.10), Flask'in bağımlılığını uyumlu sürümlere sabitlemedi. Bu sorun, sunucunun en son sürümünde düzeltildi.

Sonraki adımlar

  • Giriş betiği oluşturma ve modelleri dağıtma hakkında daha fazla bilgi için bkz . Azure Machine Learning kullanarak model dağıtma.
  • Çıkarım için önceden oluşturulmuş docker görüntüleri hakkında bilgi edinin