Delen via


Quickstart: Een privécontainerregister maken met behulp van de Azure CLI

Azure Container Registry is een privéregisterservice voor het bouwen, opslaan en beheren van containerinstallatiekopieën en gerelateerde artefacten. In deze quickstart maakt u een Azure Container Registry-exemplaar met de Azure CLI. Gebruik vervolgens Docker-opdrachten om een containerinstallatiekopie naar het register pushen, waarna u de installatiekopie ophaalt en uitvoert vanuit het register.

Voor deze snelstart moet u Azure CLI uitvoeren (versie 2.0.55 of later aanbevolen). Voer az --version uit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.

Docker moet ook lokaal zijn geïnstalleerd. Docker biedt pakketten die eenvoudig Docker configureren op elk macOS-, Windows- of Linux-systeem.

Omdat Azure Cloud-Shell niet alle vereiste Docker-onderdelen bevat (de dockerd-daemon), kunt u de Cloud Shell niet voor deze snelstart gebruiken.

Een brongroep maken

Een resourcegroep maken met de opdracht az group create. Een Azure-resourcegroep is een logische container waarin Azure-resources worden geïmplementeerd en beheerd.

In het volgende voorbeeld wordt een resourcegroep met de naam myResourceGroup gemaakt op de locatie VS - oost.

az group create --name myResourceGroup --location eastus

Parameters voor een containerregister configureren

In deze quickstart maakt u een standaardregister . Dit is voldoende voor de meeste Azure Container Registry-werkstromen. Zie Servicelagen voor Container Registry voor meer informatie over de beschikbare servicelagen.

Maak een ACR-exemplaar met behulp van de opdracht az acr create. De registernaam moet uniek zijn binnen Azure en mag 5-50 kleine letters alfanumerieke tekens bevatten. In het volgende voorbeeld wordt mycontainerregistry gebruikt. Werk deze waarde bij naar een unieke waarde.

Optie Domain Name Label (DNL) configureren

De functie Domain Name Label (DNL) versterkt de beveiliging door overnameaanvallen van het subdomein van DNS-namen te voorkomen. Deze aanvallen treden op wanneer een register wordt verwijderd en een andere entiteit dezelfde registernaam opnieuw gebruikt, waardoor downstreamverwijzingen mogelijk worden opgehaald uit het register dat opnieuw is gemaakt door de andere entiteit.

DNL adresseert dit door een unieke hash toe te voegen aan de DNS-naam van het register. Dit zorgt ervoor dat zelfs als dezelfde registernaam opnieuw wordt gebruikt door een andere entiteit, de DNS-namen verschillen vanwege de unieke hash. Hierdoor worden uw downstreamverwijzingen beveiligd van onbedoelde verwijzingen naar het register dat opnieuw is gemaakt door de andere entiteit.

Wanneer u een register maakt met de opdracht az acr create , kunt u de optionele vlag --dnl-scope opgeven en kiezen uit de beschikbare opties:

  • Unsecure: maakt de DNS-naam as-isop basis van de registernaam (bijvoorbeeld contosoacrregistry.azurecr.io). Deze optie omvat geen DNL-beveiliging.
  • TenantReuse: Voegt een unieke hash toe op basis van de tenant- en registernaam, zodat de DNS-naam uniek is binnen de tenant.
  • SubscriptionReuse: Voegt een unieke hash toe op basis van het abonnement, de tenant en de registernaam, zodat de DNS-naam uniek is binnen het abonnement.
  • ResourceGroupReuse: Voegt een unieke hash toe op basis van de resourcegroep, het abonnement, de tenant en de registernaam, zodat de DNS-naam uniek is binnen de resourcegroep.
  • NoReuse: Genereert een unieke DNS-naam met een unieke hash telkens wanneer het register wordt gemaakt, ongeacht andere factoren, zodat de DNS-naam altijd uniek is.

Opmerking

Onveranderbare configuratie: het DNL-bereik dat is geselecteerd tijdens het maken van het register is permanent en kan later niet meer worden gewijzigd. Dit zorgt voor consistent DNS-gedrag en voorkomt onderbrekingen van downstreamverwijzingen.

Gevolgen voor DNS-naam van DNL-opties

