Azure App Service için bir özel kapsayıcıyı yapılandırın

Bu makalede, özel kapsayıcıyı Azure App Service üzerinde çalışacak şekilde yapılandırma işlemi gösterilmektedir.

App Service'te temel kavramlar hakkında bilgi edinin ve Windows uygulamalarını kapsayıcıya alma yönergelerini alın.

Önkoşullar

Yeni kullanıcılar önce özel kapsayıcı hızlı başlangıç rehberini ve kılavuzunu izlemelidir.

Temel kavramlar hakkında bilgi edinin ve App Service'te Linux uygulamalarını kapsayıcıya alma yönergelerini alın.

Önkoşullar

Yeni kullanıcılar önce özel kapsayıcı hızlı başlangıç rehberini ve kılavuzunu izlemelidir. Yan arabası konteynerleri için bkz. Öğretici: Özel konteyner uygulaması için yan arabası konteyneri yapılandırma.

Not

Windows kapsayıcı görüntüsü çekme kimlik doğrulaması için hizmet ilkesi kullanılması artık desteklenmiyor. Hem Windows hem de Linux kapsayıcıları için yönetilen kimlik kullanmanızı öneririz.

Desteklenen ana görüntüler

Özel Windows görüntünüz için istediğiniz çerçeve için doğru parent görüntüsünü (temel görüntü) seçin:

  • .NET Framework uygulamalarını dağıtmak için Windows Server Long-Term Servicing Channel sürümünü temel alan bir üst görüntü kullanın.
  • .NET Core uygulamalarını dağıtmak için Windows Server Annual Channel sürümünü temel alan bir ana görüntü kullanın.

Uygulama başlatma sırasında ana imajın indirilmesi biraz zaman alır. Azure App Service'de önceden önbelleğe alınmış aşağıdaki üst görüntülerden birini kullanarak başlangıç süresini kısaltabilirsiniz:

Özel kapsayıcının Docker görüntüsünü değiştirme

Geçerli Docker görüntüsünü mevcut bir özel kapsayıcıda yeni bir görüntüyle değiştirmek için aşağıdaki komutu kullanın:

az webapp config container set --name <app-name> --resource-group <group-name> --container-image-name <docker-hub-repo>/<image>

<Yer tutucuları> kendi değerlerinizle değiştirin.

Özel kayıt defterinden görüntü kullanma

Azure Container Registry gibi özel bir kayıt defterinden görüntü kullanmak için aşağıdaki komutu çalıştırın:

az webapp config container set --name <app-name> --resource-group <group-name> --container-image-name <image-name> --docker-registry-server-url <private-repo-url> --docker-registry-server-user <username> --docker-registry-server-password <password>

Kullanıcı adı< ve parola alanlarında özel kayıt defteri hesabınızın> oturum açma kimlik bilgilerini sağlayın.<>

Azure Container Registry’den bir görüntü indirmek için yönetilen kimlik kullanma

Azure Container Registry'den çekmesi için web uygulamanızı yönetilen kimliği kullanarak yapılandırmak üzere aşağıdaki adımları kullanın. Adımlarda sistem tarafından atanan yönetilen kimlik kullanılır, ancak kullanıcı tarafından atanan yönetilen kimliği de kullanabilirsiniz.

Important

Azure Container Registry'nizin görüntüleri çekmek için yönetilen kimliği kullanabilmesi için kimlik doğrulaması için ARM hedef kitle belirteçlerine izin vermesi gerekir. Bu ayar devre dışı bırakıldığında, görüntü çekimleri " UNAUTHORIZED token doğrulama başarısız oldu" hatasıyla başarısız olur. Bu ayarı kontrol etmek ve etkinleştirmek için aşağıdaki komutları çalıştırın:

az acr config authentication-as-arm show -r <registry-name>
az acr config authentication-as-arm update -r <registry-name> --status enabled

