Aracılığıyla paylaş


Azure'da Python Container Apps'e genel bakış

Bu makalede, web uygulaması gibi bir Python projesinin nasıl alınıp Azure'da Docker kapsayıcısı olarak dağıtılacağı açıklanmaktadır. Genel kapsayıcı oluşturma iş akışını, kapsayıcılar için Azure dağıtım seçeneklerini ve Azure içindeki Python'a özgü kapsayıcı yapılandırmalarını kapsar. Azure'da Docker kapsayıcıları oluşturma ve dağıtma, diller arasında standart bir süreç izler ve Python'a özgü yapılandırmalar Dockerfile, requirements.txtile Django, Flask ve FastAPI gibi web çerçeveleri için ayarlar içerir.

Kapsayıcı iş akışı senaryoları

Python kapsayıcısı geliştirme için koddan kapsayıcıya geçişe yönelik bazı tipik iş akışları aşağıdaki tabloda açıklanmaktadır.

Senaryo Açıklama İş Akışı
Geliştirme Geliştirme ortamınızda yerel olarak Python Docker görüntüleri oluşturun. Kod: Git kullanarak uygulama kodunuzu yerel olarak kopyalayın (Docker yüklü olarak).

Derleme: Docker CLI, VS Code (uzantılı), PyCharm (Docker eklentisi ile) kullanın. Python Docker görüntüleri ve kapsayıcılarıyla çalışma bölümünde açıklanmıştır.

Test: Kapsayıcıyı yerel olarak çalıştırın ve test edin.

Gönderme: Görüntüyü Azure Container Registry, Docker Hub veya özel kayıt defteri gibi bir kapsayıcı kayıt defterine gönderin.

Dağıtma: Kapsayıcıyı kayıt defterinden bir Azure hizmetine dağıtın.
Melez Azure'da Docker görüntüleri oluşturun, ancak işlemi yerel ortamınızdan başlatın. Kod: Kodu yerel olarak kopyalayın (Docker'ın yüklenmesi için gerekli değildir).

Derleme: Azure'da derlemeleri tetikleme amacıyla VS Code (uzak uzantılarla) veya Azure CLI kullanın.

Push Et: Yerleşik görüntüyü Azure Container Registry'ye gönderin.

Dağıtma: Kapsayıcıyı kayıt defterinden bir Azure hizmetine dağıtın.
Gök mavisi Azure Cloud Shell'i kullanarak kapsayıcıları tamamen bulutta oluşturun ve dağıtın. Kod: Azure Cloud Shell'de GitHub deposunu kopyalayın.

Derleme: Cloud Shell'de Azure CLI veya Docker CLI kullanın.

Gönderme: Görüntüyü Azure Container Registry, Docker Hub veya özel kayıt defteri gibi bir kayıt defterine gönderin.

Dağıtma: Kapsayıcıyı kayıt defterinden bir Azure hizmetine dağıtın.

Bu iş akışlarının son hedefi, sonraki bölümde listelendiği gibi Docker kapsayıcılarını destekleyen Azure kaynaklarından birinde çalışan bir kapsayıcıya sahip olmaktır.

Geliştirme ortamı şu olabilir:

Azure'da dağıtım kapsayıcısı seçenekleri

Python kapsayıcı uygulamaları aşağıdaki hizmetlerde desteklenir.

Hizmet Açıklama
Kapsayıcılar için Web Uygulaması Azure App Service, web siteleri ve web API'leri de dahil olmak üzere kapsayıcılı web uygulamaları için tam olarak yönetilen bir barındırma platformudur. Ölçeklenebilir dağıtımları destekler ve Docker Hub, Azure Container Registry ve GitHub kullanarak CI/CD iş akışlarıyla sorunsuz bir şekilde tümleşir. Bu hizmet, kapsayıcılı uygulamaları dağıtmak için basit ve verimli bir yol isteyen geliştiriciler için idealdir ve azure App Service platformunun tüm özelliklerinden de yararlanır. Uygulamanızı ve tüm bağımlılıklarını tek bir dağıtılabilir kapsayıcıda paketleyerek altyapıyı yönetmeye gerek kalmadan hem taşınabilirlik hem de yönetim kolaylığı elde edebilirsiniz.

