Dela via


Snabbstart: Skapa ett privat containerregister med hjälp av Azure CLI

Azure Container Registry är en privat registertjänst för att skapa, lagra och hantera containeravbildningar och relaterade artefakter. I den här snabbstarten skapar du en Azure-containerregisterinstans med Azure CLI. Använd sedan Docker-kommandon för att skicka en containeravbildning till registret, och hämta och kör slutligen avbildningen från registret.

För den här snabbstarten krävs att du kör Azure CLI (version 2.0.55 eller senare rekommenderas). Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

Du måste också ha Docker installerat lokalt. Docker innehåller paket som enkelt kan konfigurera Docker på ett macOS-, Windows- eller Linux-system.

Eftersom Azure Cloud Shell inte innehåller alla nödvändiga Docker-komponenter (dockerd-daemon), kan du inte använda Cloud Shell för denna snabbstart.

Skapa en resursgrupp

Skapa en resursgrupp med kommandot az group create. En Azure-resursgrupp är en logisk container där Azure-resurser distribueras och hanteras.

I följande exempel skapas en resursgrupp med namnet myResourceGroup i regionen eastus.

az group create --name myResourceGroup --location eastus

Konfigurera parametrar för ett containerregister

I den här snabbstarten skapar du ett Standard-register , vilket räcker för de flesta Azure Container Registry-arbetsflöden. Mer information om tillgängliga tjänstnivåer finns i Tjänstnivåer för containerregister.

Skapa en ACR-instans med hjälp av kommandot az acr create. Det registernamnet måste vara unikt inom Azure och innehålla 5–50 små alfanumeriska tecken. I följande exempel används mycontainerregistry . Uppdatera det här till ett unikt värde.

Konfigurera alternativet för domännamnetikett (DNL)

Funktionen Domännamnsetikett (DNL) stärker säkerheten genom att förhindra underdomänövertagandeattacker av register-DNS-namn. Dessa attacker inträffar när ett register tas bort och en annan entitet återanvänder samma registernamn, vilket kan leda till att underordnade referenser hämtas från registret som återskapas av den andra entiteten.

DNL åtgärdar detta genom att lägga till en unik hash till registrets DNS-namn. Detta säkerställer att även om samma registernamn återanvänds av en annan entitet skiljer sig DNS-namnen åt på grund av den unika hashen. Detta skyddar dina underordnade referenser från att oavsiktligt peka på registret som återskapats av den andra entiteten.

När du skapar ett register från kommandot az acr create kan du ange den valfria flaggan --dnl-scope och välja bland de tillgängliga alternativen:

  • Unsecure: Skapar DNS-namnet as-is, baserat på registernamnet (t.ex. contosoacrregistry.azurecr.io). Det här alternativet inkluderar inte DNL-skydd.
  • TenantReuse: Lägger till en unik hash baserat på klientorganisationen och registernamnet, vilket säkerställer att DNS-namnet är unikt i klientorganisationen.
  • SubscriptionReuse: Lägger till en unik hash baserat på prenumerationen, klientorganisationen och registernamnet, vilket säkerställer att DNS-namnet är unikt i prenumerationen.
  • ResourceGroupReuse: Lägger till en unik hash baserat på resursgruppen, prenumerationen, klientorganisationen och registernamnet, vilket säkerställer att DNS-namnet är unikt i resursgruppen.
  • NoReuse: Genererar ett unikt DNS-namn med en unik hash varje gång registret skapas, oavsett andra faktorer, vilket säkerställer att DNS-namnet alltid är unikt.

Anmärkning

Oföränderlig konfiguration: DNL-omfånget som valdes när registret skapades är permanent och kan inte ändras senare. Detta säkerställer konsekvent DNS-beteende och förhindrar avbrott i underordnade referenser.

DNS-namnkonsekvenser för DNL-alternativ

DNS-namnformat: För alla DNL-aktiverade alternativ utom Unsecureföljer DNS-namnet formatet registryname-hash.azurecr.io, där strecket (-) fungerar som hash-delineator. För att undvika konflikter tillåts inte bindestreck (-) i registernamnet. Till exempel har ett register med namnet contosoacrregistry med TenantReuse DNL-omfånget ett DNS-namn som contosoacrregistry-e7ggejfuhzhgedc8.azurecr.io.

Underordnade referenser: DNS-namnet kan skilja sig från registernamnet, vilket kräver uppdateringar i underordnade filer som Dockerfiles, Kubernetes YAML och Helm-diagram för att återspegla det fullständiga DNS-namnet med DNL-hashen. Om du till exempel vill att din underordnade Dockerfile ska referera till ett register med namnet contosoacrregistry med TenantReuse DNL-omfånget, måste du uppdatera referensen till contosoacrregistry-e7ggejfuhzhgedc8.azurecr.io i din underordnade Dockerfile.

Konfigurera behörighetsläge för rolltilldelning