Daha fazla bilgi için, Microsoft Entra kimlik doğrulama kapsamlarının kayıt kayıt kabulünü yapılandırma sayfasına bakınız.

  1. Komutunu kullanarak web uygulaması için az webapp identity assign etkinleştirin:

    az webapp identity assign --resource-group <group-name> --name <app-name> --query principalId --output tsv
    

    uygulama adını< uygulamanızın adıyla değiştirin>. --query ve --output bağımsız değişkenlerine göre filtrelenen komut çıktısı, atanan kimliğin hizmet sorumlusunun kimliğidir.

  2. Kapsayıcı kayıt defterinizin kaynak kimliğini alın:

    az acr show --resource-group <group-name> --name <registry-name> --query id --output tsv
    

    kayıt defteri-adını< kayıt defterinizin adıyla değiştirin>. Komutun çıktısı, --query ve --output argümanlarına göre filtrelenen kapsayıcı kayıt defterinin kaynak kimliğidir.

  3. Kapsayıcı kayıt defterine erişmek için yönetilen kimlik izni verin:

    az role assignment create --assignee <principal-id> --scope <registry-resource-id> --role "AcrPull"
    

    Aşağıdaki değerleri değiştirin:

    • komutundan < hizmet sorumlusu kimliğini içeren >
    • Kapsayıcı kayıt defterinizin kimliğiyle eşleşen <registry-resource-id>az acr show komutunu kullanın.

    Bu izinler hakkında daha fazla bilgi için bkz. Rol tabanlı erişim denetimi Azure nedir?

  4. Uygulamanızı, Azure Container Registry'den çekim yapmak için yönetilen kimliği kullanacak şekilde yapılandırın.

    az webapp config set --resource-group <group-name> --name <app-name> --generic-configurations '{"acrUseManagedIdentityCreds": true}'
    

    uygulama adını< web uygulamanızın adıyla değiştirin>.

    İpucu

    Komutları çalıştırmak için PowerShell konsolunu kullanıyorsanız, bu adımda ve sonraki adımda bağımsız değişkendeki --generic-configurations dizelerden çıkın. Örneğin: --generic-configurations '{\"acrUseManagedIdentityCreds\": true'.

  5. (İsteğe bağlı) Uygulamanız kullanıcı tarafından atanan bir yönetilen kimlik kullanıyorsa, kimliğin web uygulamasında yapılandırıldığından emin olun ve ardından istemci kimliğini belirtmek için özelliğini ayarlayın acrUserManagedIdentityID :

    az identity show --resource-group <group-name> --name <identity-name> --query clientId --output tsv
    

    Kullanıcı tarafından atanan yönetilen kimliğinizin kimlik adını< değiştirin ve çıkış istemci kimliğini kullanarak kullanıcı tarafından atanan yönetilen kimlik kimliğini yapılandırın.><>

    az  webapp config set --resource-group <group-name> --name <app-name> --generic-configurations '{"acrUserManagedIdentityID": "<client-id>"}'
    

Web uygulaması artık Azure Container Registry'den çekilmek için yönetilen kimlik kullanıyor.

Ağ korumalı kayıt defterinden görüntü kullanma

Sanal ağ veya şirket içi bir kayıt defterine bağlanmak ve kayıt defterinden çekme yapmak için uygulamanızın bir sanal ağ ile tümleştirilmesi gerekir. Azure Container Registry için özel bir uç nokta ile sanal ağ entegrasyonuna da ihtiyacınız var. Ağınızı ve DNS çözümlemenizi yapılandırdıktan sonra, görüntü çekme işleminin sanal ağ üzerinden yönlendirilmesine olanak tanıyın. vnetImagePullEnabled Site ayarını yapılandırın:

az resource update --resource-group <group-name> --name <app-name> --resource-type "Microsoft.Web/sites" --set properties.vnetImagePullEnabled [true|false]

Güncelleştirilmiş kapsayıcıyı görmüyorsanız ne yapacağınıza dair sorun giderme önerileri

Docker kapsayıcı ayarlarınızı yeni bir kapsayıcıya işaret eden şekilde değiştirirseniz, uygulamanın yeni kapsayıcıdan HTTP istekleri göndermesi birkaç dakika sürebilir. Yeni kapsayıcı indirilir ve başlatılırken, App Service eski kapsayıcıdan gelen istekleri karşılamaya devam eder. App Service, yeni kapsayıcı başlatıldıktan ve istekleri almaya hazır olduktan sonra yalnızca istekleri yeni kapsayıcıya gönderir.

Kapsayıcı görüntülerinin nasıl depolandığını öğrenin

App Service'te özel bir Docker görüntüsünü ilk kez çalıştırdığınızda, App Service komutunu gerçekleştirir docker pull ve tüm görüntü katmanlarını çeker. Katmanlar, şirket içinde Docker kullandığınızda olduğu gibi diskte depolanır. Uygulama her yeniden başlatıldığında App Service komutunu gerçekleştirir docker pull . Yalnızca değiştirilen katmanları çeker. Hiçbir değişiklik yoksa, App Service yerel diskte var olan katmanları kullanır.

