Självstudie: Automatisera containeravbildningsversioner när en basavbildning uppdateras i ett Azure-containerregister

ACR Tasks stöder automatiserade containeravbildningsversioner när en containers basavbildning uppdateras, till exempel när du korrigerar operativsystemet eller programramverket i en av basavbildningarna.

I den här självstudien får du lära dig hur du skapar en ACR-uppgift som utlöser en version i molnet när en containers basavbildning skickas till samma register. Du kan också prova en självstudie för att skapa en ACR-uppgift som utlöser en avbildningsversion när en basavbildning skickas till ett annat Azure-containerregister.

I de här självstudierna har du

  • Skapa basavbildningen
  • Skapa en programavbildning i samma register för att spåra basavbildningen
  • Uppdatera basavbildningen till att utlösa en programavbildningsuppgift
  • Visa den utlösta uppgiften
  • Kontrollera den uppdaterade programavbildningen

Förutsättningar

Slutför de tidigare självstudierna

Den här självstudien förutsätter att du redan har konfigurerat din miljö och slutfört stegen i de två första självstudierna i serien, där du:

  • Skapa Azure Container Registry
  • Förgrena en exempellagringsplats
  • Klona en exempellagringsplats
  • Skapa en personlig åtkomsttoken för GitHub

Om du inte redan har gjort det slutför du följande självstudier innan du fortsätter:

Skapa containeravbildningar i molnet med Azure Container Registry-uppgifter

Automatisera containeravbildningar med Azure Container Registry-uppgifter

Konfigurera miljön

  • Den här artikeln kräver version 2.0.46 eller senare av Azure CLI. Om du använder Azure Cloud Shell är den senaste versionen redan installerad.

Fyll i de här gränssnittsmiljövariablerna med värden som är lämpliga för din miljö. Det här steget är inte obligatoriskt, men det gör det lite enklare att köra de flerradiga Azure CLI-kommandona i den här självstudien. Om du inte fyller i dessa miljövariabler måste du manuellt ersätta varje värde oavsett var det visas i exempelkommandona.

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

Uppdateringsscenario för basavbildningar

Den här självstudien vägleder dig genom ett scenario med basavbildningsuppdatering där en basavbildning och en programavbildning underhålls i ett enda register.

Kodexemplet innehåller två Docker-filer: en programavbildning och en avbildning som anges som bas. I följande avsnitt skapar du en ACR-uppgift som automatiskt utlöser en version av programavbildningen när en ny version av basavbildningen skickas till samma containerregister.

  • Dockerfile-app: En liten Node.js-webbapp som återger en statisk webbsida som visar vilken Node.js-version den är baserad på. Versionssträngen är simulerad: den visar innehållet i miljövariabeln NODE_VERSION, som definieras i basavbildningen.

  • Dockerfile-base: Avbildningen som Dockerfile-app anger som bas. Den är baserad på en nodavbildning och inkluderar miljövariabeln NODE_VERSION.

I följande avsnitt skapar du en uppgift, uppdaterar värdet NODE_VERSION i basavbildningen Dockerfile och använder sedan ACR Tasks för att skapa basavbildningen. När ACR-uppgiften skickar den nya basavbildningen till registret utlöser den automatiskt en version av programavbildningen. Du kan också köra programmets containeravbildning lokalt om du vill se andra versionssträngar i versionsavbildningarna.

I den här självstudien skapar och push-överför ACR-uppgiften en programcontaineravbildning som anges i en Dockerfile. ACR Tasks kan också köra uppgifter i flera steg med hjälp av en YAML-fil för att definiera steg för att skapa, push-överföra och eventuellt testa flera containrar.

Skapa basavbildningen

Börja med att skapa basavbildningen med en snabbuppgift för ACR Tasks med hjälp av az acr build. Enligt beskrivningen i den första självstudien i serien skapar denna process inte bara avbildningen, utan skickar den även till containerregistret om den lyckas.

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

Skapa en uppgift

Skapa sedan en uppgift med az acr task create:

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

Den här uppgiften liknar den uppgift som skapades i föregående självstudie. Den instruerar ACR Tasks att utlösa en avbildningsversion när incheckningar skickas till den lagringsplats som anges i --context. Medan Dockerfile som användes för att skapa avbildningen i föregående självstudie anger en offentlig basavbildning (FROM node:15-alpine), anger Dockerfile i den här uppgiften Dockerfile-app en basavbildning i samma register:

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

Den här konfigurationen gör det enkelt att simulera en ramverkskorrigering i basavbildningen senare i den här självstudien.

Skapa programcontainern

Använd az acr task run för att manuellt utlösa uppgiften och skapa programbilden. Det här steget behövs så att aktiviteten spårar programavbildningens beroende av basavbildningen.

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

När uppgiften är klar antecknar du Run ID (till exempel ”da6”) om du vill slutföra följande valfria steg.

Valfritt: Köra programcontainern lokalt

Om du arbetar lokalt (inte i Cloud Shell) och har installerat Docker, kör du containern för att se det program som återges i webbläsaren innan du återskapar dess basavbildning. Hoppa över det här avsnittet om du använder Cloud Shell (Cloud Shell stöder inte az acr login eller docker run).

Autentisera först till containerregistret med az acr login:

az acr login --name $ACR_NAME

Kör nu containern lokalt med docker run. Ersätt <run-id> med körnings-ID:t som hittades i utdata från föregående steg (till exempel "da6"). Det här exemplet namnger containern myapp och innehåller parametern --rm för att ta bort containern när du stoppar den.

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

Gå till http://localhost:8080 i webbläsaren. Du bör nu se versionsnumret för Node.js som återgavs på webbsidan, liknande nedan. I ett senare steg ökar du versionen genom att lägga till ett ”a” i versionssträngen.

Skärmbild av exempelprogram i webbläsaren

Kör följande kommando för att stoppa och ta bort containern:

docker stop myapp

Lista versionerna

Nu listar du de uppgiftskörningar som ACR Tasks har slutfört för ditt register med hjälp av kommandot az acr task list-runs:

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

Om du slutförde föregående självstudie (och inte tog bort registret) bör du nu se utdata som liknar följande. Anteckna antalet uppgiftskörningar och senaste RUN ID så att du kan jämföra utdata när du har uppdaterat basavbildningen i nästa avsnitt.

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

Uppdatera basavbildningen

Här simulerar du en ramverkskorrigering i basavbildningen. Redigera Dockerfile-base och lägg till ett ”a” efter versionsnumret som definieras i NODE_VERSION:

ENV NODE_VERSION 15.2.1a

Kör en snabbuppgift för att skapa den ändrade basavbildningen. Anteckna Run ID i utdata.

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

När versionen är klar och ACR-uppgiften har skickat den nya basavbildningen till registret utlöser den automatiskt en version av programavbildningen. Det kan ta en stund innan den uppgift som du skapade tidigare utlöser programmets avbildningsversion, eftersom den måste identifiera den nyligen slutförda och skickade basavbildningen.

Lista uppdaterad version

Nu när du har uppdaterat basavbildningen listar du återigen dina uppgiftskörningar för att kunna jämföra med den tidigare listan. Om utdatan inte skiljer sig åt kan du köra kommandot flera gånger för att se när den nya uppgiftskörningen visas i listan.

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

De utdata som genereras liknar följande. TRIGGER (utlösaren) för den senast körda versionen ska vara ”Image Update” (Avbildningsuppdatering), vilket anger att uppgiften startades av snabbuppgiften för basavbildningen.

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

Om du vill utföra följande valfria steg för att köra den nyligen skapade containern för att se det uppdaterade versionsnumret bör du anteckna RUN ID-värdet för den avbildningsuppdateringsutlösta versionen (i föregående utdata är det "ca11").

Valfritt: Köra nyskapad avbildning

Om du arbetar lokalt (inte i Cloud Shell) och du har installerat Docker, kör du den nya programavbildningen när dess version är klar. Ersätt <run-id> med det RUN ID som du hämtade i föregående steg. Hoppa över det här avsnittet om du använder Cloud Shell (Cloud Shell stöder inte docker run).

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

Gå till http://localhost:8081 i webbläsaren. Du bör nu se det uppdaterade versionsnumret för Node.js (med ett ”a”) på webbsidan:

Skärmbild av uppdaterat exempelprogram i webbläsaren

Observera att du har uppdaterat din basavbildning med ett nytt versionsnummer, men den senaste skapade programavbildningen visar den nya versionen. ACR Tasks hämtade din ändring av basavbildningen och återskapade din programavbildning automatiskt.

Kör följande kommando för att stoppa och ta bort containern:

docker stop updatedapp

Nästa steg

I den här självstudien lärde du dig att använda en uppgift till att utlösa containeravbildningsversioner automatiskt när en basavbildning har uppdaterats.

Ett fullständigt arbetsflöde för att hantera basavbildningar som kommer från en offentlig källa finns i Använda och underhålla offentligt innehåll med Azure Container Registry Tasks.

Gå nu vidare till nästa självstudie för att lära dig hur du utlöser uppgifter enligt ett definierat schema.