Kurz: Automatizace sestavení imagí kontejneru při aktualizaci základní image v jiném privátním registru kontejneru

ACR Tasks podporuje automatizované sestavení imagí 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 jiného registru kontejneru Azure. Můžete také vyzkoušet kurz vytvoření úlohy ACR, která aktivuje sestavení image při odeslání základní image do stejného registru kontejneru Azure.

V tomto kurzu:

  • Sestavení základní image v základním registru
  • Vytvoření úlohy sestavení aplikace v jiné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

Kromě registru kontejneru vytvořeného v předchozích kurzech je potřeba vytvořit registr pro ukládání základních imagí. Pokud chcete, vytvořte druhý registr v jiném umístění než původní registr.

Konfigurace prostředí

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

BASE_ACR=<base-registry-name>   # The name of your Azure container registry for base images
ACR_NAME=<registry-name>        # The name of your Azure container registry for application images
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. Tento scénář odráží vývojový pracovní postup pro správu základních imagí v běžném privátním registru kontejneru při vytváření imagí aplikací v jiných registrech. Základní image můžou určovat běžné operační systémy a architektury používané týmem nebo dokonce běžné komponenty služeb.

Například vývojáři, kteří vyvíjejí image aplikací ve svých vlastních registrech, mají přístup k sadě základních imagí spravovaných ve společném základním registru. Základní registr může být v jiné oblasti nebo dokonce geograficky replikovaný.

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 jiného registru kontejneru Azure.

  • 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. V tomto příkladu se image odešle do registru základní image.

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

Vytvoření úlohy pro sledování privátní základní image

Dále vytvořte úlohu v registru imagí aplikace pomocí příkazu az acr task create a povolte spravovanou identitu. Spravovaná identita se použije v pozdějších krocích, aby se úloha ověřila pomocí registru základní image.

V tomto příkladu se používá identita přiřazená systémem, ale pro určité scénáře můžete vytvořit a povolit spravovanou identitu přiřazenou uživatelem. Podrobnosti najdete v tématu Ověřování napříč registry v úloze ACR pomocí identity spravované Azure.

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

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 v registru základních imagí:

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

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

Udělení oprávnění k vyžádání identity základnímu registru

Pokud chcete spravované identitě úlohy udělit oprávnění k načítání imagí ze základního registru imagí, nejprve spusťte příkaz az acr task show a získejte ID instančního objektu identity. Pak spuštěním příkazu az acr show získejte ID prostředku základního registru:

# Get service principal ID of the task
principalID=$(az acr task show --name baseexample2 --registry $ACR_NAME --query identity.principalId --output tsv) 

# Get resource ID of the base registry
baseregID=$(az acr show --name $BASE_ACR --query id --output tsv) 

Spuštěním příkazu az role assignment create přiřaďte registru oprávnění k vyžádání spravované identity:

az role assignment create \
  --assignee $principalID \
  --scope $baseregID --role acrpull 

Přidání přihlašovacích údajů cílového registru k úloze

Spuštěním příkazu az acr task credential add přidejte přihlašovací údaje k úloze. --use-identity [system] Předejte parametr, který označuje, že spravovaná identita přiřazená systémem úkolu má přístup k přihlašovacím údajům.

az acr task credential add \
  --name baseexample2 \
  --registry $ACR_NAME \
  --login-server $BASE_ACR.azurecr.io \
  --use-identity [system] 

Ruční spuštění úlohy

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 baseexample2

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.

az acr task list-runs --registry $ACR_NAME --output table
UN ID    TASK            PLATFORM    STATUS     TRIGGER       STARTED               DURATION
--------  --------------  ----------  ---------  ------------  --------------------  ----------
ca12      baseexample2    linux       Succeeded  Manual        2020-11-21T00:00:56Z  00:00:36
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

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 $BASE_ACR --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.

az acr task list-runs --registry $ACR_NAME --output table
         PLATFORM    STATUS     TRIGGER       STARTED               DURATION
--------  --------------  ----------  ---------  ------------  --------------------  ----------
ca13      baseexample2    linux       Succeeded  Image Update  2020-11-21T00:06:00Z  00:00:43
ca12      baseexample2    linux       Succeeded  Manual        2020-11-21T00:00:56Z  00:00:36
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

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

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. Teď přejděte k dalšímu kurzu, kde se dozvíte, jak aktivovat úlohy podle definovaného plánu.