Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku se dozvíte, jak nakonfigurovat vlastní kontejner pro spuštění ve službě Aplikace Azure Service.
Přečtěte si o klíčových konceptech a získejte pokyny pro kontejnerizaci aplikací pro Windows ve službě App Service. Noví uživatelé by měli nejprve postupovat podle rychlého průvodce vlastního kontejneru a kurzu.
Seznamte se s klíčovými koncepty a získejte pokyny pro kontejnerizaci linuxových aplikací ve službě App Service. Noví uživatelé by měli nejprve postupovat podle rychlého startu s vlastním kontejnerem a následovat tutoriál. Pro postranní kontejnery viz Kurz: Konfigurace postranního kontejneru pro vlastní kontejner ve službě Azure App Service.
Poznámka:
Použití služebního účtu pro ověřování stahování obrazu kontejneru Windows již není podporováno. Doporučujeme používat spravovanou identitu pro kontejnery Windows i Linux.
Podporované zdrojové obrázky
Vyberte správnou nadřazenou image (základní image) pro architekturu, kterou chcete použít pro vlastní image Windows:
- Pokud chcete nasadit aplikace rozhraní .NET Framework, použijte nadřazenou image založenou na vydání kanálu údržby systému Windows Server 2019 Core Long-Term.
- Pokud chcete nasadit aplikace .NET Core, použijte nadřazenou image založenou na verzi Windows Serveru 2019 Nano Annual Channel .
Stažení nadřazeného obrazu během spuštění aplikace zabere nějaký čas. Dobu spuštění můžete zkrátit pomocí jedné z následujících nadřazených imagí, které jsou už uložené v mezipaměti ve službě Azure App Service:
- mcr.microsoft.com/windows/servercore:ltsc2022
- mcr.microsoft.com/windows/servercore:ltsc2019
-
mcr.microsoft.com/dotnet/framework/aspnet:
4.8-windowsservercore-ltsc2022 -
mcr.microsoft.com/dotnet/framework/aspnet:
4.8-windowsservercore-ltsc2019 -
mcr.microsoft.com/dotnet/runtime:
6.0-nanoserver-ltsc2022 -
mcr.microsoft.com/dotnet/runtime:
6.0-nanoserver-1809 -
mcr.microsoft.com/dotnet/aspnet:
6.0-nanoserver-ltsc2022 -
mcr.microsoft.com/dotnet/aspnet:
6.0-nanoserver-1809
Změňte Docker image vlastního kontejneru
Pomocí následujícího příkazu změňte aktuální image Dockeru na novou image v existujícím vlastním kontejneru:
az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name <docker-hub-repo>/<image>
Použití image z privátního registru
Pokud chcete použít image z privátního registru, jako je Azure Container Registry, spusťte následující příkaz:
az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name <image-name> --docker-registry-server-url <private-repo-url> --docker-registry-server-user <username> --docker-registry-server-password <password>
Zadejte přihlašovací údaje pro váš účet v privátním registru do polí \<username> a \<password>.
Použití spravované identity k načtení image ze služby Azure Container Registry
Pomocí následujících kroků nakonfigurujte webovou aplikaci tak, aby načítá z Azure Container Registry pomocí spravované identity. Kroky používají spravovanou identitu přiřazenou systémem, ale můžete také použít spravovanou identitu přiřazenou uživatelem.
Pomocí příkazu povolte spravovanou identitu přiřazenou systémem pro webovou aplikaci
az webapp identity assign:az webapp identity assign --resource-group <group-name> --name <app-name> --query principalId --output tsvNahraďte <název> aplikace názvem, který jste použili v předchozím kroku. Výstup příkazu, filtrovaný podle argumentů
--querya--output, je ID hlavní služby přiřazené identity.Získejte identifikátor zdroje vašeho kontejnerového registru.
az acr show --resource-group <group-name> --name <registry-name> --query id --output tsvNahraďte <název> registru názvem vašeho registru. Výstup příkazu filtrovaný podle
--query--outputargumentů je ID prostředku registru kontejneru.Udělte spravované identitě oprávnění pro přístup k registru kontejneru:
az role assignment create --assignee <principal-id> --scope <registry-resource-id> --role "AcrPull"Nahraďte následující hodnoty:
-
<principal-id> s ID hlavního objektu služby z příkazu
az webapp identity assign -
<registry-resource-id> s ID vašeho registru kontejneru získaným z příkazu
az acr show
Další informace o těchto oprávněních najdete v tématu Co je řízení přístupu na základě role v Azure?
-
<principal-id> s ID hlavního objektu služby z příkazu
Nakonfigurujte aplikaci tak, aby používala spravovanou identitu k načtení ze služby Azure Container Registry.
az webapp config set --resource-group <group-name> --name <app-name> --generic-configurations '{"acrUseManagedIdentityCreds": true}'Nahraďte následující hodnoty:
- <název> aplikace s názvem vaší webové aplikace.
Návod
Pokud ke spuštění příkazů používáte konzoli PowerShell, escapujte řetězce v argumentu
--generic-configurationsv tomto i následujícím kroku. Například:--generic-configurations '{\"acrUseManagedIdentityCreds\": true'.(Volitelné) Pokud vaše aplikace používá spravovanou identitu přiřazenou uživatelem, ujistěte se, že je ve webové aplikaci nakonfigurovaná identita, a pak nastavte
acrUserManagedIdentityIDvlastnost tak, aby určila ID klienta:az identity show --resource-group <group-name> --name <identity-name> --query clientId --output tsvNahraďte
<identity-name>vaší uživatelsky přiřazenou spravovanou identitou a použijte výstup<client-id>k nakonfigurování ID uživatelsky přiřazené spravované identity.az webapp config set --resource-group <group-name> --name <app-name> --generic-configurations '{"acrUserManagedIdentityID": "<client-id>"}'
Webová aplikace teď používá spravovanou identitu k načtení ze služby Azure Container Registry.
Použijte obraz z registru chráněného sítí
Pokud se chcete připojit a načíst z registru uvnitř virtuální sítě nebo v místním prostředí, musí se vaše aplikace integrovat s virtuální sítí. Potřebujete také integraci virtuální sítě pro Azure Container Registry s privátním koncovým bodem. Po nakonfigurování sítě a překladu DNS povolte směrování stažení obrazu skrze virtuální síť.
vnetImagePullEnabled Nakonfigurujte nastavení webu:
az resource update --resource-group <group-name> --name <app-name> --resource-type "Microsoft.Web/sites" --set properties.vnetImagePullEnabled [true|false]
Co dělat, pokud se nezobrazuje aktualizovaný kontejner: Jak řešit problémy
Pokud změníte nastavení kontejneru Dockeru tak, aby odkazovali na nový kontejner, může to trvat několik minut, než aplikace obsluhuje požadavky HTTP z nového kontejneru. Zatímco se nový kontejner načte a spustí, služba App Service bude dál obsluhovat požadavky ze starého kontejneru. Služba App Service odesílá požadavky do nového kontejneru jenom po spuštění a je připravená přijímat žádosti.
Informace o ukládání imagí kontejnerů
Při prvním spuštění vlastní Docker image ve službě App Service provede App Service příkaz docker pull a stáhne všechny vrstvy image. Vrstvy se ukládají na disk, stejně jako když používáte Docker v místním prostředí. Pokaždé, když se aplikace restartuje, provede služba App Service příkaz docker pull. Přitahuje pouze změněné vrstvy. Pokud nedojde k žádným změnám, služba App Service používá existující vrstvy na místním disku.
Pokud aplikace z nějakého důvodu změní výpočetní instance (například změnu cenových úrovní), služba App Service musí znovu vyžádat všechny vrstvy. Totéž platí, když škálujete přidáním dalších instancí. Ve výjimečných případech se instance aplikace můžou změnit i bez operace škálování.
Konfigurace čísla portu
Služba App Service ve výchozím nastavení předpokládá, že váš vlastní kontejner naslouchá na portu 80. Pokud váš kontejner naslouchá jinému portu, nastavte nastavení aplikace WEBSITES_PORT ve vaší aplikaci App Service. Můžete ho nastavit pomocí Azure Cloud Shellu. V prostředí Bash použijte následující příkaz:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_PORT=8000
V PowerShellu použijte následující příkaz:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_PORT"="8000"}
App Service v současné době umožňuje kontejneru zveřejnit pouze jeden port pro požadavky HTTP.
Konfigurace proměnných prostředí
Váš vlastní kontejner může používat proměnné prostředí, které potřebujete zadat externě. Můžete je předat pomocí Cloud Shellu. V prostředí Bash použijte následující příkaz:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings DB_HOST="myownserver.mysql.database.azure.com"
V PowerShellu použijte následující příkaz:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"DB_HOST"="myownserver.mysql.database.azure.com"}
Když se vaše aplikace spustí, nastavení aplikace služby App Service se automaticky vloží do procesu jako proměnné prostředí. Proměnné prostředí kontejneru můžete ověřit pomocí adresy URL https://<app-name>.scm.azurewebsites.net/Env.
Když použijete SSH do kontejneru s vlastními obrazy Dockeru, můžete při pokusu o použití příkazů, jako jsou env nebo printenv, vidět pouze několik proměnných prostředí. Pokud chcete zobrazit všechny proměnné prostředí v kontejneru, například proměnné, které předáte aplikaci pro použití za běhu, přidejte tento řádek do skriptu vstupního bodu:
eval $(printenv | sed -n "s/^\([^=]\+\)=\(.*\)$/export \1=\2/p" | sed 's/"/\\\"/g' | sed '/=/s//="/' | sed 's/$/"/' >> /etc/profile)
Podívejte se na úplný příklad.
Pokud vaše aplikace používá image z privátního registru nebo z Docker Hubu, přihlašovací údaje pro přístup k úložišti se ukládají do proměnných prostředí: DOCKER_REGISTRY_SERVER_URL, DOCKER_REGISTRY_SERVER_USERNAMEa DOCKER_REGISTRY_SERVER_PASSWORD. Kvůli rizikům zabezpečení se žádné z těchto názvů rezervovaných proměnných nedají aplikaci vystavit.
Pro kontejnery pro Služby Internetových informací (IIS) nebo .NET Framework (4.0 nebo novější) jsou přihlašovací údaje automaticky vloženy do System.ConfigurationManager jako nastavení aplikace .NET a připojovací řetězce službou App Service. Pro všechny ostatní jazyky nebo architektury jsou pro tento proces poskytovány jako proměnné prostředí s jednou z následujících předpon:
APPSETTING_SQLCONTR_MYSQLCONTR_SQLAZURECOSTR_POSTGRESQLCONTR_CUSTOMCONNSTR_
Tuto metodu můžete použít pro jednokontejnerové i vícekontejnerové aplikace, kde jsou v docker-compose.yml souboru zadány proměnné prostředí.
Použití trvalého sdíleného úložiště
Adresář ve vlastním systému souborů kontejneru C:\home můžete použít k zachování souborů napříč restartováními a jejich sdílení mezi instancemi. Při použití C:\home adresáře má váš vlastní kontejner přístup k trvalému úložišti.
Pokud je trvalé úložiště zakázané, zápisy do C:\home adresáře se nezachovají napříč restartováním aplikace nebo napříč několika instancemi. Pokud je povolené trvalé úložiště, všechny zápisy do C:\home adresáře se zachovají. Všechny instance škálované aplikace k nim mají přístup. Když se kontejner spustí, pokud jsou v trvalém úložišti nějaké soubory, přepíše veškerý obsah v C:\home adresáři kontejneru.
Jedinou výjimkou je C:\home\LogFiles adresář. Tento adresář ukládá protokoly kontejneru a aplikace. Složka se vždy po restartování aplikace zachová, pokud je povolené protokolování aplikace s možností Systém souborů , ať už je povolené trvalé úložiště. Jinými slovy, pokud povolíte nebo zakážete trvalé úložiště, nebude mít vliv na chování protokolování aplikace.
Ve výchozím nastavení je pro vlastní kontejnery Windows povolené trvalé úložiště. Pokud ji chcete zakázat, nastavte WEBSITES_ENABLE_APP_SERVICE_STORAGE hodnotu false nastavení aplikace pomocí Cloud Shellu. V prostředí Bash použijte následující příkaz:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=false
V PowerShellu použijte následující příkaz:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_ENABLE_APP_SERVICE_STORAGE"=false}
Adresář ve vlastním systému souborů kontejneru /home můžete použít k zachování souborů napříč restartováními a jejich sdílení mezi instancemi. Při použití C:\home adresáře má váš vlastní kontejner přístup k trvalému úložišti. Mějte na paměti, že data, která uložíte v rámci /home, přispívají k kvótě prostoru úložiště zahrnuté v plánu App Service služby.
Pokud je trvalé úložiště zakázané, zápisy do C:\home adresáře se nezachovají napříč restartováním aplikace nebo napříč několika instancemi. Pokud je povolené trvalé úložiště, všechny zápisy do C:\home adresáře se zachovají. Všechny instance škálované aplikace k nim mají přístup. Když se kontejner spustí, pokud jsou v trvalém úložišti nějaké soubory, přepíše veškerý obsah v C:\home adresáři kontejneru.
Jedinou výjimkou je C:\home\LogFiles adresář. Tento adresář ukládá protokoly kontejneru a aplikace. Složka se vždy po restartování aplikace zachová, pokud je povolené protokolování aplikace s možností Systém souborů , ať už je povolené trvalé úložiště. Jinými slovy, pokud povolíte nebo zakážete trvalé úložiště, nebude mít vliv na chování protokolování aplikace.
Doporučujeme zapisovat data do /home nebo do připojené cesty k úložišti Azure. Data, která zapisujete mimo tyto cesty, nejsou během restartování trvalá. Data se ukládají do místa na disku spravovaném platformou odděleně od kvóty úložiště souborů plánů služby App Service.
Ve výchozím nastavení je trvalé úložiště ve vlastních kontejnerech Linuxu zakázané . Pokud ji chcete povolit, nastavte WEBSITES_ENABLE_APP_SERVICE_STORAGE hodnotu true nastavení aplikace pomocí Cloud Shellu. V prostředí Bash použijte následující příkaz:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=true
V PowerShellu použijte následující příkaz:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_ENABLE_APP_SERVICE_STORAGE"=true}
Poznámka:
Můžete také nakonfigurovat vlastní trvalé úložiště.
Zjištění relace HTTPS
Služba App Service ukončí protokol TLS na front-endu. To znamená, že požadavky TLS se do vaší aplikace nikdy nedostanou. Nemusíte a neměli byste implementovat žádnou podporu protokolu TLS do vaší aplikace.
Front-endy se nacházejí uvnitř datacenter Azure. Pokud s aplikací používáte protokol TLS, provoz přes internet se vždy bezpečně zašifruje.
Přizpůsobení injektáže klíče stroje v ASP.NET
Při spuštění kontejneru se klíče automaticky vygenerují a vloží do kontejneru jako klíče počítače pro ASP.NET kryptografických rutin.
Tyto klíče najdete v kontejneru vyhledáním následujících proměnných prostředí: MACHINEKEY_Decryption, MACHINEKEY_DecryptionKey, MACHINEKEY_ValidationKeya MACHINEKEY_Validation.
Nové klíče při každém restartu mohou resetovat ověřování formulářů a stav zobrazení v ASP.NET, pokud na nich vaše aplikace závisí. Pokud chcete zabránit automatickému regeneraci klíčů, nastavte je ručně jako nastavení aplikace služby App Service.
Připojení ke kontejneru
Pokud se chcete připojit ke kontejneru Windows přímo pro diagnostické úlohy, přejděte na https://<app-name>.scm.azurewebsites.net/ možnost SSH a vyberte ji. Tato možnost vytvoří přímou relaci SSH, ve které můžete spouštět příkazy uvnitř kontejneru.
- Funguje odděleně od grafického prohlížeče nad ním, který zobrazuje jenom soubory ve sdíleném úložišti.
- V aplikaci se škálováním na více instancí se relace SSH připojí k jedné z instancí kontejneru. V horní nabídce Kudu můžete vybrat jinou instanci z rozevíracího seznamu Instance .
- Kromě změn ve sdíleném úložišti se při restartování aplikace neuchovávají všechny změny provedené v kontejneru z relace SSH. Tyto změny nejsou součástí image Dockeru. Pokud chcete zachovat změny, jako je nastavení registru a instalace softwaru, proveďte je jako součást souboru Dockerfile.
Přístup k diagnostickým protokolům
App Service protokoluje akce hostitele a aktivit Dockeru z kontejneru. Protokoly z hostitele Dockeru (protokoly platformy) jsou ve výchozím nastavení povolené. Potřebujete ručně povolit protokoly aplikací nebo protokoly webového serveru z kontejneru. Další informace naleznete v tématu Povolení protokolování aplikace a Povolení protokolování webového serveru.
K protokolům Dockeru můžete přistupovat několika způsoby:
Azure Portal
Protokoly Dockeru se zobrazují na webu Azure Portal v podokně Nastavení kontejneru vaší aplikace. Protokoly jsou zkráceny. Chcete-li stáhnout všechny záznamy, vyberte Stáhnout.
Kudu
Pokud chcete zobrazit jednotlivé soubory protokolu, přejděte na https://<app-name>.scm.azurewebsites.net/DebugConsole složku a vyberte ji LogFiles . Pokud chcete stáhnout celý LogFiles adresář, vyberte nalevo od názvu adresáře ikonu Stáhnout . K této složce můžete přistupovat také pomocí klienta FTP.
Ve výchozím nastavení nemáte přístup ke C:\home\LogFiles složce v terminálu SSH, protože trvalé sdílené úložiště není povolené. Pokud chcete toto chování povolit v terminálu konzoly, povolte trvalé sdílené úložiště.
Pokud se pokusíte stáhnout protokol Dockeru, který se právě používá pomocí klienta FTP, může se zobrazit chyba kvůli uzamčení souboru.
Kudu API
Přejděte přímo na https://<app-name>.scm.azurewebsites.net/api/logs/docker a podívejte se na metadata protokolů Dockeru. Může se zobrazit více než jeden soubor protokolu. Můžete použít vlastnost href k přímému stažení souboru protokolu.
Pokud chcete stáhnout všechny protokoly v jednom souboru ZIP, přejděte na https://<app-name>.scm.azurewebsites.net/api/logs/docker/zip.
Přizpůsobení paměti kontejneru
Ve výchozím nastavení mají všechny kontejnery Windows nasazené ve službě Azure App Service nakonfigurovaný limit paměti. Následující tabulka uvádí výchozí nastavení podle skladové položky plánu služby App Service.
| Skladová položka plánu služby App Service | Výchozí limit paměti pro aplikaci (v MB) |
|---|---|
| P1v3 | 1024 |
| P1Mv3 | 1024 |
| P2v3 | 1536 |
| P2Mv3 | 1536 |
| P3v3 | 2048 |
| P3Mv3 | 2048 |
| P4Mv3 | 2560 |
| P5Mv3 | 3072 |
Tuto hodnotu můžete změnit zadáním nastavení aplikace v WEBSITE_MEMORY_LIMIT_MB. V prostředí Bash použijte následující příkaz:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_MEMORY_LIMIT_MB=2000
V PowerShellu použijte následující příkaz:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITE_MEMORY_LIMIT_MB"=2000}
Hodnota je definována v megabajtech (MB) a musí být menší a rovna celkové fyzické paměti hostitele. Například v plánu služby App Service s 8 GB paměti RAM nemůže kumulativní součet WEBSITE_MEMORY_LIMIT_MB všech aplikací překročit 8 GB. Další informace o tom, kolik paměti je k dispozici, najdete v plánu služby Premium v3 v cenách služby App Service.
Přizpůsobení počtu výpočetních jader
Ve výchozím nastavení běží kontejner Windows se všemi dostupnými jádry pro vaši cenovou úroveň. Možná budete chtít snížit počet jader, která využívá vaše přípravné sloty. Pokud chcete snížit počet jader, která kontejner používá, nastavte WEBSITE_CPU_CORES_LIMIT nastavení aplikace na upřednostňovaný počet jader. Můžete ho nastavit pomocí Cloud Shellu. V prostředí Bash použijte následující příkaz:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --slot staging --settings WEBSITE_CPU_CORES_LIMIT=1
V PowerShellu použijte následující příkaz:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITE_CPU_CORES_LIMIT"=1}
Návod
Aktualizace nastavení aplikace aktivuje automatické restartování, což způsobuje minimální prostoje. Pro produkční aplikaci zvažte přesunutí do testovacího slotu. Změňte nastavení aplikace v přípravném slotu a pak ho prohoďte zpět do produkčního prostředí.
Pokud chcete ověřit upravené číslo, otevřete relaci SSH pomocí webu Azure Portal nebo portálu Kudu (https://<app-name>.scm.azurewebsites.net/webssh/host). Pomocí PowerShellu zadejte následující příkazy. Každý příkaz vrátí číslo.
Get-ComputerInfo | ft CsNumberOfLogicalProcessors # Total number of enabled logical processors. Disabled processors are excluded.
Get-ComputerInfo | ft CsNumberOfProcessors # Number of physical processors.
Procesory mohou být vícejádrové nebo s hyper-threading. Pokud chcete zjistit, kolik jader je dostupných, podívejte se na plán služby Premium v3 v cenách služby App Service.
Přizpůsobení chování health pingu
Služba App Service považuje kontejner za úspěšně spuštěný při spuštění kontejneru a odpovídá na příkaz ping protokolu HTTP. Žádost o kontrolu stavu obsahuje záhlaví User-Agent= "App Service Hyper-V Container Availability Check". Pokud se kontejner spustí, ale nereaguje na příkazy ping po určité době, služba App Service zaznamená událost do protokolu Dockeru.
Pokud je vaše aplikace náročná na prostředky, kontejner nemusí včas reagovat na příkaz ping PROTOKOLU HTTP. Pokud chcete řídit, co se stane, když příkazy PING HTTP selžou, nastavte CONTAINER_AVAILABILITY_CHECK_MODE nastavení aplikace. Můžete ho nastavit pomocí Cloud Shellu. V prostředí Bash použijte následující příkaz:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings CONTAINER_AVAILABILITY_CHECK_MODE="ReportOnly"
V PowerShellu použijte následující příkaz:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"CONTAINER_AVAILABILITY_CHECK_MODE"="ReportOnly"}
V následující tabulce jsou uvedeny možné hodnoty:
| Hodnota | Description |
|---|---|
Repair |
Restartujte kontejner po třech po sobě jdoucích kontrolách dostupnosti. |
ReportOnly |
Výchozí hodnota Nahlašte kontejner v protokolech Dockeru po třech po sobě jdoucích kontrolách dostupnosti, ale nerestartujte ho. |
Off |
Nekontrolujte dostupnost. |
Podpora skupinových účtů spravovaných služeb
Skupinové účty spravované služby se nepodporují v kontejnerech Windows ve službě App Service.
Povolení SSH
Pomocí protokolu Secure Shell (SSH) můžete vzdáleně spouštět příkazy pro správu z terminálu příkazového řádku. Pokud chcete povolit funkci konzoly SSH webu Azure Portal s vlastními kontejnery, postupujte takto:
Vytvořte standardní
sshd_configsoubor s následujícím ukázkovým obsahem a umístěte ho do kořenového adresáře projektu aplikace: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-sftpPoznámka:
Tento soubor konfiguruje OpenSSH a musí obsahovat následující položky, aby vyhovoval funkci SSH webu Azure Portal:
- Hodnota
Portmusí být nastavena na2222. - Hodnoty
Ciphersmusí obsahovat alespoň jednu položku v tomto seznamu:aes128-cbc,3des-cbcneboaes256-cbc. - Hodnoty
MACsmusí obsahovat alespoň jednu položku v tomto seznamu:hmac-sha1nebohmac-sha1-96.
- Hodnota
Vytvořte skript vstupního bodu s názvem
entrypoint.shnebo změňte jakýkoli existující soubor vstupního bodu. Přidejte příkaz pro spuštění služby SSH spolu se spouštěcím příkazem aplikace. Následující příklad ukazuje spuštění aplikace v Pythonu. Nahraďte poslední příkaz podle jazyka projektu nebo technologického zásobníku.Do souboru Dockerfile přidejte následující pokyny podle distribuce základní image. Tyto pokyny zkopírují nové soubory, nainstalují server OpenSSH, nastaví správná oprávnění a nakonfigurují vlastní vstupní bod a zpřístupní porty vyžadované aplikací a serverem SSH v uvedeném pořadí:
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" ]Poznámka:
Kořenové heslo musí být přesně
Docker!proto, že služba App Service ho používá k udělení přístupu k relaci SSH s kontejnerem. Tato konfigurace neumožňuje externí připojení ke kontejneru. Port2222kontejneru je přístupný pouze v mostové síti privátní virtuální sítě. Útočník na internetu k němu nemá přístup.Znovu sestavte a nasdílejte image Dockeru do registru a pak otestujte funkci SSH webové aplikace na webu Azure Portal.
Další informace o řešení potíží najdete na blogu služby Azure App Service: Povolení SSH ve webové aplikaci pro Linux pro kontejnery.
Přístup k diagnostickým protokolům
Můžete získat přístup k protokolům konzoly, které se generují z kontejneru.
Protokolování kontejneru zapnete spuštěním následujícího příkazu:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Nahraďte hodnoty <app-name> a <resource-group-name> názvy, které jsou vhodné pro vaši webovou aplikaci.
Po zapnutí protokolování kontejneru spusťte následující příkaz, abyste viděli stream protokolu:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Pokud se protokoly konzoly nezobrazí okamžitě, zkontrolujte to znovu za 30 sekund.
Pokud chcete streamování protokolů kdykoli zastavit, použijte klávesovou zkratku Ctrl+C.
Konfigurace vícekontenerových aplikací
Poznámka:
Funkce Docker Compose bude vyřazena 31. března 2027. Sidecar kontejnery nahrazují vícekontejnerové aplikace ve službě App Service. Informace o nových službách najdete v tématu Tutoriál: Konfigurace sidecar kontejneru pro vlastní kontejner ve službě Azure App Service. Informace o existujících vícekontenerových aplikacích ve službě App Service najdete v tématu Migrace aplikací Docker Compose do funkce sajdkáře.
Použití trvalého úložiště v Docker Compose
Vícekontenerové aplikace, jako je WordPress, potřebují k správnému fungování trvalé úložiště. Pokud chcete povolit trvalé úložiště, musí konfigurace Docker Compose odkazovat na umístění úložiště mimo kontejner. Umístění úložiště v kontejneru neuchovávají změny po restartování aplikace.
Pokud chcete povolit trvalé úložiště, nastavte WEBSITES_ENABLE_APP_SERVICE_STORAGE nastavení aplikace. Použijte příkaz v az webapp config appsettings set.
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE
V souboru
WEBAPP_STORAGE_HOME je proměnná prostředí ve službě App Service, která se mapuje na trvalé úložiště vaší aplikace. Příklad:
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"
Omezení verze Preview
Vícekontener je aktuálně ve verzi Preview. Následující funkce platformy App Service se nepodporují:
- Ověřování nebo autorizace.
- Spravované identity.
- Sdílení prostředků mezi zdroji (CORS)
- Integrace virtuální sítě se scénáři Docker Compose
Docker Compose ve službě Azure App Service má v současné době limit 4 000 znaků.
Možnosti docker Compose
Následující části ukazují podporované a nepodporované možnosti konfigurace Docker Compose.
Podporované možnosti
commandentrypointenvironmentimageportsrestartservices-
volumes(Mapování na Službu Azure Storage není podporováno)
Nepodporované možnosti
-
build(nepovoleno) -
depends_on(ignorováno) -
networks(ignorováno) -
secrets(ignorováno) - Jiné porty než
80a8080(ignorovány) - Výchozí proměnné prostředí jako
$variablea${variable}(na rozdíl od Dockeru)
Omezení syntaxe
- První příkaz YAML v souboru musí být vždy
version x.x. - Oddíl portů musí používat čísla v uvozovkách.
- Oddíl
image > volumemusí obsahovat citace a nesmí obsahovat definice oprávnění. - Oddíl svazků nemůže za názvem svazku obsahovat prázdnou složenou závorku.
Poznámka:
Všechny ostatní možnosti, které nejsou explicitně zmíněny, se ve verzi Preview ignorují.
Ignorovat zprávu robots933456 v protokolech
V protokolech kontejneru se může zobrazit následující zpráva:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Tuto zprávu klidně ignorujte.
/robots933456.txt je fiktivní cesta URL. Služba App Service ji používá ke kontrole, jestli kontejner dokáže obsluhovat požadavky. Chybová odpověď 404 značí, že cesta neexistuje, a signalizuje app Service, že kontejner je v pořádku a připravený reagovat na požadavky.