Självstudie: Automatisera containeravbildningsversioner när en basavbildning uppdateras i ett annat privat containerregister
ACR Tasks stöder automatiserade avbildningsversioner när en containers basavbildning uppdateras, till exempel när du korrigerar operativsystemet eller programramverket i en av dina basavbildningar.
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 ett annat Azure-containerregister. 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 samma Azure-containerregister.
I de här självstudierna har du
- Skapa basavbildningen i ett basregister
- Skapa en programbygguppgift i ett annat 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
Förutom det containerregister som skapades för de föregående självstudierna måste du skapa ett register för att lagra basavbildningarna. Om du vill kan du skapa det andra registret på en annan plats än det ursprungliga registret.
Konfigurera miljön
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.
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
Uppdateringsscenario för basavbildningar
Den här självstudien vägleder dig genom ett uppdateringsscenario för basavbildningen. Det här scenariot återspeglar ett utvecklingsarbetsflöde för att hantera basavbildningar i ett gemensamt privat containerregister när du skapar programavbildningar i andra register. Basavbildningarna kan ange vanliga operativsystem och ramverk som används av ett team, eller till och med vanliga tjänstkomponenter.
Utvecklare som utvecklar programavbildningar i sina egna register kan till exempel komma åt en uppsättning basavbildningar som underhålls i det gemensamma basregistret. Basregistret kan finnas i en annan region eller till och med geo-replikeras.
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 ett annat Azure-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 din ACR-uppgift 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 ACR Tasks-snabbuppgift 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. I det här exemplet push-överförs avbildningen till basavbildningsregistret.
az acr build --registry $BASE_ACR --image baseimages/node:15-alpine --file Dockerfile-base .
Skapa en uppgift för att spåra den privata basavbildningen
Skapa sedan en uppgift i programmets avbildningsregister med az acr task create, vilket aktiverar en hanterad identitet. Den hanterade identiteten används i senare steg så att uppgiften autentiseras med basavbildningsregistret.
I det här exemplet används en systemtilldelad identitet, men du kan skapa och aktivera en användartilldelad hanterad identitet för vissa scenarier. Mer information finns i Autentisering mellan register i en ACR-uppgift med hjälp av en Azure-hanterad identitet.
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
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 basavbildningsregistret:
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.
Ge identitetshämtningsbehörigheter till basregistret
Om du vill ge uppgiftens hanterade identitet behörighet att hämta avbildningar från basavbildningsregistret kör du först az acr task show för att hämta identitetens ID för tjänstens huvudnamn. Kör sedan az acr show för att hämta resurs-ID:t för basregistret:
# 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)
Tilldela hämtningsbehörigheterna för den hanterade identiteten till registret genom att köra az role assignment create:
az role assignment create \
--assignee $principalID \
--scope $baseregID --role acrpull
Lägga till autentiseringsuppgifter för målregistret i uppgiften
Kör az acr task credential add för att lägga till autentiseringsuppgifter i uppgiften. Skicka parametern --use-identity [system]
för att ange att uppgiftens systemtilldelade hanterade identitet kan komma åt autentiseringsuppgifterna.
az acr task credential add \
--name baseexample2 \
--registry $ACR_NAME \
--login-server $BASE_ACR.azurecr.io \
--use-identity [system]
Kör uppgiften manuellt
Använd az acr task run för att manuellt utlösa uppgiften 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 baseexample2
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 körnings-ID 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.
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.
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
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 $BASE_ACR --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.
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
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 noterar du run-ID-värdet för den avbildningsuppdateringsutlösta versionen (i föregående utdata är det "ca13").
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. Gå nu vidare till nästa självstudie för att lära dig hur du utlöser uppgifter enligt ett definierat schema.
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för