Informace o registrech, úložištích a artefaktech

Tento článek představuje klíčové koncepty registrů kontejnerů, úložišť a imagí kontejnerů a souvisejících artefaktů.

Registry, úložiště a artefakty

Registr

Registr kontejneru je služba, která ukládá a distribuuje image kontejnerů a související artefakty. Docker Hub je příkladem veřejného registru kontejneru, který slouží jako obecný katalog imagí kontejnerů Dockeru. Azure Container Registry poskytuje uživatelům přímou kontrolu nad obsahem kontejneru s integrovaným ověřováním, geografickou replikací podporující globální distribuci a spolehlivostí pro nasazení blízko sítě, konfiguraci virtuální sítě s Private Link, uzamčením značek a mnoha dalšími vylepšenými funkcemi.

Kromě imagí kontejnerů kompatibilních s Dockerem Azure Container Registry podporuje celou řadu artefaktů obsahu, včetně grafů Helm a formátů obrázků OCI (Open Container Initiative).

Repository

Úložiště je kolekce imagí kontejnerů nebo jiných artefaktů v registru, které mají stejný název, ale různé značky. Například následující tři image jsou v úložišti acr-helloworld :

  • acr-helloworld:latest
  • acr-helloworld:v1
  • acr-helloworld:v2

Názvy úložišť můžou obsahovat také obory názvů. Obory názvů umožňují identifikovat související úložiště a vlastnictví artefaktů ve vaší organizaci pomocí názvů oddělených lomítkem. Registr ale spravuje všechna úložiště nezávisle, ne jako hierarchii. Příklad:

  • marketing/kampaň10-18/web:v2
  • marketing/kampaň10-18/api:v3
  • marketing/kampaň10-18/email-sender:v2
  • product-returns/web-submission:20180604
  • product-returns/legacy-integrationor:20180715

Názvy úložišť můžou obsahovat jenom malá písmena alfanumerických znaků, tečky, pomlčky, podtržítka a lomítka.

Úplná pravidla pojmenování úložiště najdete ve specifikaci distribuce Open Container Initiative Distribution.

Artefakt

Image kontejneru nebo jiný artefakt v registru je přidružen k jedné nebo více značek, má jednu nebo více vrstev a je identifikován manifestem. Pochopení toho, jak tyto komponenty vzájemně souvisejí, vám můžou pomoct efektivně spravovat registr.

Značka

Značka obrázku nebo jiného artefaktu určuje jeho verzi. Jeden artefakt v úložišti může být přiřazen jeden nebo mnoho značek a může být také "neoznačené". To znamená, že můžete odstranit všechny značky z obrázku, zatímco data image (její vrstvy) zůstávají v registru.

Úložiště (nebo úložiště a obor názvů) plus značka definuje název image. Image můžete nasdílit a vyžádat tak, že zadáte její název v operaci nabízení nebo vyžádání. Značka latest se používá ve výchozím nastavení, pokud ji v příkazech Dockeru nezadáte.

Způsob označování imagí kontejnerů se řídí vašimi scénáři, jak je vyvíjet nebo nasazovat. Pro správu základních imagí a jedinečných značek pro nasazování imagí se například doporučuje stabilní značky. Další informace najdete v tématu Doporučení pro označování a správu verzí imagí kontejnerů.

Pravidla pojmenování značek najdete v dokumentaci k Dockeru.

Vrstva

Image kontejnerů a artefakty se skládají z jedné nebo více vrstev. Různé typy artefaktů definují vrstvy odlišně. Například v imagi kontejneru Dockeru každá vrstva odpovídá řádku v souboru Dockerfile, který definuje image:

Vrstvy image kontejneru

Artefakty v registru sdílejí společné vrstvy, což zvyšuje efektivitu úložiště. Například několik imagí v různých úložištích může mít společnou základní vrstvu ASP.NET Core, ale v registru je uložená jenom jedna kopie této vrstvy. Sdílení vrstev také optimalizuje distribuci vrstev do uzlů s několika artefakty, které sdílejí společné vrstvy. Pokud image již na uzlu obsahuje vrstvu ASP.NET Core jako základ, následné načtení jiné image odkazující na stejnou vrstvu nepřenese vrstvu do uzlu. Místo toho odkazuje na vrstvu, která už na uzlu existuje.

Kvůli zajištění zabezpečené izolace a ochrany před potenciální manipulací vrstev se vrstvy nesdílí napříč registry.

Manifest

Každá image kontejneru nebo artefakt vložený do registru kontejneru je přidružena k manifestu. Manifest vygenerovaný registrem při nasdílení obsahu jednoznačně identifikuje artefakty a určuje vrstvy.

Základní manifest pro image Linuxu hello-world vypadá přibližně takto:

{
  "schemaVersion": 2,
  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
  "config": {
    "mediaType": "application/vnd.docker.container.image.v1+json",
    "size": 1510,
    "digest": "sha256:fbf289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e"
  },
  "layers": [
    {
      "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
      "size": 977,
      "digest": "sha256:2c930d010525941c1d56ec53b97bd057a67ae1865eebf042686d2a2d18271ced"
    }
  ]
}

Manifesty úložiště můžete zobrazit pomocí příkazu Azure CLI az acr manifest list-metadata:

az acr manifest list-metadata --name <repositoryName> --registry <acrName>

Můžete například zobrazit seznam manifestů úložiště acr-helloworld:

az acr manifest list-metadata --name acr-helloworld --registry myregistry
[
  {
    "digest": "sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108",
    "tags": [
      "latest",
      "v3"
    ],
    "timestamp": "2018-07-12T15:52:00.2075864Z"
  },
  {
    "digest": "sha256:3168a21b98836dda7eb7a846b3d735286e09a32b0aa2401773da518e7eba3b57",
    "tags": [
      "v2"
    ],
    "timestamp": "2018-07-12T15:50:53.5372468Z"
  },
  {
    "digest": "sha256:7ca0e0ae50c95155dbb0e380f37d7471e98d2232ed9e31eece9f9fb9078f2728",
    "tags": [
      "v1"
    ],
    "timestamp": "2018-07-11T21:38:35.9170967Z"
  }
]

Digest manifestu

Manifesty jsou identifikovány jedinečnou hodnotou hash SHA-256 nebo hodnotou hash manifestu. Každý obrázek nebo artefakt , ať už označený nebo ne, je identifikován hodnotou hash. Hodnota digest je jedinečná, i když jsou data vrstvy artefaktu stejná jako jiná artefakty. Tento mechanismus umožňuje opakovaně odesílat identicky označené image do registru. Můžete například opakovaně odesílat myimage:latest do registru bez chyby, protože každá image je identifikována jedinečným hodnotou hash.

Artefakt můžete vyžádat z registru zadáním jeho hodnoty hash v operaci vyžádání. Některé systémy můžou být nakonfigurované tak, aby stahovaly hodnotou hash, protože zaručuje, že se načítá verze image, i když se do registru odešle identicky označená image.

Důležité

Pokud opakovaně odesíláte upravené artefakty se stejnými značkami, můžete vytvořit "osamocené" artefakty – artefakty, které nejsou označené, ale stále spotřebovávají místo v registru. Nezoznačené obrázky se nezobrazují v Azure CLI ani v Azure Portal, když vypíšete nebo zobrazíte obrázky podle značky. Jejich vrstvy ale stále existují a spotřebovávají místo v registru. Odstranění nezoznačené image uvolní místo v registru, pokud je manifest jediným nebo posledním obrázkem odkazující na určitou vrstvu. Informace o uvolnění místa používaného nezoznanými obrázky najdete v tématu Odstranění imagí kontejnerů v Azure Container Registry.

Adresování artefaktu

Pokud chcete vyřešit artefakt registru pro operace zápisu a vyžádání pomocí Dockeru nebo jiných klientských nástrojů, zkombinujte plně kvalifikovaný název registru, název úložiště (včetně cesty oboru názvů( pokud je k dispozici) a značku artefaktu nebo digest manifestu. Vysvětlení těchto termínů najdete v předchozích částech.

Adresa podle značky: [loginServerUrl]/[repository][:tag]

Adresa podle digestu: [loginServerUrl]/[repository@sha256][:digest]

Při použití Dockeru nebo jiných klientských nástrojů pro vyžádání nebo nabízení artefaktů do registru kontejneru Azure použijte plně kvalifikovanou adresu URL registru, která se označuje také jako název přihlašovacího serveru . V cloudu Azure je plně kvalifikovaná adresa URL registru kontejnerů Azure ve formátu myregistry.azurecr.io (všechna malá písmena).

Poznámka

  • V adrese URL přihlašovacího serveru registru nemůžete zadat číslo portu, například myregistry.azurecr.io:443.
  • Pokud ve svém příkazu nezadáte značku, použije se značka latest ve výchozím nastavení.

Nasdílení podle značky

Příklady:

docker push myregistry.azurecr.io/samples/myimage:20210106

docker push myregistry.azurecr.io/marketing/email-sender

Pull by tag

Příklad:

docker pull myregistry.azurecr.io/marketing/campaign10-18/email-sender:v2

Pull by manifest digest

Příklad:

docker pull myregistry.azurecr.io/acr-helloworld@sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108

Další kroky

Přečtěte si další informace o úložišti registru a podporovaných formátech obsahu v Azure Container Registry.

Naučte se nasdílení a načítání imagí z Azure Container Registry.