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 någon av dina basavbildningar.
I den här självstudien får du lära dig hur du skapar en ACR-uppgift som utlöser ett bygge i molnet när en containers basavbildning skickas till samma register. Du kan också prova en självstudiekurs för att skapa en ACR-uppgift som utlöser en avbildningsversion när en basavbildning skickas till ett annat Azure-containerregister.
I den här självstudien:
- 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
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
- 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 var det än 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
I den här självstudien går vi igenom 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övariabelnNODE_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-uppgifter 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#master \
--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
. Den Dockerfile som användes för att skapa avbildningen i föregående självstudie anger en offentlig basavbildning (FROM node:15-alpine
), men Dockerfile i den här uppgiften, Dockerfile-app, anger 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 aktiviteten och skapa programbilden. Det här steget behövs så att uppgiften 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 det Run ID som finns 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.
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:
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 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.