Over registers, opslagplaatsen en artefacten

In dit artikel worden de belangrijkste concepten van containerregisters, opslagplaatsen en containerinstallatiekopieën en gerelateerde artefacten geïntroduceerd.

Registry, repositories, and artifacts

Register

Een containerregister is een service waarmee containerinstallatiekopieën en gerelateerde artefacten worden opgeslagen en gedistribueerd. Docker Hub is een voorbeeld van een openbaar containerregister dat fungeert als een algemene catalogus met Docker-containerinstallatiekopieën. Azure Container Registry biedt gebruikers directe controle over hun containerinhoud, met geïntegreerde verificatie, geo-replicatie die wereldwijde distributie en betrouwbaarheid ondersteunt voor implementaties die zich dicht bij het netwerk bevinden, configuratie van virtuele netwerken met Private Link, tagvergrendeling en vele andere verbeterde functies.

Naast docker-compatibele containerinstallatiekopieën ondersteunt Azure Container Registry een reeks inhoudsartefacten , waaronder Helm-grafieken en OCI-indelingen (Open Container Initiative).

Opslagplaats

Een opslagplaats is een verzameling containerinstallatiekopieën of andere artefacten in een register met dezelfde naam, maar verschillende tags. De volgende drie installatiekopieën bevinden zich bijvoorbeeld in de acr-helloworld opslagplaats:

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

Namen van opslagplaatsen kunnen ook naamruimten bevatten. Met naamruimten kunt u gerelateerde opslagplaatsen en het eigendom van artefacten in uw organisatie identificeren met behulp van door slash gescheiden namen. Het register beheert echter alle opslagplaatsen onafhankelijk, niet als een hiërarchie. Bijvoorbeeld:

  • marketing/campagne10-18/web:v2
  • marketing/campaign10-18/api:v3
  • marketing/campagne10-18/email-sender:v2
  • product-returns/web-submission:20180604
  • product-returns/legacy-integrator:20180715

Namen van opslagplaatsen kunnen alleen alfanumerieke tekens in kleine letters, punten, streepjes, onderstrepingstekens en slashes bevatten.

Artefact

Een containerinstallatiekopieën of ander artefact in een register zijn gekoppeld aan een of meer tags, hebben een of meer lagen en worden geïdentificeerd door een manifest. Als u begrijpt hoe deze onderdelen zich met elkaar verhouden, kunt u uw register effectief beheren.

Tag

De tag voor een afbeelding of ander artefact geeft de versie aan. Aan één artefact in een opslagplaats kan een of meer tags worden toegewezen en kan ook 'zonder tag' worden aangegeven. Dat wil gezegd, u kunt alle tags uit een installatiekopieën verwijderen, terwijl de gegevens van de installatiekopieën (de lagen) in het register blijven staan.

De opslagplaats (of opslagplaats en naamruimte) plus een tag definieert de naam van een installatiekopieën. U kunt een installatiekopie pushen en ophalen door de naam op te geven in de push- of pull-bewerking. De tag latest wordt standaard gebruikt als u er geen opgeeft in uw Docker-opdrachten.

Hoe u containerinstallatiekopieën tagt, wordt begeleid door uw scenario's om ze te ontwikkelen of te implementeren. Stabiele tags worden bijvoorbeeld aanbevolen voor het onderhouden van uw basisinstallatiekopieën en unieke tags voor het implementeren van installatiekopieën. Zie Aanbevelingen voor het taggen en versiebeheer van containerinstallatiekopieën voor meer informatie.

Zie de Docker-documentatie voor labelnamen.

Laag

Containerinstallatiekopieën en artefacten bestaan uit een of meer lagen. Verschillende artefacttypen definiëren lagen anders. In een Docker-containerinstallatiekopie komt elke laag bijvoorbeeld overeen met een regel in het Dockerfile waarmee de installatiekopie wordt gedefinieerd:

Layers of a container image

Artefacten in een register delen gemeenschappelijke lagen, waardoor de opslagefficiëntie toeneemt. Verschillende installatiekopieën in verschillende opslagplaatsen hebben bijvoorbeeld een algemene ASP.NET Basislaag, maar slechts één kopie van die laag wordt opgeslagen in het register. Laag delen optimaliseert ook de verdeling van lagen naar knooppunten, met meerdere artefacten die algemene lagen delen. Als een installatiekopie al op een knooppunt de ASP.NET Core-laag als basis bevat, wordt de laag niet overgedragen naar het knooppunt door de volgende pull van een andere installatiekopie die verwijst naar dezelfde laag. In plaats daarvan verwijst deze naar de laag die al bestaat op het knooppunt.

Om veilige isolatie en bescherming te bieden tegen mogelijke laagmanipulatie, worden lagen niet gedeeld tussen registers.

Manifest

Elke containerinstallatiekopieën of artefacten die naar een containerregister worden gepusht, zijn gekoppeld aan een manifest. Het manifest, gegenereerd door het register wanneer de inhoud wordt gepusht, identificeert de artefacten op unieke wijze en specificeert de lagen.

Een basismanifest voor een Linux-installatiekopieën hello-world ziet er ongeveer als volgt uit:

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

U kunt de manifesten voor een opslagplaats weergeven met de Azure CLI-opdracht az acr manifest list-metadata:

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

Vermeld bijvoorbeeld de manifesten voor de opslagplaats '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"
  }
]

Manifestsamenvatt

Manifesten worden geïdentificeerd door een unieke SHA-256-hash of manifestsamenvating. Elke afbeelding of elk artefact, ongeacht of deze is getagd of niet, wordt geïdentificeerd door de samenvatting. De digest-waarde is uniek, zelfs als de laaggegevens van het artefact identiek zijn aan die van een ander artefact. Met dit mechanisme kunt u herhaaldelijk identiek getagde installatiekopieën naar een register pushen. U kunt bijvoorbeeld herhaaldelijk zonder fouten naar uw register pushen myimage:latest , omdat elke installatiekopieën worden geïdentificeerd door de unieke samenvatting.

U kunt een artefact ophalen uit een register door de samenvatting ervan op te geven in de pull-bewerking. Sommige systemen kunnen worden geconfigureerd om te worden opgehaald door digest, omdat hiermee wordt gegarandeerd dat de versie van de installatiekopie wordt opgehaald, zelfs als een identiek getagde installatiekopie later naar het register wordt gepusht.

Belangrijk

Als u gewijzigde artefacten herhaaldelijk pusht met identieke tags, kunt u 'zwevende' artefacten maken die niet zijn gemarkeerd, maar nog steeds ruimte in uw register verbruiken. Niet-gemarkeerde installatiekopieën worden niet weergegeven in de Azure CLI of in De Azure-portal wanneer u afbeeldingen op tag vermeldt of bekijkt. De bijbehorende lagen bestaan echter nog steeds en verbruiken ruimte in uw register. Als u een niet-gemarkeerde installatiekopieën verwijdert, wordt registerruimte vrijgemaakt wanneer het manifest de enige is, of de laatste, die verwijst naar een bepaalde laag. Zie Containerinstallatiekopieën verwijderen in Azure Container Registry voor informatie over het vrijmaken van ruimte die wordt gebruikt door niet-gemarkeerde installatiekopieën.

Een artefact adresseren

Als u een registerartefact wilt adresseren voor push- en pull-bewerkingen met Docker of andere clienthulpprogramma's, combineert u de volledig gekwalificeerde registernaam, de naam van de opslagplaats (inclusief het pad naar de naamruimte, indien van toepassing) en een artefacttag of manifestsamenvating. Zie de vorige secties voor uitleg van deze voorwaarden.

Adres per tag: [loginServerUrl]/[repository][:tag]

Adres per samenvatting: [loginServerUrl]/[repository@sha256][:digest]

Wanneer u Docker of andere clienthulpprogramma's gebruikt om artefacten naar een Azure-containerregister te halen of te pushen, gebruikt u de volledig gekwalificeerde URL van het register, ook wel de naam van de aanmeldingsserver genoemd. In de Azure-cloud heeft de volledig gekwalificeerde URL van een Azure-containerregister de indeling myregistry.azurecr.io (allemaal kleine letters).

Notitie

  • U kunt geen poortnummer opgeven in de URL van de registeraanmeldingsserver, zoals myregistry.azurecr.io:443.
  • De tag latest wordt standaard gebruikt als u geen tag in uw opdracht opgeeft.

Pushen op tag

Voorbeelden:

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

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

Pull by tag

Voorbeeld:

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

Pull by manifest digest

Voorbeeld:

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

Volgende stappen

Meer informatie over registeropslag en ondersteunde inhoudsindelingen in Azure Container Registry.

Meer informatie over het pushen en ophalen van installatiekopieën uit Azure Container Registry.