Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
ACR Tasks är en samling funktioner inom Azure Container Registry som erbjuder smidiga och effektiva Docker-containerbilder i Azure. I den här artikeln får du lära dig hur du använder snabbaktivitetsfunktionen i ACR Tasks.
Utvecklingscykeln "inre loop" är den iterativa processen att skriva kod, skapa och testa ditt program innan du förbinder dig till källkontroll. En snabb uppgift utökar din inre loop till molnet, vilket ger dig validering av byggframgångar och automatisk push-överföring av avbildningar som har skapats till containerregistret. Dina avbildningar är inbyggda i molnet, nära registret, vilket möjliggör snabbare distribution.
All din Dockerfile-expertis kan överföras direkt till ACR Tasks. Du behöver inte ändra dina Dockerfiles för att skapa i molnet med ACR Tasks, bara det kommando som du kör.
I denna handledning, del ett i en serie:
- Hämta exempelprogrammets källkod
- Skapa en containeravbildning i Azure
- Distribuera en behållare till Azure Container Instances
I efterföljande guider lär du dig att använda ACR Tasks för att bygga containerbilder vid kodincheckning och basbilduppdatering. 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.
Förutsättningar
GitHub-konto
Skapa ett konto på https://github.com om du inte redan har ett. I den här självstudieserien används en GitHub-lagringsplats för att demonstrera automatiserade bildbyggningar i ACR Tasks.
Förgrena en exempellagringsplats
Använd sedan GitHub-användargränssnittet för att förgrena exempellagringsplatsen till ditt GitHub-konto. I den här självstudien skapar du en containeravbildning från källan på lagringsplatsen, och i nästa självstudie skickar du en incheckning till din förgrening av lagringsplatsen för att starta en automatiserad uppgift.
Förgrena den här lagringsplatsen: https://github.com/Azure-Samples/acr-build-helloworld-node
Klona din fork
När du har förgrenat lagringsplatsen klonar du din förgrening och anger katalogen som innehåller din lokala klon.
Klona lagringsplatsen med git, ersätt <ditt-github-username> med ditt GitHub-användarnamn:
git clone https://github.com/<your-github-username>/acr-build-helloworld-node
Ange katalogen som innehåller källkoden:
cd acr-build-helloworld-node
Bash-gränssnitt
Kommandona i den här självstudieserien är formaterade för Bash-gränssnittet. Om du föredrar att använda PowerShell, Kommandotolken eller ett annat gränssnitt kan du behöva justera linjefortsättnings- och miljövariabelformatet i enlighet med detta.
Förbered din miljö för Azure CLI
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Kom igång med Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör på Windows eller macOS, överväg att köra Azure CLI i en Docker-container. För mer information, se Hur man kör 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. För att slutföra autentiseringsprocessen, följ stegen som visas i din terminal. Andra inloggningsalternativ finns i Autentisera till Azure med Azure CLI.
När du blir uppmanad, installera Azure CLI-tillägget vid första användning. Mer information om tillägg finns i Använda och hantera tillägg med Azure CLI.
Kör az version för att ta reda på versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
Skapa i Azure med ACR-uppgifter
Nu när du har hämtat källkoden till datorn följer du de här stegen för att skapa ett containerregister och skapa containeravbildningen med ACR Tasks.
För att göra det enklare att köra exempelkommandona använder handledningarna i den här serien skalmiljövariabler. Kör följande kommando för att ange variabeln ACR_NAME . Ersätt <registernamnet> med ett unikt namn för det nya containerregistret. Registernamnet måste vara unikt i Azure, endast innehålla gemener och innehålla 5–50 alfanumeriska tecken. De andra resurser som du skapar i självstudien baseras på det här namnet, så du bör bara behöva ändra den första variabeln.
ACR_NAME=<registry-name>
Med variabeln containerregistermiljö ifylld bör du nu kunna kopiera och klistra in resten av kommandona i självstudien utan att redigera några värden. Kör följande kommandon för att skapa en resursgrupp och ett containerregister.
RES_GROUP=$ACR_NAME # Resource Group name
az group create --resource-group $RES_GROUP --location eastus
az acr create --resource-group $RES_GROUP --name $ACR_NAME --sku Standard --location eastus
Nu när du har ett register använder du ACR Tasks för att skapa en containeravbildning från exempelkoden. Kör kommandot az acr build för att utföra en snabb uppgift.
Anmärkning
Den Dockerfile som används i följande exempel beror på en offentlig bascontaineravbildning från Docker Hub. För att förbättra tillförlitligheten när du använder offentligt innehåll importerar och hanterar du avbildningen i ett privat Azure-containerregister och uppdaterar Dockerfile så att den använder din privat hanterade basavbildning. Läs mer om hur du arbetar med offentliga avbildningar.
az acr build --registry $ACR_NAME --image helloacrtasks:v1 --file /path/to/Dockerfile /path/to/build/context.
Utdata från kommandot az acr build liknar följande. Du kan se uppladdningen av källkoden ("kontexten") till Azure och detaljerna om den docker build operation som ACR-uppgiften kör i molnet. Eftersom ACR-uppgifter använder docker build för att bygga dina bilder, krävs inga ändringar i dina Dockerfiler för att kunna börja använda ACR-uppgifter omedelbart.
Packing source code into tar file to upload...
Sending build context (4.813 KiB) to ACR...
Queued a build with build ID: da1
Waiting for build agent...
2020/11/18 18:31:42 Using acb_vol_01185991-be5f-42f0-9403-a36bb997ff35 as the home volume
2020/11/18 18:31:42 Setting up Docker configuration...
2020/11/18 18:31:43 Successfully set up Docker configuration
2020/11/18 18:31:43 Logging in to registry: myregistry.azurecr.io
2020/11/18 18:31:55 Successfully logged in
Sending build context to Docker daemon 21.5kB
Step 1/5 : FROM node:15-alpine
15-alpine: Pulling from library/node
Digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
Status: Image is up to date for node:15-alpine
---> a56170f59699
Step 2/5 : COPY . /src
---> 88087d7e709a
Step 3/5 : RUN cd /src && npm install
---> Running in e80e1263ce9a
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN helloworld@1.0.0 No repository field.
up to date in 0.1s
Removing intermediate container e80e1263ce9a
---> 26aac291c02e
Step 4/5 : EXPOSE 80
---> Running in 318fb4c124ac
Removing intermediate container 318fb4c124ac
---> 113e157d0d5a
Step 5/5 : CMD ["node", "/src/server.js"]
---> Running in fe7027a11787
Removing intermediate container fe7027a11787
---> 20a27b90eb29
Successfully built 20a27b90eb29
Successfully tagged myregistry.azurecr.io/helloacrtasks:v1
2020/11/18 18:32:11 Pushing image: myregistry.azurecr.io/helloacrtasks:v1, attempt 1
The push refers to repository [myregistry.azurecr.io/helloacrtasks]
6428a18b7034: Preparing
c44b9827df52: Preparing
172ed8ca5e43: Preparing
8c9992f4e5dd: Preparing
8dfad2055603: Preparing
c44b9827df52: Pushed
172ed8ca5e43: Pushed
8dfad2055603: Pushed
6428a18b7034: Pushed
8c9992f4e5dd: Pushed
v1: digest: sha256:b038dcaa72b2889f56deaff7fa675f58c7c666041584f706c783a3958c4ac8d1 size: 1366
2020/11/18 18:32:43 Successfully pushed image: myregistry.azurecr.io/helloacrtasks:v1
2020/11/18 18:32:43 Step ID acb_step_0 marked as successful (elapsed time in seconds: 15.648945)
The following dependencies were found:
- image:
registry: myregistry.azurecr.io
repository: helloacrtasks
tag: v1
digest: sha256:b038dcaa72b2889f56deaff7fa675f58c7c666041584f706c783a3958c4ac8d1
runtime-dependency:
registry: registry.hub.docker.com
repository: library/node
tag: 15-alpine
digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
git: {}
Run ID: da1 was successful after 1m9.970148252s
Mot slutet av utdata visar ACR Tasks de beroenden som den har upptäckt för din avbildning. Detta möjliggör för ACR Tasks att automatisera imagekompileringar när basavbildningar uppdateras, till exempel när en basavbildning uppdateras med operativsystem- eller ramverkskorrigeringar. Du lär dig mer om stöd för ACR-uppgifter för basavbildningsuppdateringar senare i denna handledningsserie.
Distribuera till Azure Container Instances
ACR-uppgifter överför automatiskt framgångsrikt skapade avbildningar till ditt register som standardinställning, vilket gör att du kan distribuera dem genast från ditt register.
I det här avsnittet skapar du ett Azure Key Vault och tjänstens huvudnamn och distribuerar sedan containern till Azure Container Instances (ACI) med tjänstens huvudnamns autentiseringsuppgifter.
Konfigurera registerautentisering
Alla produktionsscenarier bör använda tjänstens huvudnamn för att få åtkomst till ett Azure-containerregister. Med tjänstens huvudnamn kan du tillhandahålla rollbaserad åtkomstkontroll till dina containeravbildningar. Du kan till exempel konfigurera ett huvudnamn för tjänsten med endast pull-åtkomst till ett register.
Skapa ett nyckelvalv
Om du inte redan har ett valv i Azure Key Vault skapar du ett med Azure CLI med hjälp av följande kommandon.
AKV_NAME=$ACR_NAME-vault
az keyvault create --resource-group $RES_GROUP --name $AKV_NAME
Skapa ett tjänsthuvudnamn och lagra autentiseringsuppgifter
Nu måste du skapa ett huvudnamn för tjänsten och lagra dess autentiseringsuppgifter i nyckelvalvet.
Använd kommandot az ad sp create-for-rbac för att skapa principaltjänsten och az keyvault secret set för att lagra principaltjänstens lösenord i nyckelvalvet. Använd Azure CLI version 2.25.0 eller senare för följande kommandon:
Vilken roll som ska användas i rolltilldelningen beror på om registret är ABAC-aktiverat eller inte.
# Create service principal, store its password in AKV (the registry *password*)
ROLE="Container Registry Repository Reader" # For ABAC-enabled registries. For non-ABAC registries, use AcrPull.
az keyvault secret set \
--vault-name $AKV_NAME \
--name $ACR_NAME-pull-pwd \
--value $(az ad sp create-for-rbac \
--name $ACR_NAME-pull \
--scopes $(az acr show --name $ACR_NAME --query id --output tsv) \
--role "$ROLE" \
--query password \
--output tsv)
Argumentet --role i föregående kommando konfigurerar tjänsthuvudnamnet med en inbyggd roll för att ge den enbart pull-åtkomst till registret. Vilken roll som ska användas i rolltilldelningen beror på om registret är ABAC-aktiverat eller inte, med ABAC-aktiverade register som Container Registry Repository Reader behöver rollen och icke-ABAC-register som AcrPull behöver rollen.
Om du vill bevilja både push- och pull-åtkomst ändrar du --role argumentet till antingen Container Registry Repository Writer rollen för ABAC-aktiverade register eller AcrPush rollen för icke-ABAC-aktiverade register.
Mer information om Microsoft Entra ABAC finns i Microsoft Entra-baserade lagringsplatsbehörigheter.
Lagra sedan tjänstens huvudnamns appId i valvet, vilket är användarnamnet du skickar till Azure Container Registry för autentisering:
# Store service principal ID in AKV (the registry *username*)
az keyvault secret set \
--vault-name $AKV_NAME \
--name $ACR_NAME-pull-usr \
--value $(az ad sp list --display-name $ACR_NAME-pull --query [].appId --output tsv)
Du har skapat ett Azure Key Vault och lagrat två hemligheter i det:
-
$ACR_NAME-pull-usr: Tjänstens huvudnamns-ID för användning som användarnamn för containerregistret. -
$ACR_NAME-pull-pwd: Tjänstens huvudnamnslösenord för användning som containerregisterlösenord.
Nu kan du referera till dessa hemligheter efter namn när du eller dina program och tjänster hämtar avbildningar från registret.
Distribuera en container med Azure CLI
Nu när autentiseringsuppgifterna för tjänstens huvudnamn lagras som Azure Key Vault-hemligheter kan dina program och tjänster använda dem för att komma åt ditt privata register.
Kör följande az container create-kommando för att distribuera en containerinstans. Kommandot använder autentiseringsuppgifterna för tjänstens huvudnamn som lagras i Azure Key Vault för att autentisera till ditt containerregister.
az container create \
--resource-group $RES_GROUP \
--name acr-tasks \
--image $ACR_NAME.azurecr.io/helloacrtasks:v1 \
--registry-login-server $ACR_NAME.azurecr.io \
--registry-username $(az keyvault secret show --vault-name $AKV_NAME --name $ACR_NAME-pull-usr --query value -o tsv) \
--registry-password $(az keyvault secret show --vault-name $AKV_NAME --name $ACR_NAME-pull-pwd --query value -o tsv) \
--dns-name-label acr-tasks-$ACR_NAME \
--query "{FQDN:ipAddress.fqdn}" \
--output table
Värdet --dns-name-label måste vara unikt i Azure, så föregående kommando lägger till containerregistrets namn i containerns DNS-namnetikett. Utdata från kommandot visar containerns fullständigt kvalificerade domännamn (FQDN), till exempel:
FQDN
----------------------------------------------
acr-tasks-myregistry.eastus.azurecontainer.io
Anteckna containerns FQDN. Du använder det i nästa avsnitt.
Verifiera driftsättningen
Om du vill titta på startprocessen för containern använder du kommandot az container attach :
az container attach --resource-group $RES_GROUP --name acr-tasks
Utdata az container attach visar först containerns status när den hämtar avbildningen och startar och binder sedan den lokala konsolens STDOUT och STDERR till containerns.
Container 'acr-tasks' is in state 'Running'...
(count: 1) (last timestamp: 2020-11-18 18:39:10+00:00) pulling image "myregistry.azurecr.io/helloacrtasks:v1"
(count: 1) (last timestamp: 2020-11-18 18:39:15+00:00) Successfully pulled image "myregistry.azurecr.io/helloacrtasks:v1"
(count: 1) (last timestamp: 2020-11-18 18:39:17+00:00) Created container
(count: 1) (last timestamp: 2020-11-18 18:39:17+00:00) Started container
Start streaming logs:
Server running at http://localhost:80
När Server running at http://localhost:80 det visas navigerar du till containerns FQDN i webbläsaren för att se det program som körs. FQDN ska ha visats i utdata från kommandot az container create som du körde i föregående avsnitt.
Koppla från konsolen från containern genom att trycka på Control+C.
Rensa resurser
Stoppa behållarinstansen med kommandot az container delete:
az container delete --resource-group $RES_GROUP --name acr-tasks
Om du vill ta bort alla resurser som du har skapat i den här självstudien, inklusive containerregistret, nyckelvalvet och tjänstens huvudnamn, utfärdar du följande kommandon. Dessa resurser används dock i nästa självstudie i serien, så du kanske vill behålla dem om du går vidare direkt till nästa självstudie.
az group delete --resource-group $RES_GROUP
az ad sp delete --id http://$ACR_NAME-pull
Nästa steg
Nu när du har testat den inre loopen med en snabb uppgift, konfigurerar du en bygguppgift för att utlösa containerbilder när du commitar källkod till ett Git-repository.