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.

zobrazuje webovou aplikaci spuštěnou v kontejneru Windows.

Požadavky

Pro absolvování tohoto kurzu potřebujete:

Místní nastavení aplikace

Stažení ukázky

V tomto kroku nastavíte místní projekt .NET.

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.

Snímek obrazovky zobrazující aplikaci zobrazenou ve 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ů.

Snímek obrazovky okna Průzkumník řešení znázorňující vybrané položky nabídky projektu CustomFontSample, přidat a kontejner produktu Orchestrator support

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.

Snímek obrazovky Průzkumník řešení se zobrazením projektu CustomFontSample a publikováním vybraného.

Vytvoření registru a publikování

V Průvodci publikováním vyberte Container Registry > vytvořit nové Azure Container Registry > publikovat.

Snímek obrazovky s průvodcem publikováním, který zobrazuje Container Registry, vytvořte nové Azure Container Registry a vybrané tlačítko 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é.

Přihlášení k Azure

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

Konfigurace Azure Container Registry

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:

Zobrazuje kartu základy, která slouží ke konfiguraci webové aplikace.

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.

Ukazuje, že se operace Azure dokončila.

  1. Klikněte na Přejít k prostředku.

  2. 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:

Zobrazuje novou stránku prohlížeče pro webovou aplikaci.

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

Zobrazuje domovskou stránku s nakonfigurovaným písmem.

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.

    Spuštění služby Cloud Shell v novém okně

  • 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.sh spuš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í.

  1. Spusťte následující příkaz, který sestaví bitovou kopii:

    docker build --tag appsvc-tutorial-custom-image .
    
  2. 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-image
    

    Tento docker run příkaz určuje port s -p argumentem následovaným názvem obrázku. -it umožň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.

  3. Pokud http://localhost:8000 chcete ověřit, že webová aplikace a kontejner fungují správně, přejděte k části.

    Místní test webové aplikace

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.

  1. Spuštěním az acr create příkazu vytvořte Azure Container Registry:

    az acr create --name <registry-name> --resource-group myResourceGroup --sku Basic --admin-enabled true
    

    Nahraď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.

  2. Spusťte az acr show pří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.

  3. 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.

  4. 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:latest
    
  5. Pomocí příkazu docker push na push image do registru:

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    První 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.

  6. Pomocí příkazu az acr repository list ověř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.

  1. Vytvořte plán App Service pomocí az appservice plan create příkazu :

    az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --is-linux
    

    Plá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í --sku parametru .

  2. Vytvořte webovou aplikaci pomocí az webpp create příkazu :

    az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --deployment-container-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    Nahraď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.

  3. Pomocí az webapp config appsettings set nastavte WEBSITES_PORT promě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=8000
    

    Nahraď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 .

  4. Povolte spravovanou identitu přiřazenou systémem pro webovou aplikaci pomocí az webapp identity assign příkazu :

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

    Nahraď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 --output identity, 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ů.

  5. Načtěte ID předplatného az account show pomocí příkazu , který budete potřebovat v dalším kroku:

    az account show --query id --output tsv
    
  6. Udě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 z az webapp identity assign příkazu
    • <registry-name> názvem vašeho registru kontejneru
    • <subscription-id> s ID předplatného načtenou z az account show pří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.

  7. 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=True
    

    Nahraďte následující hodnoty:

    • <subscription-id> s ID předplatného načtenou z az account show příkazu .
    • <app-name> názvem vaší webové aplikace.

    Tip

    Pokud vaše aplikace používá spravovanou identitupřiřazenou uživatelem, nastavte další AcrUserManagedIdentityID vlastnost 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á.

  1. Pomocí příkazu az webapp config container set zadejte 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.io
    

    Nahraď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-url https:// 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 vlastnosti DOCKER_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ázvem LinuxFxVersion . Obě vlastnosti mají stejný účel. Pokud se v konfiguraci webové aplikace nachází obojí, LinuxFxVersion má přednost.

  2. Po az webapp config container set dokonč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.

    Úspěšný test webové aplikace v Azure

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á.

  1. Zapněte protokolování kontejneru:

    az webapp log config --name <app-name> --resource-group myResourceGroup --docker-container-logging filesystem
    
  2. Povolte stream protokolu:

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

    Pokud 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.

  3. 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í.

  1. 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 tsv
    

    CI_CD_URL je 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.

  2. 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:latest
    
  3. Pokud 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 --query parametr .

    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 site aplikace. 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.

  1. V místní složce docker-django-webapp-linux otevřete soubor app/templates/app/index.html.

  2. 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>
    
  3. Uložte provedené změny.

  4. Změňte složku docker-django-webapp-linux a znovu sestavte image:

    docker build --tag appsvc-tutorial-custom-image .
    
  5. 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.

  6. Nasoudí image do registru:

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:v1.0.1
    
  7. Po 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

  1. 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.

  2. 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í top pří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í: