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.
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:
- mcr.microsoft.com/windows/servercore:ltsc2025
- mcr.microsoft.com/windows/servercore:ltsc2022
- mcr.microsoft.com/dotnet/framework/aspnet:4.8.1-windowsservercore-ltsc2022
- mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019
- mcr.microsoft.com/dotnet/runtime:10.0-nanoserver-ltsc2025
- mcr.microsoft.com/dotnet/runtime:8.0-nanoserver-ltsc2022
- mcr.microsoft.com/dotnet/aspnet:10.0-nanoserver-ltsc2025
- mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-ltsc2022
Ö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.
Komutunu kullanarak web uygulaması için
az webapp identity assignetkinleştirin:az webapp identity assign --resource-group <group-name> --name <app-name> --query principalId --output tsvuygulama adını< uygulamanızın adıyla değiştirin>.
--queryve--outputbağımsız değişkenlerine göre filtrelenen komut çıktısı, atanan kimliğin hizmet sorumlusunun kimliğidir.Kapsayıcı kayıt defterinizin kaynak kimliğini alın:
az acr show --resource-group <group-name> --name <registry-name> --query id --output tsvkayıt defteri-adını< kayıt defterinizin adıyla değiştirin>. Komutun çıktısı,
--queryve--outputargümanlarına göre filtrelenen kapsayıcı kayıt defterinin kaynak kimliğidir.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 showkomutunu kullanın.
Bu izinler hakkında daha fazla bilgi için bkz. Rol tabanlı erişim denetimi Azure nedir?
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-configurationsdizelerden çıkın. Örneğin:--generic-configurations '{\"acrUseManagedIdentityCreds\": true'.(İ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 tsvKullanı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:\homeyazma işlemleri uygulama yeniden başlatmalarında veya birden çok örnekte kalıcı olmaz. - Kalıcı depolama etkinleştirildiğinde dizine
C:\homeyapı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
/homeyazma işlemleri uygulama yeniden başlatmalarında veya birden çok örnekte kalıcı olmaz. - Kalıcı depolama etkinleştirildiğinde dizine
/homeyapı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:
Aşağıdaki örnek içeriklerle standart
sshd_configbir 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-sftpNot
Bu dosya OpenSSH'yi yapılandırıyor ve Azure portalı SSH özelliğiyle uyumlu olması için aşağıdaki öğeleri içermelidir:
-
Portdeğeri2222olarak ayarlanmalıdır. - Değerler
Ciphersbu listede en az bir öğe içermelidir:aes128-cbc,3des-cbcveyaaes256-cbc. - Değerler
MACsbu listede en az bir öğe içermelidir:hmac-sha1veyahmac-sha1-96.
-
adlı
entrypoint.shbir 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: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ına2222yalnızca özel bir sanal ağın köprü ağı içinden erişilebilir. İnternet'te bulunan bir saldırgan buna erişemiyor.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
commandentrypointenvironmentimageportsrestartservices-
volumes(Azure Depolama e eşleme desteklenmiyor)
Desteklenmeyen seçenekler
-
build(izin verilmez) -
depends_on(yoksayıldı) -
networks(yoksayıldı) -
secrets(yoksayıldı) -
80ve8080dışındaki bağlantı noktaları (yoksayılır) -
$variableve${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 > volumebö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.