DNS-naamnotatie: voor alle DNL-opties behalve Unsecure, volgt de DNS-naam de indeling registryname-hash.azurecr.io, waarbij het streepje (-) fungeert als de hashdelineator. Om conflicten te voorkomen, is streepje (-) niet toegestaan in de registernaam. Een register met de contosoacrregistry naam TenantReuse DNL-bereik heeft bijvoorbeeld een DNS-naam zoals contosoacrregistry-e7ggejfuhzhgedc8.azurecr.io.

Downstreamverwijzingen: De DNS-naam kan afwijken van de registernaam, waarbij updates in downstreambestanden zoals Dockerfiles, Kubernetes YAML en Helm-grafieken nodig zijn om de volledige DNS-naam met de DNL-hash weer te geven. Als u bijvoorbeeld wilt dat uw downstream Dockerfile naar een register met de contosoacrregistry naam TenantReuse DNL-bereik verwijst, moet u de verwijzing bijwerken naar contosoacrregistry-e7ggejfuhzhgedc8.azurecr.io in uw downstream Dockerfile.

De roltoewijzingsmodus configureren

U kunt eventueel de --role-assignment-mode parameter gebruiken om de roltoewijzingsmodus van het register op te geven. Met deze optie wordt bepaald hoe op rollen gebaseerd toegangsbeheer (RBAC) van Microsoft Entra en roltoewijzingen worden beheerd voor het register, waaronder het gebruik van op kenmerken gebaseerd toegangsbeheer (ABAC) van Microsoft Entra voor machtigingen voor Microsoft Entra-opslagplaatsen.

Geef rbac-abac voor deze parameter op om standaardroltoewijzingen van Microsoft Entra RBAC te behouden, terwijl u optioneel Microsoft Entra ABAC-voorwaarden toepast voor gedetailleerd toegangsbeheer op opslagplaatsniveau.

Voor meer informatie over deze optie, zie Microsoft Entra-attribuutgebaseerde toegangsbeheer (ABAC) voor machtigingen van opslagplaatsen.

Een containerregister maken

az acr create --resource-group myResourceGroup \
  --name mycontainerregistry --sku Standard \
  --role-assignment-mode 'rbac-abac' \
  --dnl-scope TenantReuse

Wanneer het register is gemaakt, is de uitvoer vergelijkbaar met het volgende:

{
  "adminUserEnabled": false,
  "creationDate": "2019-01-08T22:32:13.175925+00:00",
  "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/mycontainerregistry",
  "location": "eastus",
  "loginServer": "mycontainerregistry-e7ggejfuhzhgedc8.azurecr.io",
  "name": "mycontainerregistry",
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "sku": {
    "name": "Standard",
    "tier": "Standard"
  },
  "status": null,
  "storageAccount": null,
  "tags": {},
  "type": "Microsoft.ContainerRegistry/registries",
  "roleAssignmentMode": "AbacRepositoryPermissions",
  "autoGeneratedDomainNameLabelScope": "TenantReuse"
}

Noteer loginServer in de uitvoer. Dit is de volledig gekwalificeerde registernaam (in kleine letters). In de rest van deze quickstart wordt <registry-name> gebruikt als tijdelijke aanduiding voor de naam van het containerregister en wordt <login-server> gebruikt als tijdelijke aanduiding voor naam van de aanmeldingsserver voor het register.

Aanbeveling