Örnek: Azure App Service'te Flask veya FastPI web uygulaması dağıtma.
Azure Container Apps (ACA) Azure Container Apps (ACA), Kubernetes ve Dapr, KEDA ve envoy gibi açık kaynak teknolojileri tarafından desteklenen tam olarak yönetilen sunucusuz bir kapsayıcı hizmetidir. Tasarımı endüstrinin en iyi yöntemlerini içerir ve genel amaçlı kapsayıcıları yürütmek için iyileştirilmiştir. ACA, Kubernetes altyapısını yönetmenin karmaşıklığını soyutlar; Kubernetes API'sine doğrudan erişim gerekli değildir veya desteklenmez. Bunun yerine, geliştirme ve dağıtım iş akışlarını basitleştirmek için düzeltmeler, ölçeklendirme, sertifikalar ve ortamlar gibi daha üst düzey uygulama yapıları sunar. Bu hizmet, kapsayıcılı mikro hizmetleri en az işlem yüküyle derlemek ve dağıtmak isteyen geliştirme ekipleri için idealdir ve altyapı yönetimi yerine uygulama mantığına odaklanmalarını sağlar.

Örnek: Azure Container Apps'te Flask veya FastPI web uygulaması dağıtma.
Azure Container Instances (ACI) Azure Container Instances (ACI), isteğe bağlı olarak tek bir Hyper-V yalıtılmış kapsayıcı podu sağlayan sunucusuz bir tekliftir. Faturalama, önceden ayrılmış altyapı yerine gerçek kaynak tüketimine dayalıdır ve bu da kısa süreli veya seri hale getirilebilir iş yükleri için uygun olmasını sağlar. Diğer kapsayıcı hizmetlerinden farklı olarak, ACI ölçeklendirme, yük dengeleme veya TLS sertifikaları gibi kavramlar için yerleşik destek içermez. Bunun yerine, genellikle Azure Kubernetes Service (AKS) gibi Azure hizmetleriyle düzenleme ve orkestrasyon için tümleştirilen temel kapsayıcı yapı taşlarından biri olarak işlev görür. ACI, Azure Container Apps'in daha üst düzey soyutlamalarına ve özelliklerine ihtiyaç

duyulmadığında basit bir seçim olarak öne çıktığına işaret eder Örnek: Azure Container Instances'a dağıtım için kapsayıcı görüntüsü oluşturma. (Öğretici Python'a özgü değildir, ancak gösterilen kavramlar tüm diller için geçerlidir.)
Azure Kubernetes Service (AKS) Azure Kubernetes Service (AKS), Azure'da kubernetes ortamınız üzerinde tam denetim sağlayan tam olarak yönetilen bir Kubernetes seçeneğidir. Kubernetes API'sine doğrudan erişimi destekler ve herhangi bir standart Kubernetes iş yükünü çalıştırabilir. Kümenin tamamı, denetiminiz ve sorumluluğunuzda küme yapılandırmaları ve işlemleriyle birlikte aboneliğinizde bulunur. ACI, tam olarak yönetilen bir kapsayıcı çözümü arayan ekipler için idealdir, AKS ise Kubernetes kümesi üzerinde tam denetim sağlar ve yapılandırmaları, ağı, ölçeklendirmeyi ve işlemleri yönetmenizi gerektirir. Denetim düzlemini ve altyapı sağlamayı Azure üstlenir, ancak kümenin günlük işlemi ve güvenliği ekibinizin denetimindedir. Bu hizmet, Azure'ın yönetilen altyapısının ek avantajıyla Kubernetes'in esnekliğini ve gücünü isteyen ekipler için idealdir ve küme ortamı üzerinde tam sahipliğini korur.