Uygulama herhangi bir nedenle işlem örneklerini değiştirirse (fiyatlandırma katmanlarını değiştirme gibi), App Service'in tüm katmanları yeniden çekmesi gerekir. Daha fazla örnek eklemek için ölçeği genişletdiğinizde de aynı durum geçerlidir. Ayrıca, nadir durumlarda, uygulama örnekleri ölçek işlemi olmadan değişebilir.

Bağlantı noktası numarasını yapılandırma

Varsayılan olarak, App Service özel kapsayıcınızın 80 numaralı bağlantı noktasında dinlediğini kabul eder. Kapsayıcınız farklı bir bağlantı noktasını dinliyorsa, WEBSITES_PORT uygulama ayarını App Service uygulamanızda yapılandırın. Azure Cloud Shell kullanarak ayarlayabilirsiniz. Bash'te aşağıdaki komutu kullanın:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_PORT=8000

PowerShell'de aşağıdaki komutu kullanın:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_PORT"="8000"}

App Service şu anda kapsayıcınızın HTTP istekleri için yalnızca bir bağlantı noktasını kullanıma sunmasına izin verir.

Ortam değişkenlerini yapılandırma

Özel kapsayıcınız dışarıdan sağlamanız gereken ortam değişkenlerini kullanabilir. Cloud Shell kullanarak onları yollayabilirsiniz. Bash'te aşağıdaki komutu kullanın:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings DB_HOST="myownserver.mysql.database.azure.com"

PowerShell'de aşağıdaki komutu kullanın:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"DB_HOST"="myownserver.mysql.database.azure.com"}

Uygulamanız çalıştığında App Service uygulama ayarları otomatik olarak ortama değişken olarak eklenir. KAPSAYıCı ortamı değişkenlerini URL https://<app-name>.scm.azurewebsites.net/Envile doğrulayabilirsiniz.

Özel Docker görüntüleri içeren bir kapsayıcıya SSH eklediğinizde, veya envgibi printenv komutları kullanmaya çalıştığınızda yalnızca birkaç ortam değişkeni görebilirsiniz. Çalışma zamanı kullanımı için uygulamanıza geçirdiğiniz ortam değişkenleri gibi kapsayıcı içindeki tüm ortam değişkenlerini görmek için bu satırı giriş noktası betiğinize ekleyin:

eval $(printenv | sed -n "s/^\([^=]\+\)=\(.*\)$/export \1=\2/p" | sed 's/"/\\\"/g' | sed '/=/s//="/' | sed 's/$/"/' >> /etc/profile)

Tam bir örneğe bakın.

Uygulamanız özel bir kayıt defterinden veya Docker Hub görüntüleri kullanıyorsa, depoya erişim kimlik bilgileri ortam değişkenlerine kaydedilir: DOCKER_REGISTRY_SERVER_URL, DOCKER_REGISTRY_SERVER_USERNAME ve DOCKER_REGISTRY_SERVER_PASSWORD. Güvenlik riskleri nedeniyle, bu ayrılmış değişken adlarından hiçbiri uygulamaya sunulmaz.

Internet Information Services (IIS) veya .NET Framework (4.0 veya üzeri) container'ları için, kimlik bilgileri App Service tarafından .NET uygulama ayarlarına ve bağlantı dizelerine otomatik olarak enjekte edilen System.ConfigurationManager içine yerleştirilir. Diğer tüm diller veya çerçeveler için, aşağıdaki ön eklerden biriyle işlem için ortam değişkenleri olarak sağlanır:

  • APPSETTING_
  • SQLCONTR_
  • MYSQLCONTR_
  • SQLAZURECOSTR_
  • POSTGRESQLCONTR_
  • CUSTOMCONNSTR_

Ortam değişkenlerinin docker-compose.yml dosyasında belirtildiği tek kapsayıcılı veya çok kapsayıcılı uygulamalar için bu yöntemi kullanabilirsiniz.

Kalıcı paylaşılan depolama kullanma

Dosyaları yeniden başlatmalar arasında kalıcı hale getirmek ve örnekler arasında paylaşmak için özel kapsayıcı dosya sisteminizdeki dizini kullanabilirsiniz C:\home . Dizini kullandığınızda C:\home , özel kapsayıcınız kalıcı depolamaya erişebilir.

  • Kalıcı depolama devre dışı bırakıldığında, dizine C:\home yazma işlemleri uygulama yeniden başlatmalarında veya birden çok örnekte kalıcı olmaz.
  • Kalıcı depolama etkinleştirildiğinde dizine C:\home yapılan tüm yazma işlemleri devam eder.

Ölçeklendirilmiş bir uygulamanın tüm örnekleri bunlara erişebilir. Kapsayıcı başlatıldığında, kalıcı depolamada herhangi bir dosya varsa, kapsayıcının C:\home dizinindeki içeriğin üzerine yazar.

Tek istisna C:\home\LogFiles dizinidir. Bu dizin kapsayıcıyı ve uygulama günlüklerini depolar. Uygulama günlüğü Dosya Sistemi seçeneğiyle etkinleştirildiyse, kalıcı depolamanın etkin olup olmadığına bakılmaksızın, uygulama yeniden başlatıldığında klasör her zaman kalıcı olur. Başka bir deyişle, kalıcı depolamayı etkinleştirdiğinizde veya devre dışı bırakdığınızda, uygulama günlüğü davranışını etkilemez.

Varsayılan olarak, kalıcı depolama Windows özel kapsayıcılarda enabled'dır. Devre dışı bırakmak için WEBSITES_ENABLE_APP_SERVICE_STORAGE uygulama ayarı değerini false kullanarak olarak ayarlayın. Bash'te aşağıdaki komutu kullanın:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=false

PowerShell'de aşağıdaki komutu kullanın:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_ENABLE_APP_SERVICE_STORAGE"=false}

Dosyaları yeniden başlatmalar arasında kalıcı hale getirmek ve örnekler arasında paylaşmak için özel kapsayıcı dosya sisteminizdeki dizini kullanabilirsiniz /home . Dizini kullandığınızda /home , özel kapsayıcınız kalıcı depolamaya erişebilir. İçinde /home kaydettiğiniz verilerin App Service planınıza dahil edilen depolama alanı kotasına katkıda bulunduğunu unutmayın.

  • Kalıcı depolama devre dışı bırakıldığında, dizine /home yazma işlemleri uygulama yeniden başlatmalarında veya birden çok örnekte kalıcı olmaz.
  • Kalıcı depolama etkinleştirildiğinde dizine /home yapılan tüm yazma işlemleri devam eder.

Ölçeklendirilmiş bir uygulamanın tüm örnekleri bunlara erişebilir. Kapsayıcı başlatıldığında, kalıcı depolamada herhangi bir dosya varsa, kapsayıcının /home dizinindeki içeriğin üzerine yazar.

Tek istisna /home/LogFiles dizinidir. Bu dizin kapsayıcıyı ve uygulama günlüklerini depolar. Uygulama günlüğü Dosya Sistemi seçeneğiyle etkinleştirildiyse, kalıcı depolamanın etkin olup olmadığına bakılmaksızın, uygulama yeniden başlatıldığında klasör her zaman kalıcı olur. Başka bir deyişle, kalıcı depolamayı etkinleştirdiğinizde veya devre dışı bırakdığınızda, uygulama günlüğü davranışını etkilemez.

/home veya Azure üzerinde bağlanmış bir depolama yoluna veri yazmanızı öneririz. Bu yolların dışına yazdığınız veriler yeniden başlatmalar sırasında kalıcı olmaz. Veriler, App Service planları dosya depolama kotasından ayrı olarak platform tarafından yönetilen konak disk alanına kaydedilir.

Varsayılan olarak, Linux özel kapsayıcılarında kalıcı depolama devre dışıdır. Etkinleştirmek için WEBSITES_ENABLE_APP_SERVICE_STORAGE kullanarak true uygulama ayarı değerini olarak ayarlayın. Bash'te aşağıdaki komutu kullanın:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=true

PowerShell'de aşağıdaki komutu kullanın:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_ENABLE_APP_SERVICE_STORAGE"=true}

Not

Kendi kalıcı depolama alanınızı da yapılandırabilirsiniz.

HTTPS oturumlarını algılama

App Service ön uçlarda TLS'yi sonlandırır. Bu, TLS isteklerinin uygulamanıza hiçbir zaman ulaşamayacağı anlamına gelir. Uygulamanıza TLS için herhangi bir destek uygulamanıza gerek yoktur ve uygulamamalısınız.

Ön uçlar Azure veri merkezlerinde bulunur. TlS'yi uygulamanızla birlikte kullanıyorsanız İnternet üzerinden trafiğiniz her zaman güvenli bir şekilde şifrelenir.

ASP.NET makina anahtarı enjeksiyonunu özelleştirme

Kapsayıcı başlatma sırasında anahtarlar otomatik olarak oluşturulur ve ASP.NET şifreleme yordamları için makine anahtarları olarak kapsayıcıya eklenir. Kapsayıcınızda şu ortam değişkenlerini arayarak bu anahtarları bulabilirsiniz : MACHINEKEY_Decryption, MACHINEKEY_DecryptionKey, MACHINEKEY_ValidationKeyve MACHINEKEY_Validation.

Her yeniden başlatmadaki yeni anahtarlar, uygulamanız bunlara bağlıysa, ASP.NET form kimlik doğrulamasını ve görünüm durumunu sıfırlayabilir. Anahtarların otomatik olarak yenilenmesini önlemek için bunları App Service uygulama ayarları olarak el ile ayarlayın.

Kapsayıcıya bağlanma

Tanılama görevleri için doğrudan Windows kapsayıcınıza bağlanmak için https://<app-name>.scm.azurewebsites.net/ gidin ve SSH seçeneğini belirleyin. Bu seçenek, kapsayıcınızın içinde komut çalıştırabileceğiniz doğrudan bir SSH oturumu oluşturur.

  • Yalnızca paylaşılan depolama alanınızdaki dosyaları gösteren yukarıdaki grafik tarayıcıdan ayrı çalışır.
  • Ölçeği genişletilmiş bir uygulamada, SSH oturumu kapsayıcı örneklerinden birine bağlanır. Üstteki Kudu menüsünün örnek açılan listesinden farklı bir örnek seçebilirsiniz.
  • Paylaşılan depolamadaki değişiklikler dışında, uygulamanız yeniden başlatıldığında SSH oturumundan kapsayıcıda yaptığınız değişiklikler kalıcı olmaz . Bu değişiklikler Docker görüntüsünün bir parçası değildir. Kayıt defteri ayarları ve yazılım yüklemesi gibi değişiklikleri kalıcı hale getirmek için bunları Dockerfile'ın bir parçası yapın.

Tanılama günlüklerine erişim

App Service, Docker konağındaki eylemleri ve kapsayıcı içindeki etkinlikleri günlüğe kaydeder. Docker konağından günlükler (platform günlükleri) varsayılan olarak etkinleştirilir. Kapsayıcının içinden uygulama günlüklerini veya web sunucusu günlüklerini el ile etkinleştirmeniz gerekir. Daha fazla bilgi için bkz . Uygulama günlüğünü etkinleştirme ve Web sunucusu günlüğünü etkinleştirme.

Docker günlüklerine çeşitli yollarla erişebilirsiniz:

Azure portalı

Docker günlükleri, uygulamanızın Container Ayarları bölmesindeki Azure portalında görüntülenir. Günlükler kısaltıldı. Tüm günlükleri indirmek için İndir'i seçin.

Kudu

Günlük dosyalarını tek tek görmek için https://<app-name>.scm.azurewebsites.net/DebugConsole konumuna gidin ve LogFiles klasörünü seçin. Dizinin tamamını LogFiles indirmek için dizin adının sol kısmındaki İndir simgesini seçin. Bu klasöre ftp istemcisi kullanarak da erişebilirsiniz.

Varsayılan olarak, kalıcı paylaşılan depolama etkin olmadığından SSH terminalindeki klasöre erişemezsiniz C:\home\LogFiles . Konsol terminalinde bu davranışı etkinleştirmek için kalıcı paylaşılan depolamayı etkinleştirin.

Şu anda kullanılmakta olan Docker günlüğünü ftp istemcisi kullanarak indirmeye çalışırsanız, dosya kilidi nedeniyle bir hata alabilirsiniz.

Kudu API'si

Docker günlüklerinin meta verilerini görmek için doğrudan https://<app-name>.scm.azurewebsites.net/api/logs/docker adresine gidin. Listede birden fazla günlük dosyası görebilirsiniz. href öğesini günlük dosyasını doğrudan indirmek için kullanabilirsiniz.

Tüm günlükleri tek bir ZIP dosyasında birlikte indirmek için https://<app-name>.scm.azurewebsites.net/api/logs/docker/zip sayfasına erişin.

Kapsayıcı belleğini özelleştirme

