Sdílet prostřednictvím


Rychlý start: Vytvoření privátního registru kontejneru pomocí Azure CLI

Azure Container Registry je služba privátního registru pro vytváření, ukládání a správu imagí kontejnerů a souvisejících artefaktů. V tomto rychlém startu vytvoříte instanci registru kontejneru Azure pomocí Azure CLI. Pak pomocí příkazů Dockeru nasdílejte image kontejneru do registru a nakonec stáhněte a spusťte image z registru.

Tento rychlý start vyžaduje, abyste spustili Azure CLI (doporučuje se verze 2.0.55 nebo novější). Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalovat nebo upgradovat, podívejte se na Install Azure CLI.

Musíte mít také místně nainstalovaný Docker. Docker nabízí balíčky pro snadnou konfiguraci Dockeru v libovolném systému macOS, Windows nebo Linux.

Vzhledem k tomu, že Azure Cloud Shell neobsahuje všechny požadované komponenty Dockeru ( dockerd démon), nemůžete pro účely tohoto rychlého startu použít Cloud Shell.

Vytvoření skupiny zdrojů

Vytvořte skupinu prostředků s využitím příkazu az group create. Skupina prostředků Azure je logický kontejner, do kterého se nasazují a spravují prostředky Azure.

Následující příklad vytvoří skupinu prostředků s názvem myResourceGroup v lokaci eastus.

az group create --name myResourceGroup --location eastus

Konfigurace parametrů pro registr kontejneru

V tomto rychlém startu vytvoříte standardní registr, který stačí pro většinu pracovních postupů služby Azure Container Registry. Podrobnosti o dostupných úrovních služby najdete v tématu Úrovně služby Container Registry.

Vytvořte instanci ACR pomocí příkazu az acr create . Název registru musí být v rámci Azure jedinečný a musí obsahovat 5 až 50 malých alfanumerických znaků. V následujícím příkladu se používá mycontainerregistry . Aktualizujte tuto položku na jedinečnou hodnotu.

Konfigurace možnosti názvu domény (DNL)

Funkce DNL (Domain Name Label) posiluje zabezpečení tím, že brání útokům na převzetí subdomény názvů DNS registru. K těmto útokům dochází při odstranění registru a jiná entita znovu použije stejný název registru, což může způsobit, že podřízené odkazy se přetahují z registru znovu vytvořeného jinou entitou.

DNL to řeší připojením jedinečné hodnoty hash k názvu DNS registru. Tím se zajistí, že i když je stejný název registru znovu použit jinou entitou, názvy DNS se budou lišit kvůli jedinečné hodnotě hash. Tím se zajistí, aby vaše následné odkazy neúmyslně neukazovaly na registr, který znovu vytvořila jiná entita.

Při vytváření registru z příkazu az acr create můžete zadat volitelný příznak --dnl-scope a zvolit z dostupných možností:

  • Unsecure: Vytvoří název DNS as-isna základě názvu registru (např. contosoacrregistry.azurecr.io). Tato možnost neobsahuje ochranu DNL.
  • TenantReuse: Připojí jedinečnou hodnotu hash na základě názvu tenanta a registru a zajistí, že název DNS je v rámci tenanta jedinečný.
  • SubscriptionReuse: Připojí jedinečnou hodnotu hash na základě názvu předplatného, tenanta a registru a zajistí, aby byl název DNS v rámci předplatného jedinečný.
  • ResourceGroupReuse: Připojí jedinečnou hodnotu hash na základě skupiny prostředků, předplatného, tenanta a názvu registru a zajistí, že název DNS je v rámci skupiny prostředků jedinečný.
  • NoReuse: Vygeneruje jedinečný název DNS s jedinečnou hodnotou hash při každém vytvoření registru bez ohledu na jiné faktory, aby byl název DNS vždy jedinečný.

Poznámka:

Neměnná konfigurace: Obor DNL vybraný během vytváření registru je trvalý a nelze ho později změnit. Tím zajistíte konzistentní chování DNS a zabráníte přerušení podřízených odkazů.

Důsledky názvů DNS pro možnosti DNL

Formát názvu DNS: Pro všechny možnosti s povolenou hodnotou DNL, kromě Unsecure, se název DNS řídí formátem registryname-hash.azurecr.io, kde pomlčka (-) slouží jako oddělovač hash. Aby nedocházelo ke konfliktům, není v názvu registru povolena pomlčka (-). Například registr pojmenovaný contosoacrregistry s rozsahem DNL TenantReuse bude mít název DNS, jako je contosoacrregistry-e7ggejfuhzhgedc8.azurecr.io.

Podřízené odkazy: Název DNS se může lišit od názvu registru, což vyžaduje aktualizace v podřízených souborech, jako jsou Dockerfiles, Kubernetes YAML a Helm charty, aby odrážely úplný název DNS s hash DNL. Pokud například chcete, aby podřízený soubor Dockerfile odkazoval na registr s oborem contosoacrregistryTenantReuse DNL, museli byste aktualizovat odkaz na contosoacrregistry-e7ggejfuhzhgedc8.azurecr.io v podřízeném souboru Dockerfile.

Konfigurace režimu oprávnění přiřazení role

Volitelně můžete pomocí parametru --role-assignment-mode určit režim přiřazení role registru. Tato možnost určuje, jak se pro registr spravuje řízení přístupu na základě role (RBAC) a přiřazení rolí Microsoft Entra, včetně použití řízení přístupu na základě atributů Microsoft Entra (ABAC) pro oprávnění úložiště Microsoft Entra.

Zadejte rbac-abac pro tento parametr, abyste zachovali standardní přiřazení rolí Microsoft Entra RBAC a volitelně použili podmínky Microsoft Entra ABAC pro jemně odstupňované řízení přístupu na úrovni úložiště.

Další informace o této možnosti naleznete v tématu Řízení přístupu na základě atributu Microsoft Entra (ABAC) pro oprávnění úložiště.

Vytvoření registru kontejneru

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

Po vytvoření registru se výstup podobá následujícímu:

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

Všimněte si loginServer ve výstupu, což je plně kvalifikovaný název registru (všechna malá písmena). Ve zbývající části tohoto rychlého startu <registry-name> je zástupný symbol pro název registru kontejneru a <login-server> představuje zástupný symbol pro název přihlašovacího serveru registru.

Návod

V tomto rychlém startu vytvoříte standardní registr, který stačí pro většinu pracovních postupů služby Azure Container Registry. Pro vyšší propustnost úložiště a image a možnosti, jako je připojení pomocí privátního koncového bodu, je k dispozici možnost cenového plánu Premium (SKU). Podrobnosti o úrovních služeb (SKU) najdete v tématu Funkce a omezení skladové položky služby Azure Container Registry.

Přihlášení k registru

Před nahráváním a stahováním obrazů kontejneru se musíte přihlásit do registru. K tomu použijte příkaz az acr login . Při přihlašování pomocí Azure CLI zadejte pouze název zdroje registru. Nepoužívejte plně kvalifikovaný název přihlašovacího serveru.

az acr login --name <registry-name>

Příklad:

az acr login --name mycontainerregistry

Příkaz po dokončení vrátí zprávu Login Succeeded (Přihlášení bylo úspěšné).

Nahrání obrazu do registru

Pokud chcete odeslat image do registru kontejneru Azure, musíte nejprve mít image. Pokud ještě nemáte žádné místní image kontejneru, spusťte následující příkaz docker pull a stáhněte existující veřejnou image. V tomto příkladu stáhněte hello-world image ze služby Microsoft Container Registry.

docker pull mcr.microsoft.com/hello-world

Než budete moct odeslat image do registru, musíte ji označit pomocí značky Dockeru s plně kvalifikovaným názvem přihlašovacího serveru registru.

  • Formát názvu přihlašovacího serveru pro chráněné registry DNL (Domain Name Label), zahrnující jedinečný hash názvu DNS, je mycontainerregistry-abc123.azurecr.io.
  • Formát názvu přihlašovacího Unsecure serveru pro registry vytvořené s možností DNL je mycontainerregistry.azurecr.io.

Pokud například vytvoříte registr s oborem Tenant Reuse DNL, přihlašovací server může vypadat jako mycontainerregistry-abc123.azurecr.io, kde je v názvu DNS obsažen hash. Pokud vytvoříte registr s Unsecure možností DNL, přihlašovací server vypadá jako mycontainerregistry.azurecr.iobez hodnoty hash.

Označte image pomocí příkazu docker tag s přihlašovacím serverem vašeho registru. Pro účely tohoto rychlého startu označte obrázek značkou hello-worldv1.

Příklad příkazu, který označí image pro registr chráněný dnL:

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

Příklad příkazu pro označení image pro registr jiného typu než DNL:

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

Nakonec pomocí docker push nasdílejte image do instance registru. Nahraďte <login-server> názvem přihlašovacího serveru vaší instance registru. Tento příklad vytvoří úložiště hello-world obsahující hello-world:v1 image.

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

Po nahrání image do registru kontejneru odeberte hello-world:v1 image z místního prostředí Dockeru pomocí příkazu docker rmi . Tento příkaz neodebere image z úložiště hello-world ve vašem registru kontejneru Azure.

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

Seznam imagí kontejnerů

Následující příklad uvádí úložiště ve vašem registru:

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

Výstup:

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

Následující příklad uvádí značky v úložišti hello-world .

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

Výstup:

Result
--------
v1

Spuštění image z registru

Teď můžete načíst a spustit image kontejneru hello-world:v1 z registru kontejneru pomocí příkazu Docker run:

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

Příklad výstupu:

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.

[...]

Vyčistěte zdroje

Pokud už je nepotřebujete, můžete pomocí příkazu az group delete odebrat skupinu prostředků, registr kontejneru a image kontejneru uložené tam.

az group delete --name myResourceGroup

Další kroky

V tomto rychlém startu jste vytvořili Službu Azure Container Registry pomocí Azure CLI, odeslali do registru image kontejneru a stáhli a spustili image z registru. Pokračujte kurzy ke službě Azure Container Registry, abyste se podrobněji podívali na ACR.