Örnek: Azure CLI kullanarak bir Azure Kubernetes Service kümesi dağıtma.
Azure İşlevleri Azure İşlevleri, olaylara yanıt olarak altyapıyı yönetmeden küçük kod parçaları (işlevler) çalıştırmanıza olanak tanıyan olay odaklı, sunucusuz bir Hizmet Olarak İşlevler (FaaS) platformu sunar. Azure İşlevleri, Azure Container Apps ile olaylarla ölçeklendirme ve tümleştirme konusunda birçok özelliği paylaşır, ancak kod veya kapsayıcı olarak dağıtılan kısa süreli işlevler için iyileştirilmiştir. olaylar oluştuğunda işlevlerin yürütülmesini tetiklemek isteyen ekipler için; örneğin, diğer veri kaynaklarına bağlanmak amacıyla. Azure Container Apps gibi Azure İşlevleri de olay kaynaklarıyla (örneğin, HTTP istekleri, ileti kuyrukları veya blob depolama güncelleştirmeleri) otomatik ölçeklendirmeyi ve tümleştirmeyi destekler. Bu hizmet, Python'da veya diğer dillerde dosya yüklemelerini işleme veya veritabanı değişikliklerine yanıt verme gibi basit, olayla tetiklenen iş akışları oluşturan ekipler için idealdir.

Örnek: Özel bir kapsayıcı kullanarak Linux'ta işlev oluşturma.

Bu hizmetlerin daha ayrıntılı bir karşılaştırması için bkz. Container Apps'i diğer Azure kapsayıcı seçenekleriyle karşılaştırma.

Sanal ortamlar ve kapsayıcılar

Python'daki sanal ortamlar, proje bağımlılıklarını sistem düzeyindeki Python yüklemelerinden yalıtarak geliştirme ortamlarında tutarlılık sağlar. Sanal ortam, kendi yalıtılmış Python yorumlayıcısını ve bu ortamda belirli bir proje kodunu çalıştırmak için gereken kitaplıkları ve betikleri içerir. Python projeleri için bağımlılıklar requirements.txt dosyası aracılığıyla yönetilir. Geliştiriciler , birrequirements.txt dosyasında bağımlılıkları belirterek projeleri için gereken ortamı tam olarak yeniden oluşturabilir. Bu yaklaşım, güvenilir uygulama performansı için ortam tutarlılığının temel öneme sahip olduğu Azure App Service gibi kapsayıcılı dağıtımlara daha sorunsuz geçişleri kolaylaştırır.

Tavsiye

Kapsayıcılı Python projelerinde, Docker kapsayıcıları kendi Python yorumlayıcısı ve bağımlılıklarıyla yalıtılmış ortamlar sağladığından sanal ortamlar genellikle gereksizdir. Ancak, yerel geliştirme veya test için sanal ortamları kullanabilirsiniz. Docker görüntülerinin yalın kalmasını sağlamak için, gereksiz dosyaların görüntüye kopyalanmasını engelleyen bir .dockerignore dosyası kullanarak sanal ortamları hariç tutun.

Docker kapsayıcılarını Python sanal ortamlarına benzer özellikler sunan ancak yeniden üretilebilirlik, yalıtım ve taşınabilirlik açısından daha geniş avantajlar sunan bir kapsayıcı olarak düşünebilirsiniz. Sanal ortamlardan farklı olarak, kapsayıcı çalışma zamanı kullanılabilir olduğu sürece Docker kapsayıcıları farklı işletim sistemleri ve ortamlar arasında tutarlı bir şekilde çalışabilir.

Docker kapsayıcısı, Python proje kodunuzun yanı sıra bağımlılıklar, ortam ayarları ve sistem kitaplıkları gibi çalışması gereken her şeyi içerir. Kapsayıcı oluşturmak için önce proje kodunuzdan ve yapılandırmanızdan bir Docker görüntüsü derleyip ardından bu görüntünün çalıştırılabilir bir örneği olan kapsayıcıyı başlatırsınız.

Python projelerini kapsayıcılı hale getirme için anahtar dosyalar aşağıdaki tabloda açıklanmıştır:

Proje dosyası Açıklama
requirements.txt Bu dosya, uygulamanız için gereken Python bağımlılıklarının kesin listesini içerir. Docker, gerekli tüm paketleri yüklemek için görüntü derleme işlemi sırasında bu listeyi kullanır. Bu, geliştirme ve dağıtım ortamları arasında tutarlılık sağlar.
Dockerfile Bu dosya temel görüntü seçimi, bağımlılık yüklemesi, kod kopyalama ve kapsayıcı başlatma komutları dahil olmak üzere Python Docker görüntünüzü oluşturmaya yönelik yönergeler içerir. Uygulamanız için tam yürütme ortamını tanımlar. Daha fazla bilgi için Python için Dockerfile yönergeleri bölümüne bakın.
.dockerignore Bu dosya, Dockerfile içindeki komutuyla COPY Docker görüntüsüne içerik kopyalanırken dışlanması gereken dosyaları ve dizinleri belirtir. Bu dosya dışlamaları tanımlamak için .gitignore'a benzer desenler kullanır. .dockerignoredosyası.gitignore dosyalarına benzer dışlama desenlerini destekler. Daha fazla bilgi için bkz . .dockerignore dosyası.

Dosyaların dışlanması görüntü oluşturma performansına yardımcı olur, ancak görüntüye hassas bilgilerin denetlenebileceği yerlerde eklenmesini önlemek için de kullanılmalıdır. Örneğin, .dockerignore.env ve .venv'yi (sanal ortamlar) yoksayacak satırlar içermelidir.

Web çerçeveleri için kapsayıcı ayarları

Web çerçeveleri genellikle varsayılan bağlantı noktalarına bağlanır (flask için 5000, FastAPI için 8000 gibi). Kapsayıcıları Azure Container Instances, Azure Kubernetes Service (AKS) veya Kapsayıcılar için App Service gibi Azure hizmetlerine dağıtırken gelen trafiğin düzgün yönlendirilmesini sağlamak için kapsayıcının dinleme bağlantı noktasını açıkça kullanıma sunmanız ve yapılandırmanız çok önemlidir. Doğru bağlantı noktasının yapılandırılması, Azure altyapısının istekleri kapsayıcınızın içindeki doğru uç noktaya yönlendirebilmesini sağlar.

Web çerçevesi Liman
Django 8.000
Şişe 5000 veya 5002
FastAPI (uvicorn) 8000 veya 80

Aşağıdaki tabloda farklı Azure kapsayıcı çözümleri için bağlantı noktasının nasıl ayarlanacağı gösterilmektedir.

Azure kapsayıcı çözümü Web uygulaması bağlantı noktasını ayarlama
Kapsayıcılar için Web Uygulaması App Service varsayılan olarak özel kapsayıcınızın 80 numaralı bağlantı noktasında veya 8080 numaralı bağlantı noktasında dinlediğini varsayar. Kapsayıcınız farklı bir bağlantı noktasını dinliyorsa, WEBSITES_PORT uygulama ayarını App Service uygulamanızda yapılandırın. Daha fazla bilgi için bkz. Azure App Service için özel kapsayıcı yapılandırma.
Azure Kapsayıcıları Uygulamaları Azure Container Apps, girişi etkinleştirerek kapsayıcı uygulamanızı genel web'de, sanal ağınızda veya aynı ortamdaki diğer kapsayıcı uygulamalarında kullanıma sunmanızı sağlar. Girişi targetPort kapsayıcınızın gelen istekler için dinlediği bağlantı noktasına ayarlayın. Uygulama giriş uç noktası her zaman 443 numaralı bağlantı noktasında kullanıma sunulur. Daha fazla bilgi için bkz. Azure Container Apps'te HTTPS veya TCP girişi ayarlama.
Azure Container Instances, Azure Kubernetes Kapsayıcı veya pod oluşturma sırasında uygulamanızın dinlediği bağlantı noktasını tanımlarsınız. Kapsayıcı görüntünüz bir web çerçevesi, bir uygulama sunucusu (örneğin, gunicorn, uvicorn) ve isteğe bağlı olarak bir web sunucusu (örneğin, nginx) içermelidir. Daha karmaşık senaryolarda, sorumlulukları biri uygulama sunucusu, diğeri de web sunucusu için olmak üzere iki kapsayıcıya bölebilirsiniz. Bu durumda, web sunucusu kapsayıcısı genellikle dış trafik için 80 veya 443 numaralı bağlantı noktalarını kullanıma sunar.

Python Dockerfile

Dockerfile, Python uygulaması için Docker görüntüsü oluşturma yönergelerini içeren bir metin dosyasıdır. İlk yönerge genellikle başlangıç olarak temel görüntüyü belirtir. Ardından, sonraki yönergeler gerekli yazılımları yükleme, uygulama dosyalarını kopyalama ve çalıştırılabilir görüntü oluşturmak için ortamı yapılandırma gibi eylemleri ayrıntılı olarak açıklar. Aşağıdaki tabloda yaygın olarak kullanılan Dockerfile yönergeleri için Python'a özgü örnekler verilmiştir.

Talimat Amaç Örnek
KİMDEN Sonraki yönergeler için temel görüntüyü ayarlar. FROM python:3.9-slim
AÇIĞA ÇIKARMAK Docker'a kapsayıcının çalışma zamanında belirtilen bir bağlantı noktasını dinlediğini bildirir. EXPOSE 5000
Kopya etmek Belirtilen kaynaktan dosya veya dizinleri kopyalar ve belirtilen hedef yolda kapsayıcının dosya sistemine ekler. COPY . /app
KOŞ Docker görüntüsünün içinde bir komut çalıştırır. Örneğin, bağımlılıkları kapsamına alma. Komut derleme zamanında bir kez çalışır. RUN python -m pip install -r requirements.txt
CMD Bu komut, bir kapsayıcıyı yürütmek için varsayılan değeri belirler. Yalnızca bir CMD yönergesi olabilir. CMD ["gunicorn", "--bind", "0.0.0.0:5000", "wsgi:app"]

Docker derleme komutu, Dockerfile'dan ve bir bağlamdan Docker görüntüleri oluşturur. Derlemenin bağlamı, belirtilen yolda veya URL'de bulunan dosya kümesidir. Genellikle Python projenizin kökünden bir görüntü oluşturursunuz ve aşağıdaki örnekte gösterildiği gibi derleme komutunun yolu "." olur.

docker build --rm --pull  --file "Dockerfile"  --tag "mywebapp:latest"  .

Derleme işlemi, bağlamdaki dosyalardan herhangi birine başvurabilir. Örneğin, derlemeniz, bağlamdaki bir dosyaya başvurmak için COPY komutunu kullanabilir. Flask çerçevesini kullanan bir Python projesi için Dockerfile örneği aşağıda verilmiştir:

FROM python:3.9-slim

EXPOSE 5000

# Keeps Python from generating .pyc files in the container.
ENV PYTHONDONTWRITEBYTECODE=1

# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1

# Install pip requirements.
COPY requirements.txt .
RUN python -m pip install -r requirements.txt

WORKDIR /app
COPY . /app

# Creates a non-root user with an explicit UID and adds permission to access the /app folder.
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser

# Provides defaults for an executing container; can be overridden with Docker CLI.
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "wsgi:app"]

Elle bir Dockerfile oluşturabilir veya VS Code ve Docker uzantısıyla otomatik olarak oluşturabilirsiniz. Daha fazla bilgi için bkz. Docker dosyaları oluşturma.

Docker derleme komutu, Docker CLI'nın bir parçasıdır. VS Code veya PyCharm gibi IDE'leri kullandığınızda, Docker görüntüleriyle çalışmaya yönelik kullanıcı arabirimi komutları sizin için derleme komutunu çağırır ve seçenekleri belirtmeyi otomatikleştirir.

Python Docker görüntüleri ve kapsayıcılarıyla çalışma

VS Code ve PyCharm