Varsayılan olarak, Azure App Service'te dağıtılan tüm Windows kapsayıcılarının bir bellek sınırı ayarlıdır. Aşağıdaki tabloda App Service planı SKU'su başına varsayılan ayarlar listelenir.

App Service planı SKU'su Uygulama başına varsayılan bellek sınırı (MB cinsinden)
P1v3 1024
P1Mv3 1024
P2v3 1536
P2Mv3 1536
P3v3 2048
P3Mv3 2048
P4Mv3 2560
P5Mv3 3072

WEBSITE_MEMORY_LIMIT_MB içinde uygulama ayarını sağlayarak bu değeri değiştirebilirsiniz. Bash'te aşağıdaki komutu kullanın:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_MEMORY_LIMIT_MB=2000

PowerShell'de aşağıdaki komutu kullanın:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITE_MEMORY_LIMIT_MB"=2000}

Değer megabayt (MB) cinsinden tanımlanır ve konağın toplam fiziksel belleğine eşit ve daha küçük olmalıdır. Örneğin, 8 GB RAM'e sahip bir App Service planında, tüm uygulamaların toplam toplamı WEBSITE_MEMORY_LIMIT_MB 8 GB'ı aşamaz. Kullanılabilir bellek miktarı hakkında daha fazla bilgi için bkz. App Service fiyatlandırmasında Premium v3 hizmet planı.

İşlem çekirdeği sayısını özelleştirme

Varsayılan olarak, Windows kapsayıcısı fiyatlandırma katmanınız için tüm kullanılabilir çekirdeklerle çalışır. Hazırlama yuvanızın kullandığı çekirdek sayısını azaltmak isteyebilirsiniz. Kapsayıcının kullandığı çekirdek sayısını azaltmak için uygulama ayarını tercih edilen çekirdek sayısına ayarlayın WEBSITE_CPU_CORES_LIMIT . Cloud Shell kullanarak ayarlayabilirsiniz.

Bash'te aşağıdaki komutu kullanın:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --slot staging --settings WEBSITE_CPU_CORES_LIMIT=1

PowerShell'de aşağıdaki komutu kullanın:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITE_CPU_CORES_LIMIT"=1}

İpucu

Uygulama ayarının güncelleştirilmesi otomatik yeniden başlatmayı tetikler ve bu da en düşük kapalı kalma süresine neden olur. Üretim uygulaması için bir hazırlama yuvasına değiştirmeyi göz önünde bulundurun. Hazırlama yuvasındaki uygulama ayarını değiştirin ve üretim ortamına geri değiştirin.