Du kan också använda parametern --role-assignment-mode för att ange rolltilldelningsläget för registret. Det här alternativet avgör hur rollbaserad åtkomstkontroll i Microsoft Entra (RBAC) och rolltilldelningar hanteras för registret, inklusive användning av Microsoft Entra-attributbaserad åtkomstkontroll (ABAC) för Microsoft Entra-lagringsplatsbehörigheter.

Ange rbac-abac för den här parametern att behålla standardrolltilldelningar för Microsoft Entra Entra RBAC, samtidigt som du kan använda Microsoft Entra ABAC-villkor för detaljerad åtkomstkontroll på lagringsplatsnivå.

Mer information om det här alternativet finns i Microsoft Entra-attributbaserad åtkomstkontroll (ABAC) för lagringsplatsbehörigheter.

Skapa ett containerregister

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

När registret har skapats ser utdata ut ungefär så här:

{
  "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"
}

Anteckna loginServer i utdata, vilket är de fullständigt kvalificerade registernamnet (endast gemener). Under resten av den här snabbstarten <registry-name> är en platshållare för containerregistrets namn och <login-server> är en platshållare för registrets inloggningsservernamn.

Dricks

I den här snabbstarten skapar du ett Standard-register , vilket räcker för de flesta Azure Container Registry-arbetsflöden. Välj andra nivåer för ökat lagrings- och bilddataflöde och funktioner som anslutning med hjälp av en privat slutpunkt. Mer information om tillgängliga tjänstnivåer (SKU:er) finns i Tjänstnivåer för containerregister.

Logga in till registret

Innan du skickar och hämtar containeravbildningar måste du logga in i registret. Det gör du med hjälp av kommandot az acr login. Ange endast namnet på registerresursen när du loggar in med Azure CLI. Använd inte det fullständigt kvalificerade inloggningsservernamnet.

az acr login --name <registry-name>

Exempel:

az acr login --name mycontainerregistry

Kommandot returnerar meddelandet Login Succeeded när det har slutförts.

Push-överför avbildningen till registret

Innan du kan pusha en avbildning till Azure Container Registry behöver du först en sådan. Om du ännu inte har några lokala containeravbildningar kör du följande docker pull-kommando för att hämta en befintlig offentlig avbildning. I det här exemplet hämtar du avbildningen hello-world från Microsoft Container Registry.

docker pull mcr.microsoft.com/hello-world

Innan du kan skicka en avbildning till registret måste du tagga den med hjälp av docker-taggen med det fullständigt kvalificerade namnet på registerinloggningsservern.

  • Inloggningsserverns namnformat för domännamnsetiketter (DNL) skyddade register med en unik DNS-namnhash som ingår är mycontainerregistry-abc123.azurecr.io.
  • Namnformatet för inloggningsservern för register som skapats med Unsecure DNL-alternativet är mycontainerregistry.azurecr.io.

Om ditt register till exempel har skapats med Tenant Reuse DNL-omfånget kan inloggningsservern se ut som mycontainerregistry-abc123.azurecr.io med en hash i DNS-namnet. Om registret skapades med Unsecure DNL-alternativet skulle inloggningsservern se ut som mycontainerregistry.azurecr.io utan hashen.

Mer information om DNL-alternativ när registret skapas och DNS-namnkonsekvenser finns i Snabbstart – Skapa register i portalen.

Exempel: Tagga en bild före push-överföring

Tagga avbildningen med hjälp av docker-taggkommandot med hjälp av registrets inloggningsserver.

Taggningsbild för ett icke-DNL-register:

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

Taggningsbild för ett DNL-aktiverat register:

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

Slutligen använder du docker push för att pusha bilden till registerinstansen. Ersätt <login-server> med inloggningsservernamnet för registerinstansen. Det här exemplet skapar lagringsplatsen hello-world, som innehåller hello-world:v1-avbildningen.

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

När du har push-överfört avbildningen till containerregistret tar du bort hello-world:v1-avbildningen från den lokala Docker-miljön. (Observera att det här docker rmi-kommandot inte tar bort avbildningen från hello-world-lagringsplatsen i Azure-containerregistret .)

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

Visa lista över containeravbildningar

I följande exempel visas lagringsplatserna i ditt register:

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

Utdata:

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

I följande exempel visas taggarna på hello-world-lagringsplatsen .

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

Utdata:

Result
--------
v1

Kör avbild från registret

Nu kan du hämta och köra hello-world:v1-containeravbildningen från containerregistret med hjälp av docker run:

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

Exempel på utdata>

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.

[...]

Rensa resurser

När resursgruppen inte längre behövs kan du använda kommandot az group delete till att ta bort resursgruppen, containerregistret och containeravbildningarna som är lagrade där.

az group delete --name myResourceGroup

Nästa steg

I den här snabbstarten skapade du ett Azure Container Registry med Azure CLI, push-överförde en containeravbildning till registret och hämtade och körde avbildningen från registret. Fortsätt till självstudien om Azure Container Registry om du vill titta närmare på ACR.