Visual Studio Code (VS Code) ve PyCharm gibi tümleşik geliştirme ortamları (IDE' ler), Docker görevlerini iş akışınızla tümleştirerek Python kapsayıcı geliştirmesini kolaylaştırır. Uzantılar veya eklentiler sayesinde bu IDE'ler Docker görüntülerinin oluşturulmasını, kapsayıcıların çalıştırılmasını ve App Service veya Container Instances gibi Azure hizmetlerine dağıtılmasını kolaylaştırır. VS Code ve PyCharm ile yapabileceğiniz bazı işlemler şunlardır.

  • Docker görüntülerini indirin ve derleyin.

    • Geliştirme ortamınızda görüntüler oluşturun.
    • Geliştirme ortamında Docker yüklü olmadan Azure'da Docker görüntüleri oluşturun. (PyCharm için Azure'da görüntü oluşturmak için Azure CLI'yi kullanın.)
  • Mevcut bir görüntüden, çekilen görüntüden veya doğrudan dockerfile'dan Docker kapsayıcıları oluşturun ve çalıştırın.

  • Docker Compose ile çok katmanlı uygulamalar çalıştırın.

  • Docker Hub, GitLab, JetBrains Space, Docker V2 ve şirket içinde barındırılan diğer Docker kayıt defterleri gibi kapsayıcı kayıt defterlerine bağlanın ve bunlarla çalışın.

  • (yalnızca VS Code) Python projeniz için uyarlanmış bir Dockerfile ve Docker compose dosyaları ekleyin.

VS Code ve PyCharm'ı geliştirme ortamınızda Docker kapsayıcılarını çalıştıracak şekilde ayarlamak için aşağıdaki adımları kullanın.

Henüz yüklemediyseniz VS Code için Azure Araçları'nı yükleyin.

Yönergeler Ekran görüntüsü
1. Adım: Shift + ALT + A kullanarak Azure uzantısını açın ve Azure'a bağlı olduğunuzu onaylayın.

VS Code uzantıları çubuğunda Azure simgesini de seçebilirsiniz.

Oturum açmadıysanız Azure'da oturum aç'ı seçin ve istemleri izleyin.

Azure aboneliğinize erişirken sorun yaşıyorsanız bunun nedeni bir ara sunucu arkasında olmanız olabilir. Bağlantı sorunlarını çözmek için bkz. Visual Studio Code'da Ağ Bağlantıları.
Azure Araçları'nın oturum açtıktan sonra nasıl göründüğünü gösteren ekran görüntüsü. Oturum açmadıysanız Azure Araçları'nın nasıl göründüğünü gösteren ekran görüntüsü.
2. Adım: Uzantılar'ı açmak, + yüklemek için CTRL + SHIFTX kullanın.

VS Code uzantıları çubuğunda Uzantılar simgesini de seçebilirsiniz.
VS Code'a Docker uzantısının nasıl ekleneceğini gösteren ekran görüntüsü.
3. Adım: Uzantı çubuğunda Docker simgesini seçin, görüntüleri genişletin ve bir Docker görüntüsüne sağ tıklayarak bunu kapsayıcı olarak çalıştırın. Vs Code'da Docker uzantısını kullanarak Docker görüntüsünden kapsayıcı çalıştırmayı gösteren ekran görüntüsü.
4. Adım: Terminal penceresinde Docker çalıştırma çıkışını izleyin. VS Code'da kapsayıcı çalıştırma örneğini gösteren ekran görüntüsü.

Azure CLI ve Docker CLI

Azure CLI ve Docker CLI kullanarak Python Docker görüntüleri ve kapsayıcılarıyla da çalışabilirsiniz. Hem VS Code hem de PyCharm,bu CLI'leri çalıştırabileceğiniz terminallere sahiptir.

Çalıştırma ve oluşturma argümanları üzerinde daha ayrıntılı kontrol sağlamak ve otomasyon için CLI kullanın. Örneğin aşağıdaki komut, Docker görüntü adını belirtmek için Azure CLI az acr derlemesinin nasıl kullanılacağını gösterir.

az acr build --registry <registry-name> \
  --resource-group <resource-group> \
  --target pythoncontainerwebapp:latest .

Başka bir örnek olarak, Docker CLI çalıştırma komutunun nasıl kullanılacağını gösteren aşağıdaki komutu göz önünde bulundurun. Örnek, geliştirme ortamınızdaki bir MongoDB örneğiyle iletişim kuran bir Docker kapsayıcısının kapsayıcının dışında nasıl çalıştırıldığını gösterir. Komutu tamamlamak için farklı değerlerin, komut satırında belirtildiğinde otomatikleştirilmesi daha kolaydır.

docker run --rm -it \
  --publish <port>:<port> --publish 27017:27017 \
  --add-host mongoservice:<your-server-IP-address> \
  --env CONNECTION_STRING=mongodb://mongoservice:27017 \
  --env DB_NAME=<database-name> \
  --env COLLECTION_NAME=<collection-name> \
  containermongo:latest  

Bu senaryo hakkında daha fazla bilgi için bkz. Kapsayıcılı Python web uygulamasını yerel olarak derleme ve test etme.

Kapsayıcılardaki ortam değişkenleri

Python projeleri genellikle yapılandırma verilerini uygulama koduna geçirmek için ortam değişkenlerini kullanır. Bu yaklaşım farklı ortamlarda daha fazla esneklik sağlar. Örneğin, veritabanı bağlantı ayrıntıları ortam değişkenlerinde depolanabilir ve bu da kodu değiştirmeden geliştirme, test ve üretim veritabanları arasında geçiş yapmayı kolaylaştırır. Yapılandırmanın koddan ayrılması, daha temiz dağıtımları teşvik eder ve güvenlik ile sürdürülebilirliği artırır.

Python-dotenv gibi paketler genellikle bir .env dosyasından anahtar-değer çiftlerini okumak ve ortam değişkenleri olarak ayarlamak için kullanılır. Bir .env dosyası sanal ortamda çalışırken kullanışlıdır, ancak kapsayıcılarla çalışırken önerilmez. .env dosyasını Docker görüntüsüne kopyalamayın, özellikle hassas bilgiler içeriyorsa ve kapsayıcı genel kullanıma sunulacaksa. Dosyaların Docker görüntüsüne kopyalanmasını dışlamak için .dockerignore dosyasını kullanın. Daha fazla bilgi için bu makaledeki Sanal ortamlar ve kapsayıcılar bölümüne bakın.

Ortam değişkenlerini kapsayıcılara birkaç yolla geçirebilirsiniz:

  1. Dockerfile'da ENV yönergeleri olarak tanımlanır.
  2. Docker --build-arg komutuna bağımsız değişken olarak eklendi.
  3. Docker build komutu ve --secret arkaucu ile argüman olarak geçirildi.
  4. Docker --env komutu ile bağımsız değişken olarak --env-file veya şeklinde geçirilir.

İlk iki seçenek , .env dosyalarında belirtildiği gibi aynı dezavantaja sahiptir; yani hassas olabilecek bilgileri Docker görüntüsüne sabit bir şekilde kodlamanızdır. Docker görüntüsünü inceleyebilir ve örneğin docker image inspect komutuyla ortam değişkenlerini görebilirsiniz.

BuildKit ile üçüncü seçenek, Dockerfile'da kullanılacak gizli bilgileri güvenli bir şekilde geçirerek, docker görüntülerini derlemenizi ve bu bilgilerin son görüntüde depolanmamasını sağlar.

Docker çalıştırma komutuyla ortam değişkenlerini geçirmenin dördüncü seçeneği, Docker görüntüsünün değişkenleri içermediği anlamına gelir. Ancak, kapsayıcı örneğini inceleyen değişkenler hala görünür durumdadır (örneğin, docker kapsayıcı incelemesi ile). Kapsayıcı örneğine erişim denetlendiğinde veya test veya geliştirme senaryolarında bu seçenek kabul edilebilir olabilir.

Docker CLI'nin çalıştırma komutunu ve --env argümanını kullanarak ortam değişkenlerini geçirme örneği aşağıda verilmiştir.

# PORT=8000 for Django and 5000 for Flask
export PORT=<port-number>

docker run --rm -it \
  --publish $PORT:$PORT \
  --env CONNECTION_STRING=<connection-info> \
  --env DB_NAME=<database-name> \
  <dockerimagename:tag>

VS Code (Docker uzantısı) veya PyCharm'da (Docker eklentisi), kullanıcı arabirimi araçları arka planda standart docker CLI komutlarını (docker derlemesi, docker çalıştırması gibi) yürüterek Docker görüntülerini ve kapsayıcılarını yönetmeyi basitleştirir.

Son olarak, Azure'da kapsayıcı dağıtırken ortam değişkenlerini belirtmek, geliştirme ortamınızda ortam değişkenlerini kullanmaktan farklıdır. Örneğin:

  • Kapsayıcılar için Web Uygulaması'nda, App Service'i yapılandırırken uygulama ayarlarını da yaparsınız. Bu ayarlar, uygulama kodunuza ortam değişkenleri olarak sunulur ve standart os.environ deseni kullanılarak erişilir. İlk dağıtımdan sonra gerektiğinde değerleri değiştirebilirsiniz. Daha fazla bilgi için bkz. Uygulama ayarlarına ortam değişkenleri olarak erişme.

  • Azure Container Apps için, kapsayıcı uygulamasının ilk yapılandırması sırasında ortam değişkenlerini yapılandırırsınız. Ortam değişkenlerinin sonraki değişiklikleri kapsayıcının bir düzeltmesini oluşturur. Ayrıca Azure Container Apps, uygulama düzeyinde gizli dizileri tanımlamanıza ve ardından ortam değişkenlerinde bunlara başvurmanıza olanak tanır. Daha fazla bilgi için bkz: Azure Container Apps'te gizli bilgileri yönetme.

Başka bir seçenek olarak, Azure işlem hizmetlerini diğer yedekleme hizmetlerine bağlamanıza yardımcı olması için Hizmet Bağlayıcısı'nı kullanabilirsiniz. Bu hizmet, yönetim düzleminde işlem hizmetleri ve hedef destek hizmetleri arasında ağ ayarlarını ve bağlantı bilgilerini (örneğin, ortam değişkenleri oluşturma) yapılandırıyor.

Kapsayıcı günlüklerini görüntüleme

Koddan gelen tanılama iletilerini görmek ve kapsayıcınızın kodundaki sorunları gidermek için kapsayıcı örneği günlüklerini görüntüleyin. Geliştirme ortamınızda bir kapsayıcı çalıştırırken günlükleri görüntülemenin birkaç yolu şunlardır:

  • VS Code veya PyCharm ile bir kapsayıcı çalıştırırken, Docker çalıştırması yürütüldüğünde terminal pencerelerinde açılan günlükleri görebilirsiniz.

  • Docker CLI run komutunu etkileşimli bayrağıyla -itkullanıyorsanız komutunun ardından gelen çıkışı görürsünüz.

  • Docker Desktop'ta, çalışan bir kapsayıcının günlüklerini de görüntüleyebilirsiniz.

Azure'da bir kapsayıcı dağıttığınızda kapsayıcı günlüklerine de erişebilirsiniz. Aşağıda birkaç Azure hizmeti ve Azure portalında kapsayıcı günlüklerine erişme adımları yer alır.

Azure hizmeti Azure portalında günlüklere erişme
Kapsayıcılar için Web Uygulaması Günlükleri görüntülemek için Sorunları tanılama ve çözme kaynağına gidin. Tanılama , yapılandırma gerektirmeden uygulamanızın sorunlarını gidermenize yardımcı olan akıllı ve etkileşimli bir deneyimdir. Günlüklerin gerçek zamanlı görünümü için İzleme - Günlük akışına gidin. Daha ayrıntılı günlük sorguları ve yapılandırma için İzleme altındaki diğer kaynaklara bakın.
Azure Konteyner Uygulamaları Ortam sorunlarını gidermek için ortam kaynağına gidin Sorunları tanılama ve çözme . Sık sık kap günlüklerini görmek istersiniz. Kapsayıcı kaynağında, Uygulama - Düzeltmesi yönetimi'nin altında düzeltmeyi seçin ve buradan sistem ve konsol günlüklerini görüntüleyebilirsiniz. Daha ayrıntılı günlük sorguları ve yapılandırma için İzleme altındaki kaynaklara bakın.
Azure Konteyner Örnekleri (Azure Container Instances) Kapsayıcılar kaynağına gidin ve Günlükler'i seçin.

Bu hizmetler için günlüklere erişmeye yönelik Azure CLI komutları aşağıdadır.

Azure hizmeti Günlüklere erişmek için Azure CLI komutu
Kapsayıcılar için Web Uygulaması az webapp log
Azure Konteyner Uygulamaları az containerapps logs
Azure Konteyner Örnekleri (Azure Container Instances) az container logs

VS Code'da günlükleri görüntüleme desteği de vardır. VS Code için Azure Araçları'nın yüklü olması gerekir. Aşağıda, VS Code'da Kapsayıcılar için Web Uygulamaları (Uygulama Hizmeti) günlüklerini görüntüleme örneği olarak verilmiştir.

Kapsayıcılar için Web Apps'te VS Code'da günlükleri görüntülemeyi gösteren ekran görüntüsü.

Sonraki Adımlar