Ayarlanmış numaranızı doğrulamak için Azure portalını veya Kudu portalını (https://<app-name>.scm.azurewebsites.net/webssh/host) kullanarak bir SSH oturumu açın. PowerShell kullanarak aşağıdaki komutları girin. Her komut bir sayı döndürür.

Get-ComputerInfo | ft CsNumberOfLogicalProcessors # Total number of enabled logical processors. Disabled processors are excluded.
Get-ComputerInfo | ft CsNumberOfProcessors # Number of physical processors.

İşlemciler çok çekirdekli veya hiper iş parçacığı işlemcileri olabilir. Kaç çekirdeğin kullanılabilir olduğunu öğrenmek için App Service fiyatlandırmasında Premium v3 hizmet planına bakın.

Sağlık ping davranışını özelleştirin

App Service, bir kapsayıcı başlatıldığında ve HTTP ping'ine yanıt verdiğinde, kapsayıcının başarıyla başlatıldığını kabul eder. Sistem durumu ping isteği User-Agent= "App Service Hyper-V Container Availability Check" üst bilgisini içerir. Kapsayıcı başlatılır ancak belirli bir süre sonra ping isteklerine yanıt vermezse, App Service Docker günlüğüne bir olay kaydeder.

Uygulamanız yoğun kaynak kullanıyorsa kapsayıcı HTTP ping'ine zamanında yanıt vermeyebilir. HTTP pingleri başarısız olduğunda ne olacağını denetlemek için uygulama ayarını ayarlayın CONTAINER_AVAILABILITY_CHECK_MODE . Cloud Shell kullanarak ayarlayabilirsiniz. Bash'te aşağıdaki komutu kullanın:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings CONTAINER_AVAILABILITY_CHECK_MODE="ReportOnly"

PowerShell'de aşağıdaki komutu kullanın:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"CONTAINER_AVAILABILITY_CHECK_MODE"="ReportOnly"}

Aşağıdaki tabloda olası değerler gösterilmektedir:

Değer Description
Repair Ardışık üç kullanılabilirlik denetiminden sonra kapsayıcıyı yeniden başlatın.
ReportOnly Varsayılan değer. Üç ardışık kullanılabilirlik denetiminden sonra kapsayıcıyı Docker günlüklerinde bildirin, ancak yeniden başlatmayın.
Off Kullanılabilirliği denetlemeyin.

Grup tarafından yönetilen hizmet hesapları için destek

Grup tarafından yönetilen hizmet hesapları App Service'teki Windows kapsayıcılarında desteklenmez.

SSH'yi etkinleştirme

Bir komut satırı terminalinden yönetim komutlarını uzaktan çalıştırmak için Secure Shell (SSH) kullanabilirsiniz. özel kapsayıcılarla Azure portalı SSH konsol özelliğini etkinleştirmek için şu adımları izleyin:

  1. Aşağıdaki örnek içeriklerle standart sshd_config bir dosya oluşturun ve bunu uygulama projesi kök dizinine yerleştirin:

    Port 			2222
    ListenAddress 		0.0.0.0
    LoginGraceTime 		180
    X11Forwarding 		yes
    Ciphers aes128-cbc,3des-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr
    MACs hmac-sha1,hmac-sha1-96
    StrictModes 		yes
    SyslogFacility 		DAEMON
    PasswordAuthentication 	yes
    PermitEmptyPasswords 	no
    PermitRootLogin 	yes
    Subsystem sftp internal-sftp
    

    Not

    Bu dosya OpenSSH'yi yapılandırıyor ve Azure portalı SSH özelliğiyle uyumlu olması için aşağıdaki öğeleri içermelidir:

    • Port değeri 2222 olarak ayarlanmalıdır.
    • Değerler Ciphers bu listede en az bir öğe içermelidir: aes128-cbc, 3des-cbcveya aes256-cbc.
    • Değerler MACs bu listede en az bir öğe içermelidir: hmac-sha1 veya hmac-sha1-96.
  2. adlı entrypoint.sh bir giriş noktası betiği oluşturun veya var olan herhangi bir giriş noktası dosyasını değiştirin. SSH hizmetini başlatmak için komutunu ve uygulama başlatma komutunu ekleyin. Aşağıdaki örnekte bir Python uygulaması başlatma gösterilmektedir. Son komutu proje diline veya yığınına göre değiştirin:

    #!/bin/sh
    set -e
    service ssh start
    exec gunicorn -w 4 -b 0.0.0.0:8000 app:app
    
  3. Temel görüntü dağıtımına göre Dockerfile dosyasına aşağıdaki yönergeleri ekleyin. Bu yönergeler yeni dosyaları kopyalar, OpenSSH sunucusunu yükler, uygun izinleri ayarlar ve özel giriş noktasını yapılandırıp sırasıyla uygulama ve SSH sunucusu için gereken bağlantı noktalarını kullanıma sunar:

    COPY entrypoint.sh ./
    
    # Start and enable SSH
    RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get install -y --no-install-recommends openssh-server \
        && echo "root:Docker!" | chpasswd \
        && chmod u+x ./entrypoint.sh
    COPY sshd_config /etc/ssh/
    
    EXPOSE 8000 2222
    
    ENTRYPOINT [ "./entrypoint.sh" ] 
    

    Not

    Kök parola, App Service tarafından kapsayıcı ile SSH oturumuna erişim izni vermek için kullanıldığı için tam olarak Docker! olmalıdır. Bu yapılandırma kapsayıcıya dış bağlantılara izin vermez. Kapsayıcının bağlantı noktasına 2222 yalnızca özel bir sanal ağın köprü ağı içinden erişilebilir. İnternet'te bulunan bir saldırgan buna erişemiyor.

  4. Docker görüntüsünü yeniden derleyip kayıt defterine gönderin ve ardından Azure portalında Web App SSH özelliğini test edin.

Daha fazla sorun giderme bilgisi için Azure App Service Troubleshooting blogu bölümüne bakın.

Tanılama günlüklerine erişim

Kapsayıcının içinden oluşturulan konsol günlüklerine erişebilirsiniz.

Kapsayıcı kaydını açmak için aşağıdaki komutu çalıştırın:

az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem

<app-name> ve <resource-group-name> değerlerini web uygulamanız için uygun adlarla değiştirin.

Container günlüğünü açtıktan sonra günlük akışını görüntülemek için aşağıdaki komutu çalıştırın:

az webapp log tail --name <app-name> --resource-group <resource-group-name>

Konsol günlükleri hemen görünmüyorsa 30 saniye içinde yeniden denetleyin.

Günlük akışını istediğiniz zaman durdurmak için klavye kısayolu Ctrl+C'yi kullanın.

Çoklu konteyner uygulamaları yapılandırma

Not

Docker Compose özelliği 31 Mart 2027'de kullanımdan kaldırılacaktır. Sepet kapsayıcıları, App Service'te çok kapsayıcılı uygulamaların yerini alıyor. Yeni hizmetler için Öğretici: Özel kapsayıcı uygulaması için yan araba kapsayıcı yapılandırma bölümüne bakın. App Service'teki mevcut çok kapsayıcılı uygulamalar için bkz. Docker Compose uygulamalarınızı sepet özelliğine geçirme.

Docker Compose'da kalıcı depolama kullanma

WordPress gibi çok kapsayıcılı uygulamaların düzgün çalışması için kalıcı depolama gerekir. Kalıcı depolamayı etkinleştirmek için Docker Compose yapılandırmanızın kapsayıcınızın dışındaki bir depolama konumuna işaret etmesi gerekir. Kapsayıcınızın içindeki depolama konumlarındaki değişiklikler, uygulama yeniden başlatıldıktan sonra kalıcı olmaz.

Kalıcı depolamayı etkinleştirmek için uygulama ayarını ayarlayın WEBSITES_ENABLE_APP_SERVICE_STORAGE . az webapp config appsettings set içinde komutunu kullanın.

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE

Dosyanızda docker-compose.yml seçeneğini volumes ile ${WEBAPP_STORAGE_HOME} eşleyin.

WEBAPP_STORAGE_HOME , App Service'te uygulamanızın kalıcı depolama alanıyla eşleyen bir ortam değişkenidir. Örneğin:

wordpress:
  image: <image name:tag>
  volumes:
  - "${WEBAPP_STORAGE_HOME}/site/wwwroot:/var/www/html"
  - "${WEBAPP_STORAGE_HOME}/phpmyadmin:/var/www/phpmyadmin"
  - "${WEBAPP_STORAGE_HOME}/LogFiles:/var/log"

Önizleme sınırlamaları

Çoklu konteyner şu anda önizleme aşamasındadır. Aşağıdaki App Service platformu özellikleri desteklenmez:

  • Kimlik doğrulaması veya yetkilendirme
  • Yönetilen kimlikler
  • Kökenler arası kaynak paylaşımı (CORS)
  • Docker Compose senaryolarıyla sanal ağ tümleştirmesi

Azure App Service üzerinde Docker Compose şu anda 4.000 karakter sınırına sahiptir.

Docker Compose seçenekleri

Aşağıdaki bölümlerde desteklenen ve desteklenmeyen Docker Compose yapılandırma seçenekleri gösterilmektedir.

Desteklenen seçenekler

Desteklenmeyen seçenekler

  • build (izin verilmez)
  • depends_on (yoksayıldı)
  • networks (yoksayıldı)
  • secrets (yoksayıldı)
  • 80 ve 8080 dışındaki bağlantı noktaları (yoksayılır)
  • $variable ve ${variable} gibi varsayılan ortam değişkenleri (Docker'ın aksine)

Söz dizimi sınırlamaları

  • Dosyadaki ilk YAML deyimi her zaman olmalıdır version x.x.
  • Bağlantı noktaları bölümünde tırnak içine alınmış sayılar kullanılmalıdır.
  • image > volume bölümü alıntılanmalı ve izin tanımları içermemelidir.
  • Birimler bölümü, birim adından sonra boş bir küme ayracı içeremez.

Not

Açıkça belirtilmeyen diğer seçenekler önizlemede yoksayılır.

Günlüklerde robots933456 iletisini yoksayın

Kapsayıcı günlüklerinde aşağıdaki iletiyi görebilirsiniz:

2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"

Bu iletiyi güvenle yoksayabilirsiniz. /robots933456.txt , sahte bir URL yoludur. App Service, kapsayıcının istekler için uygun olup olmadığını denetlemek için bunu kullanır. "404" hata yanıtı, yolun mevcut olmadığını gösterir ve App Service'e kapsayıcının iyi durumda olduğunu ve isteklere yanıt vermeye hazır olduğunu bildirir.