Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
ACR Tasks is een suite met functies in Azure Container Registry die gestroomlijnde en efficiënte builds van Docker-containerinstallatiekopieën mogelijk maakt in Azure. In dit artikel leert u hoe u de functie quick task van ACR Tasks gebruikt.
De ontwikkelingscyclus voor de 'inner loop' is het iteratieve proces van het schrijven van code, en het bouwen en testen van uw toepassing voordat u deze commit naar versiebeheer. Met een quick task breidt u de 'binnenste lus' van uw ontwikkeling uit naar de cloud, zodat u beschikt over succesvalidatie van builds en het automatisch pushen van met succes samengestelde installatiekopieën naar uw containerregister. Uw afbeeldingen worden native opgebouwd in de cloud, dicht bij het register, wat een snellere implementatie mogelijk maakt.
Al uw Dockerfile-expertise is direct overdraagbaar naar ACR Tasks. U hoeft uw Dockerfiles niet te wijzigen om in de cloud te bouwen met ACR Tasks, alleen de opdracht die u uitvoert.
In deze zelfstudie, deel één van een reeks:
- De broncode van een voorbeeldtoepassing ophalen
- Een containerafbeelding maken in Azure
- Een container implementeren in Azure Container Instances
In de volgende zelfstudies leert u hoe u ACR Tasks gebruikt voor het automatisch bouwen van containerimages bij het indienen van code en updates van basisimages. Met ACR-taken kunnen ook taken bestaande uit meerdere stappen worden uitgevoerd. Hierbij wordt een YAML-bestand gebruikt om de stappen voor het bouwen, pushen en optioneel testen van meerdere containers te definiëren.
Vereisten
GitHub-account
Maak een account op https://github.com als u er nog geen hebt. In deze tutorialreeks wordt een GitHub-opslagplaats gebruikt om geautomatiseerde image builds in ACR Tasks te demonstreren.
Fork van voorbeeldopslagplaats
Gebruik vervolgens de GitHub UI om de voorbeeldopslagplaats te splitsen naar uw GitHub-account. In deze handleiding maak je een containerimage van de bron in de repository. In de volgende handleiding push je een commit naar je fork van de repository om een geautomatiseerde taak te starten.
Deze opslagplaats forken: https://github.com/Azure-Samples/acr-build-helloworld-node
Je fork klonen
Zodra u de repository hebt geforked, kloont u uw fork en opent u de map die uw lokale kloon bevat.
Kloon de opslagplaats met git, vervang <your-github-username> door uw GitHub-gebruikersnaam:
git clone https://github.com/<your-github-username>/acr-build-helloworld-node
Geef de map op waarin de broncode zich bevindt:
cd acr-build-helloworld-node
Bash-shell
De opdrachten in deze zelfstudiereeks zijn geformatteerd voor de Bash-shell. Als u liever PowerShell, de opdrachtprompt of een andere shell wilt gebruiken, moet u wellicht de regelvoortzetting en indeling van de omgevingsvariabele overeenkomstig aanpassen.
De omgeving voorbereiden op de Azure CLI
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie Aan de slag met Azure Cloud Shell voor meer informatie.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren. Als u in Windows of macOS werkt, kunt u Azure CLI uitvoeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht az login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Zie Verifiëren bij Azure met behulp van Azure CLI voor andere aanmeldingsopties.
Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Zie Extensies gebruiken en beheren met de Azure CLIvoor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
Bouwen in Azure met ACR Tasks
Nu u de broncode hebt opgehaald naar uw computer, volgt u deze stappen om een containerregister te maken en de containerinstallatiekopie te bouwen met ACR Tasks.
Om het uitvoeren van de voorbeeldopdrachten eenvoudiger te maken, worden in de zelfstudies in deze serie shell-omgevingsvariabelen gebruikt. Voer de volgende opdracht uit om de variabele ACR_NAME in te stellen. Vervang <registry-name> door een unieke naam voor uw nieuwe containerregister. De registernaam moet uniek zijn binnen Azure, mag alleen uit kleine letters bestaan, en moet 5 tot 50 alfanumerieke tekens bevatten. De andere resources die u in de zelfstudie maakt, zijn gebaseerd op deze naam, dus u hoeft alleen deze eerste variabele te wijzigen.
ACR_NAME=<registry-name>
Nu de omgevingsvariabele van de containerregister is ingevuld, kunt u de rest van de opdrachten in de zelfstudie kopiëren en plakken zonder waarden te bewerken. Voer de volgende opdrachten uit om een resourcegroep en containerregister te maken.
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 u een register heeft, kunt u ACR Tasks gebruiken om een containerafbeelding te maken van de voorbeeldcode. Voer de opdracht az acr build uit om een snelle taak uit te voeren.
Notitie
De Dockerfile die in het volgende voorbeeld wordt gebruikt, is afhankelijk van een openbare basiscontainerimage van Docker Hub. Om de betrouwbaarheid te verbeteren bij het gebruik van openbare inhoud, importeert en beheert u de installatiekopieën in een persoonlijk Azure-containerregister en werkt u uw Dockerfile bij om uw privé beheerde basisinstallatiekopieën te gebruiken. Meer informatie over het werken met openbare afbeeldingen.
az acr build --registry $ACR_NAME --image helloacrtasks:v1 --file /path/to/Dockerfile /path/to/build/context.
De uitvoer van de opdracht az acr build is vergelijkbaar met de volgende. U ziet het uploaden van de broncode (de 'context') naar Azure en de details van de docker build-bewerking die ACR Tasks uitvoert in de cloud. Omdat ACR-taken docker build gebruiken om uw images te bouwen, hoeven er geen wijzigingen te worden aangebracht in uw Dockerfiles om ACR-taken direct te kunnen gebruiken.
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
Bijna aan het einde van de uitvoer geeft ACR Tasks de afhankelijkheden weer die het heeft ontdekt voor uw image. ACR Tasks stelt in staat om de opbouw van installatiekopieën te automatiseren bij updates van basisinstallatiekopieën, bijvoorbeeld wanneer een basisinstallatiekopie wordt bijgewerkt met OS- en frameworkpatches. Later in deze zelfstudiereeks leer je meer over de ondersteuning van ACR Tasks voor updates van basisafbeeldingen.
Implementeren naar Azure Container Instances
ACR Tasks pusht met succes samengestelde installatiekopieën standaard naar het register, zodat u ze onmiddellijk vanuit het register kunt implementeren.
In deze sectie maakt u een Azure Key Vault en service-principal. Vervolgens implementeert u de container naar Azure Container Instances (ACI) met de referenties van de service-principal.
Registerverificatie configureren
Alle productiescenario's moeten service-principals gebruiken voor toegang tot een Azure-containerregister. Serviceprincipals maken het mogelijk om rolgebaseerde toegangscontrole te bieden aan uw containerafbeeldingen. U kunt bijvoorbeeld een service-principal configureren met alleen pull-toegang tot een register.
Maak een sleutelkluis.
Als u nog geen kluis hebt in Azure Key Vault, kunt u met de volgende opdrachten één maken met de Azure CLI.
AKV_NAME=$ACR_NAME-vault
az keyvault create --resource-group $RES_GROUP --name $AKV_NAME
Een service-principal maken en referenties opslaan
U moet nu een service-principal maken en de referenties ervan opslaan in uw sleutelkluis.
Gebruik de opdracht az ad sp create-for-rbac om de service-principal te maken en opdracht az keyvault secret set om het wachtwoord van de service-principal op te slaan in de kluis. Gebruik Azure CLI versie 2.25.0 of hoger voor deze opdrachten:
De juiste rol die moet worden gebruikt in de roltoewijzing, is afhankelijk van of het register al dan niet is ingeschakeld voor ABAC.
# 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)
Het --role argument in de voorgaande opdracht configureert de service-principal met een ingebouwde rol om deze alleen-pull-toegang tot het register te verlenen. De juiste rol die moet worden gebruikt in de roltoewijzing, is afhankelijk van of het register al dan niet is ingeschakeld voor ABAC, waarbij abAC-registers de Container Registry Repository Reader rol en niet-ABAC-registers nodig hebben die de AcrPull rol nodig hebben.
Als u zowel push- als pull-toegang wilt verlenen, wijzigt u het --role argument in de Container Registry Repository Writer rol voor registers waarvoor ABAC is ingeschakeld of de AcrPush rol voor niet-ABAC-registers.
Voor meer informatie over Microsoft Entra ABAC, zie Microsoft Entra-machtigingen voor opslagplaatsen.
Vervolgens slaat u de appId van de service-principal op in de kluis. Deze ID is de gebruikersnaam die u voor verificatie doorgeeft aan Azure Container Registry:
# 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)
U hebt een Azure Key Vault gemaakt en er twee geheimen in opgeslagen:
-
$ACR_NAME-pull-usr: de service principal-ID, voor gebruik als de gebruikersnaam van het containerregister. -
$ACR_NAME-pull-pwd: het service principal-wachtwoord, voor gebruik als het wachtwoord van het containerregister.
U kunt nu op naam naar deze geheimen verwijzen wanneer u of uw toepassingen en services afbeeldingen uit de registry halen.
Een container implementeren met Azure CLI
Nu de referenties voor de service-principal zijn opgeslagen als Azure Key Vault-sleutels, kunnen uw toepassingen en services deze gebruiken voor toegang tot uw privéregister.
Voer het volgende commando az container create uit om een containerinstantie uit te rollen. De opdracht maakt gebruik van de referenties van de service-principal die zijn opgeslagen in Azure Key Vault om uw containerregister te verifiëren.
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
De waarde --dns-name-label moet uniek zijn binnen Azure, dus de voorgaande opdracht voegt de naam van uw containerregister toe aan het label van de DNS-naam van de container. De uitvoer van de opdracht geeft bijvoorbeeld de Fully Qualified Domain Name (FQDN) van de container weer:
FQDN
----------------------------------------------
acr-tasks-myregistry.eastus.azurecontainer.io
Let op de FQDN van de container; u gaat deze gebruiken in de volgende sectie.
De implementatie controleren
Als u de opstartprocedure van de container wilt bekijken, gebruikt u de opdracht az container attach:
az container attach --resource-group $RES_GROUP --name acr-tasks
De az container attach-uitvoer geeft eerst de status van de container weer terwijl de afbeelding wordt opgehaald en gestart, en verbindt vervolgens de STDOUT en STDERR van je lokale console met die van de container.
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
Wanneer Server running at http://localhost:80 wordt weergegeven, gaat u naar de FQDN van de container in de browser om de actieve toepassing weer te geven. De FQDN had moeten verschijnen in de uitvoer van de opdracht az container create die u in de vorige sectie hebt uitgevoerd.
Als u de console wilt loskoppelen van de container, klikt u op Control+C.
Middelen opschonen
Stop de containerinstantie met de opdracht az container delete:
az container delete --resource-group $RES_GROUP --name acr-tasks
Als u alle resources wilt verwijderen die u in deze zelfstudie hebt gemaakt, met inbegrip van het containerregister, de sleutelkluis en de service-principal, geeft u de volgende opdrachten. Deze resources worden echter gebruikt in de volgende zelfstudie in de reeks. U kunt ze dus bewaren als u direct verdergaat met de volgende zelfstudie.
az group delete --resource-group $RES_GROUP
az ad sp delete --id http://$ACR_NAME-pull
Volgende stappen
Nu u de binnenste lus hebt getest met een quick task, configureert u een build-taak om containerinstallatiekopieën te activeren wanneer u broncode doorvoert naar een Git-opslagplaats: