Migrace vlastního softwaru na Azure App Service pomocí vlastního kontejneru
Azure App Service poskytuje předdefinované zásobníky aplikací ve Windows, jako je ASP.NET nebo Node.js, které běží ve službě IIS. Předkonfigurované prostředí Windows uzamkne přístup k operačnímu systému pro správu a zamezí instalaci softwaru, změnám globální mezipaměti sestavení (GAC) atd. (viz Funkce operačního systému ve službě Azure App Service). Použití vlastního kontejneru Windows ve službě App Service vám ale umožňuje udělat změny operačního systému, které vaše aplikace potřebuje, takže migrace místní aplikace, která vyžaduje vlastní konfiguraci operačního systému a softwaru, je snadná. Tento kurz ukazuje, jak do služby App Service migrovat aplikaci ASP.NET, která využívá vlastní písma nainstalovaná v knihovně písem Windows. Do služby Azure Container Registry nasadíte vlastní nakonfigurovanou image Windows ze sady Visual Studio a pak ji spustíte ve službě App Service.

Požadavky
Pro absolvování tohoto kurzu potřebujete:
- Zaregistrovat si účet Centra Dockeru
- Nainstalujte Docker for Windows.
- Přepnout Docker na spouštění kontejnerů Windows.
- ASP.NET a vývoj webů a vývojové úlohy Azure nainstalujte Visual Studio 2019 . pokud jste již nainstalovali Visual Studio 2019:
- nainstalujte nejnovější aktualizace v Visual Studio kliknutím na tlačítko > vyhledat aktualizace.
- úlohy v Visual Studio přidáte tak, že kliknete na nástroje > získat nástroje a funkce.
Místní nastavení aplikace
Stažení ukázky
V tomto kroku nastavíte místní projekt .NET.
- Stáhněte si ukázkový projekt.
- Rozbalte (rozzipujte) soubor custom-font-win-container.zip.
Tento ukázkový projekt obsahuje jednoduchou aplikaci ASP.NET, která využívá vlastní písmo nainstalované do knihovny písem Windows. Písma není potřeba instalovat, jde ale o příklad aplikace, která je integrovaná s podkladovým operačním systémem. Pokud chcete takovou aplikaci migrovat do služby App Service, buď úpravou kódu odeberete tuto integraci, nebo ji migrujete tak jak je ve vlastním kontejneru Windows.
Instalace písma
V Průzkumníku Windows přejděte na custom-font-win-container-master/CustomFontSample, klikněte pravým tlačítkem na FrederickatheGreat-Regular.ttf a vyberte Nainstalovat.
Toto písmo je veřejně dostupné na webu Google Fonts.
Spuštění aplikace
Otevřete soubor custom-font-win-container/CustomFontSample.sln v sadě Visual Studio.
Zadáním Ctrl+F5 spusťte aplikaci bez zapnutého ladění. Aplikace se zobrazí ve vašem výchozím prohlížeči.
Protože tato aplikace používá nainstalované písmo, nemůže běžet v sandboxu služby App Service. Můžete ji ale místo toho nasadit pomocí kontejneru Windows, protože písmo můžete nainstalovat do tohoto kontejneru Windows.
Konfigurace kontejneru Windows
V Průzkumníku řešení klikněte pravým tlačítkem na projekt CustomFontSample a vyberte Přidat > Podpora orchestrace kontejnerů.
Vyberte Docker Compose > OK.
Projekt je teď nastavený tak, aby běžel v kontejneru Windows. Do projektu CustomFontSample se přidá soubor Dockerfile a projekt docker-compose se přidá do řešení.
V Průzkumníku řešení otevřete soubor Dockerfile.
Musíte použít podporovanou nadřazenou image. Nadřazenou image změníte tak, že řádek FROM nahradíte následujícím kódem:
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2019
Na konec souboru přidejte následující řádek a pak tento soubor uložte:
RUN ${source:-obj/Docker/publish/InstallFont.ps1}
InstallFont.ps1 najdete v projektu CustomFontSample. Jde o jednoduchý skript, který nainstaluje toto písmo. Složitější verzi tohoto skriptu najdete v centru skriptů.
Poznámka
pokud chcete místně testovat kontejner Windows, ujistěte se, že je v místním počítači spuštěný docker.
Publikování do služby Azure Container Registry
Služba Azure Container Registry uchovává vaše image pro nasazení kontejnerů. Službu App Service můžete nakonfigurovat tak, aby používala image hostované ve službě Azure Container Registry.
Otevření průvodce publikováním
V Průzkumníku řešení klikněte pravým tlačítkem na projekt CustomFontSample a vyberte Publikovat.
Vytvoření registru a publikování
V Průvodci publikováním vyberte Container Registry > vytvořit nové Azure Container Registry > publikovat.
Přihlášení pomocí účtu Azure
V dialogu Vytvořit nový Azure Container Registry vyberte Přidat účet a přihlaste se ke svému předplatnému Azure. Pokud už jste přihlášeni, vyberte z rozevíracího seznamu účet, který obsahuje požadované předplatné.

