Kurz: Automatizace sestavení imagí kontejneru při aktualizaci základní image v registru kontejneru Azure

ACR Tasks podporuje automatizované sestavení imagí kontejneru při aktualizaci základní image kontejneru, například při opravě operačního systému nebo aplikační architektury v jedné ze základních imagí.

V tomto kurzu se naučíte vytvořit úlohu ACR, která aktivuje sestavení v cloudu, když se základní image kontejneru odešle do stejného registru. Můžete také vyzkoušet kurz vytvoření úlohy ACR, která aktivuje sestavení image při odeslání základní image do jiného registru kontejneru Azure.

V tomto kurzu:

  • Sestavit základní image
  • Vytvoření image aplikace ve stejném registru pro sledování základní image
  • Aktualizovat základní image tak, aby aktivovala úlohu image aplikace
  • Zobrazit aktivovanou úlohu
  • Ověřit aktualizovanou image aplikace

Požadavky

Dokončení předchozích kurzů

Tento kurz předpokládá, že jste už nakonfigurovali prostředí a dokončili kroky v prvních dvou kurzech v sérii, ve kterých:

  • Vytvoření registru kontejneru Azure
  • Vytvoření forku ukázkového úložiště
  • Klonování ukázkového úložiště
  • Vytvoření tokenu PAT GitHubu

Pokud jste to ještě neudělali, před pokračováním proveďte následující kurzy:

Sestavení imagí kontejnerů v cloudu pomocí Azure Container Registry Tasks

Automatizace sestavení imagí kontejnerů pomocí Azure Container Registry Tasks

Konfigurace prostředí

  • Tento článek vyžaduje azure CLI verze 2.0.46 nebo novější. Pokud používáte Azure Cloud Shell, je už nainstalovaná nejnovější verze.

Tyto proměnné prostředí naplňte hodnotami vhodnými pro vaše prostředí. Tento krok není nezbytně nutný, ale usnadní provádění víceřádkových příkazů Azure CLI v tomto kurzu. Pokud tyto proměnné prostředí nenaplníte, musíte ručně nahradit každou hodnotu tam, kde se v ukázkových příkazech objeví.

ACR_NAME=<registry-name>        # The name of your Azure container registry
GIT_USER=<github-username>      # Your GitHub user account name
GIT_PAT=<personal-access-token> # The PAT you generated in the second tutorial

Scénář aktualizace základní image

Tento kurz vás provede scénářem aktualizace základní image, ve které se základní image a image aplikace uchovávají v jednom registru.

Vzorový kód zahrnuje dva soubory Dockerfile: image aplikace a image, na které je založená. V následujících částech vytvoříte úlohu ACR, která automaticky aktivuje sestavení image aplikace při odeslání nové verze základní image do stejného registru kontejneru.

  • Dockerfile-app: Jedná se o malou webovou aplikaci Node.js, která vykreslí statickou webovou stránku zobrazující verzi Node.js, na které je založena. Řetězec verze je simulovaný: zobrazuje obsah proměnné prostředí NODE_VERSION, která je definovaná v základní imagi.

  • Dockerfile-base: Image, kterou Dockerfile-app specifikuje jako svou základní image. Je založená na imagi Node a zahrnuje proměnnou prostředí NODE_VERSION.

V následujících částech vytvoříte úlohu, aktualizujete hodnotu NODE_VERSION v souboru Dockerfile základní image a potom použijete ACR Tasks k sestavení základní image. Když úloha ACR odešle do registru novou základní image, automaticky aktivuje sestavení image aplikace. Volitelně můžete spustit image kontejneru aplikace místně, abyste se mohli podívat na různé řetězce verze v sestavených imagích.

V tomto kurzu vaše úloha ACR sestaví a nasdílí image kontejneru aplikace zadanou v souboru Dockerfile. ACR Tasks může také spouštět vícekrokové úlohy pomocí souboru YAML k definování kroků pro sestavení, nabízení a volitelně testování více kontejnerů.

Sestavit základní image

Začněte vytvořením základní image pomocí rychlé úlohy ACR Tasks pomocí příkazu az acr build. Jak je popsáno v prvním kurzu série, tímto postupem se nejen sestaví image, ale v případě úspěšného sestavení se odešle do registru kontejneru.

az acr build --registry $ACR_NAME --image baseimages/node:15-alpine --file Dockerfile-base .

Vytvoření úkolu

Dále pomocí příkazu az acr build-task create vytvořte úlohu:

az acr task create \
    --registry $ACR_NAME \
    --name baseexample1 \
    --image helloworld:{{.Run.ID}} \
    --arg REGISTRY_NAME=$ACR_NAME.azurecr.io \
    --context https://github.com/$GIT_USER/acr-build-helloworld-node.git#main \
    --file Dockerfile-app \
    --git-access-token $GIT_PAT

Tento úkol se podobá úkolu vytvořenému v předchozím kurzu. Dává službě ACR Tasks pokyn aktivovat sestavení image, když se do úložiště určeného parametrem --context odešlou potvrzení. Zatímco soubor Dockerfile použitý k sestavení image v předchozím kurzu určuje veřejnou základní image (FROM node:15-alpine), soubor Dockerfile v této úloze Dockerfile-app určuje základní image ve stejném registru:

FROM ${REGISTRY_NAME}/baseimages/node:15-alpine

Tato konfigurace usnadňuje simulaci opravy architektury v základní imagi dále v tomto kurzu.

Sestavení kontejneru aplikace

Pomocí příkazu az acr task run ručně aktivujte úlohu a sestavte image aplikace. Tento krok je potřebný k tomu, aby úloha sleduje závislost image aplikace na základní imagi.

az acr task run --registry $ACR_NAME --name baseexample1

Jakmile se úloha dokončí, poznamenejte si ID spuštění (například „da6“), pokud chcete provést následující volitelný krok.

Volitelné: Spuštění kontejneru aplikace místně

Pokud pracujete místně (nejste v Cloud Shellu) a máte nainstalovaný Docker, spusťte kontejner, abyste zobrazili aplikaci vykreslenou ve webovém prohlížeči dříve, než opětovně sestavíte její základní image. Pokud Cloud Shell používáte, tuto část přeskočte (Cloud Shell nepodporuje az acr login ani docker run).

Nejprve se pomocí příkazu az acr login ověřte ve svém registru kontejneru:

az acr login --name $ACR_NAME

Teď pomocí docker run spusťte kontejner místně. Nahraďte <run-id> ID spuštění, které najdete ve výstupu z předchozího kroku (například da6). Tento příklad pojmenuje kontejner myapp a obsahuje --rm parametr pro odebrání kontejneru, když ho zastavíte.

docker run -d -p 8080:80 --name myapp --rm $ACR_NAME.azurecr.io/helloworld:<run-id>

V prohlížeči přejděte na http://localhost:8080. Měli byste vidět číslo verze Node.js vykreslené na webové stránce. Mělo by vypadat takto. V dalším kroku změníte verzi tak, že do řetězce verze přidáte znak „a“.

Snímek obrazovky s ukázkovou aplikací v prohlížeči

Pokud chcete kontejner zastavit a odebrat, spusťte následující příkaz:

docker stop myapp

Výpis sestavení

Dále pomocí příkazu az acr task list-runs vypište spuštění úloh, která služba ACR Tasks dokončila pro váš registr:

az acr task list-runs --registry $ACR_NAME --output table

Pokud jste dokončili předchozí kurz (a nevymazali jste registr), měli byste vidět výstup podobný následujícímu. Poznamenejte si počet spuštění úloh a ID nejnovějšího spuštění, abyste je mohli porovnat s výstupem po aktualizaci základní image, kterou provedete v další části.

RUN ID    TASK            PLATFORM    STATUS     TRIGGER    STARTED               DURATION
--------  --------------  ----------  ---------  ---------  --------------------  ----------
cax       baseexample1    linux       Succeeded  Manual     2020-11-20T23:33:12Z  00:00:30
caw       taskhelloworld  linux       Succeeded  Commit     2020-11-20T23:16:07Z  00:00:29
cav       example2        linux       Succeeded  Commit     2020-11-20T23:16:07Z  00:00:55
cau       example1        linux       Succeeded  Commit     2020-11-20T23:16:07Z  00:00:40
cat       taskhelloworld  linux       Succeeded  Manual     2020-11-20T23:07:29Z  00:00:27

Aktualizace základní image

V tomto kroku budete simulovat opravu architektury v základní imagi. Upravte Dockerfile-base a za číslo verze definované v NODE_VERSION přidejte znak „a“:

ENV NODE_VERSION 15.2.1a

Spusťte rychlou úlohu, která sestaví upravenou základní image. Poznamenejte si ID spuštění uvedené ve výstupu.

az acr build --registry $ACR_NAME --image baseimages/node:15-alpine --file Dockerfile-base .

Jakmile se sestavení dokončí a úloha ACR odešle novou základní image do registru, aktivuje se sestavení image aplikace. Než úloha, kterou jste vytvořili dříve, aktivuje sestavení image aplikace, může to chvíli trvat, protože musí zjistit nově sestavenou a odeslanou základní image.

Výpis aktualizovaného sestavení

Teď, když jste aktualizovali základní image, znovu zobrazte seznam spuštění úloh a porovnejte ho s předchozím seznamem. Pokud se napoprvé výstup neliší, opakovaně spouštějte příkaz, aby se nové spuštění úlohy v seznamu zobrazilo.

az acr task list-runs --registry $ACR_NAME --output table

Výstup je podobný tomuto. Triggerem pro poslední spuštěné sestavení by měl být „Image Update“ značící, že se úloha zahájila rychlou úlohou základní image.

Run ID    TASK            PLATFORM    STATUS     TRIGGER       STARTED               DURATION
--------  --------------  ----------  ---------  ------------  --------------------  ----------
ca11      baseexample1    linux       Succeeded  Image Update  2020-11-20T23:38:24Z  00:00:34
ca10      taskhelloworld  linux       Succeeded  Image Update  2020-11-20T23:38:24Z  00:00:24
cay                       linux       Succeeded  Manual        2020-11-20T23:38:08Z  00:00:22
cax       baseexample1    linux       Succeeded  Manual        2020-11-20T23:33:12Z  00:00:30
caw       taskhelloworld  linux       Succeeded  Commit        2020-11-20T23:16:07Z  00:00:29
cav       example2        linux       Succeeded  Commit        2020-11-20T23:16:07Z  00:00:55
cau       example1        linux       Succeeded  Commit        2020-11-20T23:16:07Z  00:00:40
cat       taskhelloworld  linux       Succeeded  Manual        2020-11-20T23:07:29Z  00:00:27

Pokud chcete provést následující volitelný krok spuštění nově vytvořeného kontejneru a zobrazit aktualizované číslo verze, poznamenejte si hodnotu RUN ID pro sestavení aktivované aktualizací image (v předchozím výstupu je to "ca11").

Volitelné: Spuštění nově sestavené image

Pokud pracujete místně (nejste v Cloud Shellu) a máte nainstalovaný Docker, spusťte novou image aplikace, jakmile se její sestavení dokončí. <run-id> nahraďte hodnotou ID spuštění, kterou jste získali v předchozím kroku. Pokud Cloud Shell používáte, tuto část přeskočte (Cloud Shell nepodporuje docker run).

docker run -d -p 8081:80 --name updatedapp --rm $ACR_NAME.azurecr.io/helloworld:<run-id>

V prohlížeči přejděte na http://localhost:8081. Měli byste vidět aktualizované číslo verze Node.js (se znakem „a“) na webové stránce:

Snímek obrazovky s aktualizovanou ukázkovou aplikací v prohlížeči

Důležité je uvědomit si, že jste aktualizovali základní image s novým číslem verze, ale novou verzi zobrazuje poslední sestavená image aplikace. Služba ACR Tasks převzala změnu základní image a automaticky znovu sestavila image aplikace.

Pokud chcete kontejner zastavit a odebrat, spusťte následující příkaz:

docker stop updatedapp

Další kroky

V tomto kurzu jste zjistili, jak pomocí úlohy automaticky aktivovat sestavení imagí kontejnerů při aktualizaci základní image.

Úplný pracovní postup pro správu základních imagí pocházejících z veřejného zdroje najdete v tématu Jak využívat a udržovat veřejný obsah pomocí Azure Container Registry Tasks.

Teď přejděte k dalšímu kurzu, kde se dozvíte, jak aktivovat úkoly podle definovaného plánu.