In deze quickstart maakt u een standaardregister . Dit is voldoende voor de meeste Azure Container Registry-werkstromen. Kies andere lagen voor meer opslag- en afbeeldingsdoorvoer en mogelijkheden, zoals verbinding met een privé-eindpunt. Zie Servicelagen voor containerregister voor meer informatie over de beschikbare servicelagen (SKU's).

Aanmelden bij register

Voordat u installatiekopieën van containers gaat pushen en ophalen, moet u zich aanmelden bij het register. Gebruik hiervoor de opdracht az acr login. Geef alleen de naam van de registerresource op wanneer u zich aanmeldt met de Azure CLI. Gebruik niet de volledig gekwalificeerde aanmeldingsservernaam.

az acr login --name <registry-name>

Voorbeeld:

az acr login --name mycontainerregistry

Met de opdracht wordt een Login Succeeded-bericht geretourneerd nadat deze is voltooid.

Installatiekopie pushen naar register

Als u een installatiekopie naar een Azure Container Registry wilt pushen, moet u eerst over een installatiekopie beschikken. Als u nog geen lokale containerinstallatiekopieën hebt, voert u de volgende docker-pull-opdracht uit om een bestaande openbare installatiekopie op te halen. Voor dit voorbeeld haalt u de hello-world installatiekopie op uit Microsoft Container Registry.

docker pull mcr.microsoft.com/hello-world

Voordat u een image naar uw register kunt pushen, moet u deze taggen met de docker tag met de volledig gekwalificeerde naam van uw inlogserver van het register.

  • De indeling van de aanmeldingsservernaam voor DNL-beveiligde registers (Domain Name Label), met daarin een unieke DNS-naam-hash, is mycontainerregistry-abc123.azurecr.io.
  • De indeling van de aanmeldingsservernaam voor registers die zijn gemaakt met de Unsecure DNL-optie is mycontainerregistry.azurecr.io.

Als uw register bijvoorbeeld is gemaakt met het Tenant Reuse DNL-bereik, kan de aanmeldingsserver eruitzien mycontainerregistry-abc123.azurecr.io met een hash in de DNS-naam. Als uw register is gemaakt met de Unsecure DNL-optie, ziet de aanmeldingsserver eruit als mycontainerregistry.azurecr.io zonder de hash.

Zie Quickstart - Register maken in portal voor meer informatie over DNL-opties tijdens het maken van het register en de gevolgen voor DNS-namen.

Voorbeeld: Een afbeelding taggen voordat deze wordt gepusht

Tag de afbeelding met behulp van de docker tag-opdracht via de login server van uw register.

Label afbeelding voor een niet-DNL-registratie:

docker tag mcr.microsoft.com/hello-world mycontainerregistry.azurecr.io/hello-world:v1

Het taggen van een afbeelding voor een register met DNL-functionaliteit.

docker tag mcr.microsoft.com/hello-world mycontainerregistry-abc123.azurecr.io/hello-world:v1

Gebruik ten slotte docker push om de installatiekopie naar het registerexemplaar te pushen. Vervang <login-server> door de aanmeldingsnaam van het registerexemplaar. In dit voorbeeld wordt de hello-world-opslagplaats met de hello-world:v1-installatiekopie gemaakt.

docker push <login-server>/hello-world:v1

Nadat u de installatiekopie naar uw containerregister hebt gepusht, verwijdert u de hello-world:v1-installatiekopie uit uw lokale Docker-omgeving. (Houd er rekening mee dat deze docker rmi-opdracht de image niet verwijdert uit de hello-world-opslagplaats in uw Azure-containerregister.)

docker rmi <login-server>/hello-world:v1

Containerinstallatiekopieën opvragen

In het volgende voorbeeld worden de opslagplaatsen in uw register vermeld:

az acr repository list --name <registry-name> --output table

Uitvoer:

Result
----------------
hello-world

In het volgende voorbeeld worden de tags in de hello-world-opslagplaats vermeld.

az acr repository show-tags --name <registry-name> --repository hello-world --output table

Uitvoer:

Result
--------
v1

Installatiekopie vanuit register uitvoeren

U kunt nu de containerinstallatiekopie hello-world:v1 uit het containerregister ophalen en deze uitvoeren met behulp van docker run:

docker run <login-server>/hello-world:v1  

Voorbeelduitvoer:

Unable to find image 'mycontainerregistry.azurecr.io/hello-world:v1' locally
v1: Pulling from hello-world
Digest: sha256:662dd8e65ef7ccf13f417962c2f77567d3b132f12c95909de6c85ac3c326a345
Status: Downloaded newer image for mycontainerregistry.azurecr.io/hello-world:v1

Hello from Docker!
This message shows that your installation appears to be working correctly.

[...]

Resources opschonen

U kunt de opdracht az group delete gebruiken om de resourcegroep, het containerregister en de daar opgeslagen containerinstallatiekopieën te verwijderen wanneer u ze niet meer nodig hebt.

az group delete --name myResourceGroup

Volgende stappen

In deze quickstart hebt u een Azure Container Registry gemaakt met de Azure-CLI. U hebt een containerinstallatiekopie naar het register gepusht en de installatiekopie uit het register opgehaald en uitgevoerd. Ga verder met de zelfstudies voor Azure Container Registry om meer te leren over ACR.