Konfigurace registru
Nakonfigurujte nový registr kontejneru podle navržených hodnot v následující tabulce. Jakmile budete hotovi, klikněte na Vytvořit.
| Nastavení | Navrhovaná hodnota | Další informace |
|---|---|---|
| Předpona DNS | Ponechejte vygenerovaný název registru nebo ho změňte na jiný jedinečný název. | |
| Skupina prostředků | Klikněte na Nový, zadejte myResourceGroup a klikněte na OK. | |
| SKU | Basic | Cenové úrovně |
| Umístění registru | West Europe |

Otevře se okno terminálu s průběhem nasazování image. Počkejte, až se nasazení dokončí.
Přihlášení k Azure
Přihlaste se k webu Azure Portal na adrese https://portal.azure.com.
Vytvoření webové aplikace
V nabídce vlevo vyberte vytvořit prostředek > Web > Web App for Containers.
Konfigurace základních informací o aplikaci
Na kartě základy nakonfigurujte nastavení podle následující tabulky a pak klikněte na Další: Docker.
| Nastavení | Navrhovaná hodnota | Další informace |
|---|---|---|
| Předplatné | Ujistěte se, že je vybráno správné předplatné. | |
| Skupina prostředků | Vyberte vytvořit nový, zadejte myResourceGroup a klikněte na OK. | |
| Název | Zadejte jedinečný název. | Adresa URL webové aplikace je https://<app-name>.azurewebsites.net, kde <app-name> je název vaší aplikace. |
| Publikovat | Kontejner Docker | |
| Operační systém | Windows | |
| Oblast | West Europe | |
| Plán Windows | Vyberte vytvořit nový, zadejte myAppServicePlan a klikněte na OK. |
Karta základy by měla vypadat takto:

Konfigurace kontejneru Windows
na kartě docker nakonfigurujte vlastní kontejner Windows, jak je znázorněno v následující tabulce, a vyberte zkontrolovat + vytvořit.
| Nastavení | Navrhovaná hodnota |
|---|---|
| Zdroj image | Azure Container Registry |
| Registr | Vyberte registr, který jste vytvořili dříve. |
| Obrázek | customfontsample |
| Tag | nejnovější |
Dokončení vytvoření aplikace
Klikněte na Vytvořit a počkejte, až Azure vytvoří požadované prostředky.
Přechod na webovou aplikaci
Po dokončení operace Azure se zobrazí okno s oznámením.

Klikněte na Přejít k prostředku.
Na stránce aplikace klikněte na odkaz v části Adresa URL.
Na nové stránce prohlížeče se otevře následující stránka:

Počkejte pár minut a zkuste to znovu, dokud se nedostanete na domovskou stránku s písmem, které očekáváte:

Blahopřejeme! Migrovali jste aplikaci ASP.NET do služby Azure App Service v kontejneru Windows.
Zobrazení protokolů spuštění kontejneru
Načtení kontejneru s Windows může nějakou dobu trvat. Pokud chcete zobrazit průběh, přejděte na následující adresu URL nahrazením <app-name> názvem vaší aplikace.
https://<app-name>.scm.azurewebsites.net/api/logstream
Protokoly streamování vypadají takto:
14/09/2018 23:16:19.889 INFO - Site: fonts-win-container - Creating container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest.
14/09/2018 23:16:19.928 INFO - Site: fonts-win-container - Create container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest succeeded. Container Id 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:23.405 INFO - Site: fonts-win-container - Start container succeeded. Container: 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Configuring container
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container start-up and configuration completed successfully
Azure App Service používá technologii kontejneru Docker k hostování vestavěných imagí i vlastních imagí. Pokud chcete zobrazit seznam předdefinovaných imagí, spusťte příkaz Azure CLI, "AZ WebApp list-runtimes--Linux". Pokud tyto image nevyhovují vašim potřebám, můžete sestavit a nasadit vlastní image.
V tomto kurzu se naučíte:
- Vložení vlastní image Docker do Azure Container Registry
- Nasazení vlastní image do App Service
- Konfigurace proměnných prostředí
- Načíst image do App Service pomocí spravované identity
- Přístup k diagnostickým protokolům
- Povolit CI/CD z Azure Container Registry do App Service
- Připojit se ke kontejneru pomocí SSH
V tomto kurzu vznikne v rámci vašeho účtu Azure v registru kontejneru malý poplatek a může se stát, že se za hostování kontejneru dokončí déle než měsíc.
Nastavení počátečního prostředí
- Mít účet Azure s aktivním předplatným. Vytvořte si účet zdarma.
- Nainstalujte Docker, který použijete k sestavení imagí Docker. Instalace Docker může vyžadovat restart počítače.
V nástroji použijte prostředí Bash Azure Cloud Shell.
Pokud tomu dáváte přednost, můžete nainstalovat Azure CLI a spouštět referenční příkazy CLI.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení jsou popsané v tématu Přihlášení pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
- V tomto kurzu se vyžaduje verze rozhraní příkazového řádku Azure 2.0.80 nebo novější. Pokud používáte Azure Cloud Shell, nejnovější verze je už nainstalovaná.
Po instalaci Docker nebo spuštění Azure Cloud Shell otevřete okno terminálu a ověřte, že je Docker nainstalovaný:
docker --version
Klonování nebo stažení ukázkové aplikace
Ukázku pro tento kurz můžete získat pomocí klonování Git nebo stažení.
Klonovat pomocí Gitu
Naklonujte ukázkové úložiště:
git clone https://github.com/Azure-Samples/docker-django-webapp-linux.git --config core.autocrlf=input
Nezapomeňte zahrnout --config core.autocrlf=input argument pro zaručení správných konců řádků v souborech, které se používají v kontejneru Linux:
Pak přejít do této složky:
cd docker-django-webapp-linux
Stažení z GitHubu
Místo použití klonu Git můžete navštívit https://github.com/Azure-Samples/docker-django-webapp-linux , vybrat klonovat a pak vybrat Stáhnout ZIP.
Rozbalte soubor ZIP do složky s názvem Docker-Django-WebApp-Linux.
Pak otevřete okno terminálu v této složce Docker-Django-WebApp-Linux .
Volitelné Kontrola souboru Docker
Soubor v ukázce s názvem souboru Dockerfile , který popisuje bitovou kopii Docker a obsahuje pokyny ke konfiguraci:
FROM tiangolo/uwsgi-nginx-flask:python3.6
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt --no-cache-dir
ADD . /code/
# ssh
ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
&& apt-get install -y --no-install-recommends dialog \
&& apt-get update \
&& apt-get install -y --no-install-recommends openssh-server \
&& echo "$SSH_PASSWD" | chpasswd
COPY sshd_config /etc/ssh/
COPY init.sh /usr/local/bin/
RUN chmod u+x /usr/local/bin/init.sh
EXPOSE 8000 2222
#CMD ["python", "/code/manage.py", "runserver", "0.0.0.0:8000"]
ENTRYPOINT ["init.sh"]
- První skupina příkazů nainstaluje požadavky aplikace do prostředí.
- Druhá skupina příkazů vytvoří server SSH pro zabezpečenou komunikaci mezi kontejnerem a hostitelem.
- Poslední řádek,
ENTRYPOINT ["init.sh"], vyvoláinit.shspuštění služby SSH a serveru Python.
Místní sestavení a otestování image
Poznámka
Docker Hub má kvóty pro počet anonymních přijetí změn na jednu IP adresu a počet ověřených přijetí na bezplatného uživatele (viz přenos dat). Pokud si všimnete, že se vaše přijetí z dokovacího centra bude omezovat, zkuste, jestli ještě nejste docker login přihlášení.
Spusťte následující příkaz, který sestaví bitovou kopii:
docker build --tag appsvc-tutorial-custom-image .Otestujte, jestli sestavení funguje, spuštěním kontejneru Docker v místním počítači:
docker run -it -p 8000:8000 appsvc-tutorial-custom-imageTento
docker runpříkaz určuje port s-pargumentem následovaným názvem obrázku.-itumožňuje zastaveníCtrl+C.Tip
pokud pracujete na Windows a zobrazí se chyba, standard_init_linux. přejít: 211: exec user proces způsobil "žádný takový soubor nebo adresář", soubor init.sh obsahuje konce čáry CR-LF namísto očekávaného LF. K této chybě dochází, pokud jste použili Git ke klonování ukázkového úložiště, ale tento parametr se vynechal
--config core.autocrlf=input. V takovém případě znovu naklonujte úložiště pomocí argumentu--config. Chyba se může zobrazit také v případě, že jste upravili init.sh a uložili ji se zakončením CRLF. V takovém případě soubor uložte znovu s končícím LF.Pokud
http://localhost:8000chcete ověřit, že webová aplikace a kontejner fungují správně, přejděte k části.
Vytvoření skupiny prostředků
V této části a těch, které následují, zřídíte prostředky v Azure, do kterých nahrajete image, a pak nasadíte kontejner, který Azure App Service. Začnete vytvořením skupiny prostředků, ve které se budou shromažďovat všechny tyto prostředky.
Spuštěním příkazu AZ Group Create vytvořte skupinu prostředků:
az group create --name myResourceGroup --location westeurope
Můžete změnit --location hodnotu a zadat oblast poblíž.
Odeslat obrázek do Azure Container Registry
V této části nahrajete obrázek do Azure Container Registry, ze kterého ho App Service může nasadit.
Spuštěním
az acr createpříkazu vytvořte Azure Container Registry:az acr create --name <registry-name> --resource-group myResourceGroup --sku Basic --admin-enabled trueNahraďte
<registry-name>vhodným názvem pro váš registr. Název musí obsahovat jenom písmena a číslice a musí být jedinečný ve všech Azure.Spusťte
az acr showpříkaz pro načtení přihlašovacích údajů registru:az acr credential show --resource-group myResourceGroup --name <registry-name>Výstup JSON tohoto příkazu poskytuje dvě hesla spolu s uživatelským jménem registru.
docker loginK přihlášení do registru kontejneru použijte příkaz:docker login <registry-name>.azurecr.io --username <registry-username>Nahraďte
<registry-name>a hodnotami z předchozích<registry-username>kroků. Po zobrazení výzvy zadejte jedno z hesel z předchozího kroku.Ve všech zbývajících krocích této části použijete stejný název registru.
Po úspěšném přihlášení označte místní image Dockeru pro registr:
docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestPomocí příkazu
docker pushna push image do registru:docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestPrvní nahrání image může trvat několik minut, protože obsahuje základní image. Následné nahrávání je obvykle rychlejší.
Zatímco čekáte, můžete provést kroky v další části a nakonfigurovat App Service nasazení z registru.
Pomocí příkazu
az acr repository listověřte, že se nas nabízené oznámení zdařilo:az acr repository list -n <registry-name>Ve výstupu by se měl zobrazit název vaší image.
Konfigurace App Service pro nasazení image z registru
Pokud chcete nasadit kontejner do Azure App Service, nejprve vytvoříte webovou aplikaci na App Service a pak připojíte webovou aplikaci k registru kontejneru. Při spuštění webové aplikace App Service automaticky stáhne image z registru.
Vytvořte plán App Service pomocí
az appservice plan createpříkazu :az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --is-linuxPlán App Service odpovídá virtuálnímu počítači, který hostuje webovou aplikaci. Ve výchozím nastavení předchozí příkaz používá cenově výhodnou cenovou úroveň B1, která je první měsíc zdarma. Vrstvu můžete řídit pomocí
--skuparametru .Vytvořte webovou aplikaci pomocí
az webpp createpříkazu :az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --deployment-container-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestNahraďte
<app-name>názvem webové aplikace, který musí být jedinečný v rámci celého Azure. Nahraďte<registry-name>také názvem vašeho registru z předchozí části.Pomocí
az webapp config appsettings setnastavteWEBSITES_PORTproměnnou prostředí podle očekávání kódem aplikace:az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WEBSITES_PORT=8000Nahraďte
<app-name>názvem, který jste použili v předchozím kroku.Další informace o této proměnné prostředí najdete v souboru readme vúložišti GitHub souboru .
Povolte spravovanou identitu přiřazenou systémem pro webovou aplikaci pomocí
az webapp identity assignpříkazu :az webapp identity assign --resource-group myResourceGroup --name <app-name> --query principalId --output tsvNahraďte
<app-name>názvem, který jste použili v předchozím kroku. Výstupem příkazu (filtrovaný podle argumentů a) je objekt služby přiřazené--query--outputidentity, který použijete za chvíli.Spravovaná identita umožňuje udělit webové aplikaci oprávnění pro přístup k dalším prostředkům Azure bez nutnosti jakýchkoli konkrétních přihlašovacích údajů.
Načtěte ID předplatného
az account showpomocí příkazu , který budete potřebovat v dalším kroku:az account show --query id --output tsvUdělte spravované identitě oprávnění pro přístup k registru kontejneru:
az role assignment create --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/<registry-name> --role "AcrPull"Nahraďte následující hodnoty:
<principal-id>s ID objektu služby zaz webapp identity assignpříkazu<registry-name>názvem vašeho registru kontejneru<subscription-id>s ID předplatného načtenou zaz account showpříkazu
Další informace o těchto oprávněních najdete v tématu Co je řízení přístupu na základě role v Azure.
Nakonfigurujte aplikaci tak, aby spravovanou identitu stahovaná z Azure Container Registry.
az resource update --ids /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Web/sites/<app-name>/config/web --set properties.acrUseManagedIdentityCreds=TrueNahraďte následující hodnoty:
<subscription-id>s ID předplatného načtenou zaz account showpříkazu .<app-name>názvem vaší webové aplikace.
Tip
Pokud vaše aplikace používá spravovanou identitupřiřazenou uživatelem, nastavte další
AcrUserManagedIdentityIDvlastnost a zadejte její ID klienta:clientId=$(az identity show --resource-group <group-name> --name <identity-name> --query clientId --output tsv) az resource update --ids /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Web/sites/<app-name>/config/web --set properties.AcrUserManagedIdentityID=$clientId
Nasazení image a otestování aplikace
Tyto kroky můžete provést, jakmile se image nasažuje do registru kontejneru a App Service plně zřízená.
Pomocí příkazu
az webapp config container setzadejte registr kontejneru a image, která se má pro webovou aplikaci nasadit:az webapp config container set --name <app-name> --resource-group myResourceGroup --docker-custom-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest --docker-registry-server-url https://<registry-name>.azurecr.ioNahraďte
<app-name>názvem vaší webové aplikace a na dvou místech<registry-name>nahraďte názvem vašeho registru.- Při použití jiného registru než Docker Hub (jak je znázorněno v tomto příkladu) musí být formátován jako následovaný plně
--docker-registry-server-urlhttps://kvalifikovaným názvem domény registru. - Zpráva"Pro přístup k této aplikaci se za předpokladu, že Azure Container Registry. Pokouší se najít... říká vám, že Azure používá spravovanou identitu aplikace k ověřování v registru kontejneru, místo aby se žádají o uživatelské jméno a heslo.
- Pokud dojde k chybě "AttributeError: 'NoneType' object has no attribute 'reserved'" (Objekt NoneType nemá žádný atribut reserved), ujistěte se, že
<app-name>je správný.
Tip
Nastavení kontejneru webové aplikace můžete kdykoli načíst pomocí příkazu
az webapp config container show --name <app-name> --resource-group myResourceGroup. Image je zadaná ve vlastnostiDOCKER_CUSTOM_IMAGE_NAME. Když je webová aplikace nasazená prostřednictvím Azure DevOps nebo Azure Resource Manager, může se image zobrazit také ve vlastnosti s názvemLinuxFxVersion. Obě vlastnosti mají stejný účel. Pokud se v konfiguraci webové aplikace nachází obojí,LinuxFxVersionmá přednost.- Při použití jiného registru než Docker Hub (jak je znázorněno v tomto příkladu) musí být formátován jako následovaný plně
Po
az webapp config container setdokončení příkazu by měla být webová aplikace spuštěná v kontejneru na App Service.Pokud chcete aplikaci otestovat, přejděte na a nahraďte
https://<app-name>.azurewebsites.net<app-name>názvem vaší webové aplikace. Při prvním přístupu může trvat nějakou dobu, než aplikace odpoví, protože App Service musí z registru stáhnout celou image. Pokud v prohlížeči dojde k časovému razítku, stačí aktualizovat stránku. Po natáhlí počáteční image budou následné testy běžet mnohem rychleji.
Přístup k diagnostickým protokolům
Zatímco čekáte, až App Service image přetáhne, je užitečné pomocí streamování protokolů kontejneru do terminálu přesně vidět, co App Service dělá.
Zapněte protokolování kontejneru:
az webapp log config --name <app-name> --resource-group myResourceGroup --docker-container-logging filesystemPovolte stream protokolu:
az webapp log tail --name <app-name> --resource-group myResourceGroupPokud nevidíte protokoly konzoly okamžitě, podívejte se znovu za 30 sekund.
Soubory protokolu můžete také zkontrolovat v prohlížeči na
https://<app-name>.scm.azurewebsites.net/api/logs/docker.Streamování protokolů můžete kdykoli zastavit zadáním
Ctrl+C.
Konfigurace průběžného nasazování
Vaše App Service teď může bezpečně stáhnout image kontejneru z vašeho privátního registru kontejneru. Neví ale, kdy se tato image ve vašem registru aktualizuje. Při každém nasouvání aktualizované image do registru musíte ručně aktivovat stažení image restartováním App Service aplikace. V tomto kroku povolíte CI/CD, aby App Service oznámení na novou image a automaticky aktivuje načtení.
Povolte CI/CD v App Service.
az webapp deployment container config --enable-cd true --name <app-name> --resource-group myResourceGroup --query CI_CD_URL --output tsvCI_CD_URLje adresa URL, App Service vám vygeneruje. Váš registr by měl tuto adresu URL upozornit App Service, že došlo k nas nabízené image. Ve skutečnosti se webhook nevytváří za vás.V registru kontejneru vytvořte webhook pomocí CI_CD_URL, který jste získali v posledním kroku.
az acr webhook create --name appserviceCD --registry <registry-name> --uri '<ci-cd-url>' --actions push --scope appsvc-tutorial-custom-image:latestPokud chcete otestovat, jestli je webhook správně nakonfigurovaný, otestujte webhook příkazem ping a podívejte se, jestli se zobrazí odpověď 200 OK.
eventId=$(az acr webhook ping --name appserviceCD --registry <registry-name> --query id --output tsv) az acr webhook list-events --name appserviceCD --registry <registry-name> --query "[?id=='$eventId'].eventResponseMessage"Tip
Pokud chcete zobrazit všechny informace o všech událostech webhooku, odeberte
--queryparametr .Pokud streamujete protokol kontejneru, měla by se zobrazit zpráva za příkazem ping webhooku, protože webhook aktivuje restartování
Starting container for siteaplikace. Vzhledem k tomu, že jste image ještě nic ne aktuální, není nic nového, App Service stáhnout.
Úprava kódu aplikace a opětovné nasazení
V této části změníte kód webové aplikace, znovu sestavíte image a pak ji nas nabízené do registru kontejneru. App Service pak automaticky přetáhne aktualizovanou image z registru a aktualizuje spuštěnou webovou aplikaci.
V místní složce docker-django-webapp-linux otevřete soubor app/templates/app/index.html.
Změňte první prvek HTML tak, aby odpovídal následujícímu kódu.
<nav class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <a class="navbar-brand" href="#">Azure App Service - Updated Here!</a> </div> </div> </nav>Uložte provedené změny.
Změňte složku docker-django-webapp-linux a znovu sestavte image:
docker build --tag appsvc-tutorial-custom-image .Aktualizujte číslo verze ve značce image na v1.0.1:
docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:v1.0.1<registry-name>nahraďte názvem vašeho registru.Nasoudí image do registru:
docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:v1.0.1Po dokončení nahánění image webhook upozorní App Service na nabízené oznámení a App Service pokusí natáhnout aktualizovanou image. Počkejte několik minut a pak ověřte, že se aktualizace nasadila, a to tak, že přechádujete na
https://<app-name>.azurewebsites.net.
Připojit se ke kontejneru pomocí SSH
SSH umožňuje zabezpečenou komunikaci mezi kontejnerem a klientem. Pokud chcete povolit připojení SSH ke kontejneru, musíte pro něj nakonfigurovat vlastní image. Po spuštění kontejneru můžete otevřít připojení SSH.
Konfigurace kontejneru pro SSH
Ukázková aplikace použitá v tomto kurzu už má potřebnou konfiguraci v souboru Dockerfile, který nainstaluje server SSH a také nastaví přihlašovací údaje. Tato část je jenom informační. Pokud se chcete připojit ke kontejneru, přejděte k další části.
ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
&& apt-get install -y --no-install-recommends dialog \
&& apt-get update \
&& apt-get install -y --no-install-recommends openssh-server \
&& echo "$SSH_PASSWD" | chpasswd
Poznámka
Tato konfigurace neumožňuje externí připojení ke kontejneru. SSH je k dispozici pouze prostřednictvím webu Kudu/SCM. Web Kudu/SCM se ověřuje pomocí vašeho účtu Azure. kořen: Docker! neměl by se měnit SSH. SCM/KUDU bude používat přihlašovací údaje na webu Azure Portal. Změna této hodnoty způsobí chybu při použití SSH.
Souboru Dockerfile také zkopíruje soubor sshd_config do složky /etc/ssh/ a zpřístupní port 2222 na kontejneru:
COPY sshd_config /etc/ssh/
# ...
EXPOSE 8000 2222
Port 2222 je interní port přístupný pouze pro kontejnery v rámci mostu sítě privátní virtuální sítě.
Nakonec skript vstupu init.sh SPUSTÍ Server SSH.
#!/bin/bash
service ssh start
Otevření připojení SSH ke kontejneru
Přejděte na
https://<app-name>.scm.azurewebsites.net/webssh/hostúčet Azure a přihlaste se k němu.<app-name>nahraďte názvem vaší webové aplikace.Jakmile se přihlásíte, budete přesměrováni na informační stránku webové aplikace. V horní části stránky vyberte SSH a otevřete prostředí a použijte příkazy.
Například můžete prozkoumávat procesy běžící v rámci pomocí
toppříkazu.
Vyčištění prostředků
Prostředky, které jste vytvořili v tomto článku, můžou účtovat průběžné náklady. k vyčištění prostředků je potřeba jenom odstranit skupinu prostředků, která je obsahuje:
az group delete --name myResourceGroup
Další kroky
Naučili jste se:
- Nasazení vlastní image do privátního registru kontejnerů
- Nasazení a vlastní image v App Service
- Aktualizace a opětovné nasazení image
- Přístup k diagnostickým protokolům
- Připojit se ke kontejneru pomocí SSH
- Vložení vlastní image Docker do Azure Container Registry
- Nasazení vlastní image do App Service
- Konfigurace proměnných prostředí
- Načíst image do App Service pomocí spravované identity
- Přístup k diagnostickým protokolům
- Povolit CI/CD z Azure Container Registry do App Service
- Připojit se ke kontejneru pomocí SSH
V dalším kurzu se dozvíte, jak namapovat vlastní název DNS na svou aplikaci.
Nebo si prohlédněte další zdroje informací:
