Sdílet prostřednictvím


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 architektury aplikace v jedné ze základních imagí.

V tomto kurzu se dozvíte, jak 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 série, 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 verzi 2.0.46 nebo novější azure CLI. 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 každou hodnotu ručně nahradit všude tam, kde se zobrazí v ukázkových příkazech.

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ém se základní image a image aplikace udržují 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 vložení 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 se vaše úloha ACR sestaví a odešle 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řit úkol

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#master \
    --file Dockerfile-app \
    --git-access-token $GIT_PAT

Tento úkol se podobá úloze vytvořené 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í. I když 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, aplikace Dockerfile, 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 později 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řeba, 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> za ID spuštění z 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ě sestaveného kontejneru, abyste viděli aktualizované číslo verze, poznamenejte si hodnotu ID SPUŠTĚNÍ 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í úloh služby Azure Container Registry.

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