Over registers, opslagplaatsen en artefacten
In dit artikel worden de belangrijkste concepten van containerregisters, opslagplaatsen en containerafbeeldingen en gerelateerde artefacten beschreven.
Register
Een containerregister is een service die containerafbeeldingen en gerelateerde artefacten opseert en distribueert. Docker Hub is een voorbeeld van een openbaar containerregister dat fungeert als een algemene catalogus met Docker-container-afbeeldingen. Azure Container Registry biedt gebruikers directe controle over hun containerinhoud, met geïntegreerde verificatie, geo-replicatie die wereldwijde distributie en betrouwbaarheid ondersteunt voor implementaties dicht bij het netwerk, configuratie van virtuele netwerken met Private Link, tagvergrendelingen vele andere verbeterde functies.
Naast met Docker compatibele containerafbeeldingen biedt Azure Container Registry ondersteuning voor diverse inhoudsartefacten, waaronder Helm-grafieken en OCI-afbeeldingsindelingen (Open Container Initiative).
Opslagplaats
Een opslagplaats is een verzameling containerafbeeldingen of andere artefacten in een register met dezelfde naam, maar met verschillende tags. De volgende drie afbeeldingen staan 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 namen met slash-scheidingstekens. Het register beheert echter alle opslagplaatsen onafhankelijk, niet als een hiërarchie. Bijvoorbeeld:
- marketing/campaign10-18/web:v2
- marketing/campaign10-18/api:v3
- marketing/campaign10-18/email-sender:v2
- product-returns/web-submission:20180604
- product-returns/legacy-integrator:20180715
Namen van opslagplaatsen kunnen alleen kleine alfanumerieke tekens, punten, streepjes, onderstrepingstekens en slashes bevatten.
Zie Open Container Initiative Distribution Specification voor volledige naamgevingsregels voor opslagplaatsen.
Artefact
Een containerafbeelding of ander artefact in een register is gekoppeld aan een of meer tags, heeft een of meer lagen en wordt geïdentificeerd door een manifest. Als u begrijpt hoe deze onderdelen zich tot elkaar verhouden, kunt u uw register effectief beheren.
Tag
De tag voor een afbeelding of ander artefact geeft de versie aan. Eén artefact in een opslagplaats kan worden toegewezen aan een of meer tags en kan ook zonder tag zijn. Dat wil zeggen dat u alle tags uit een afbeelding kunt verwijderen, terwijl de gegevens van de afbeelding (de lagen) in het register blijven.
De opslagplaats (of opslagplaats en naamruimte) plus een tag definieert de naam van een afbeelding. U kunt een afbeelding pushen en pullen door de naam op te geven in de push- of pull-bewerking. De tag wordt standaard gebruikt als u er geen op geeft latest in uw Docker-opdrachten.
Hoe u containerafbeeldingen tagt, wordt begeleid door uw scenario's om ze te ontwikkelen of te implementeren. Stabiele tags worden bijvoorbeeld aanbevolen voor het onderhouden van uw basisafbeeldingen en unieke tags voor het implementeren van afbeeldingen. Zie voor meer informatie Aanbevelingen voor het taggen en versieren van containerafbeeldingen.
Zie de Docker-documentatievoor naamgevingsregels voor tags.
Laag
Containerafbeeldingen en artefacten zijn uit een of meer lagen. Verschillende artefacttypen definiëren lagen anders. In een Docker-containerafbeelding komt elke laag bijvoorbeeld overeen met een regel in het Dockerfile die de afbeelding definieert:
Artefacten in een register delen gemeenschappelijke lagen, waardoor de efficiëntie van de opslag wordt verbeterd. Verschillende afbeeldingen in verschillende opslagplaatsen hebben bijvoorbeeld een gemeenschappelijke ASP.NET Core basislaag, maar er wordt slechts één kopie van die laag opgeslagen in het register. Delen van lagen optimaliseert ook laagdistributie naar knooppunten, met meerdere artefacten die algemene lagen delen. Als een afbeelding die al op een knooppunt staat, de ASP.NET Core-laag als basis bevat, wordt de laag niet door de volgende pull van een andere afbeelding die naar dezelfde laag verwijst, naar het knooppunt overdraagt. In plaats daarvan verwijst deze naar de laag die al op het knooppunt staat.
Lagen worden niet gedeeld tussen registers om veilige isolatie en bescherming te bieden tegen mogelijke laagbewerkingen.
Manifest
Elke container-afbeelding of elk artefact dat naar een containerregister wordt pusht, is gekoppeld aan een manifest. Het manifest, dat door het register wordt gegenereerd wanneer de inhoud wordt pushen, identificeert de artefacten op unieke manier en specificeert de lagen.
Een basismanifest voor een hello-world Linux-afbeelding 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 weer geven met de Azure CLI-opdracht az acr repository show-manifests:
az acr repository show-manifests --name <acrName> --repository <repositoryName>
Vermeld bijvoorbeeld de manifesten voor de opslagplaats 'acr-helloworld':
az acr repository show-manifests --name myregistry --repository acr-helloworld
[
{
"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"
}
]
Manifest digest
Manifesten worden geïdentificeerd door een unieke SHA-256-hash of manifest digest. Elke afbeelding of elk artefact, ongeacht of deze is getagd of niet, wordt geïdentificeerd door de samenvatting. De samenvattingswaarde 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 afbeeldingen naar een register pushen. U kunt bijvoorbeeld herhaaldelijk zonder fouten naar uw register pushen, omdat elke afbeelding myimage:latest wordt geïdentificeerd door de unieke samenvatting.
U kunt een artefact uit een register halen door de samenvatting ervan op te geven in de pull-bewerking. Sommige systemen kunnen worden geconfigureerd voor pull by digest, omdat hiermee wordt gegarandeerd dat de versie van de afbeelding wordt getrokken, zelfs als een identiek getagde afbeelding later naar het register wordt pusht.
Belangrijk
Als u gewijzigde artefacten herhaaldelijk pusht met identieke tags, kunt u 'zwevende' artefacten maken die zonder tag zijn, maar nog steeds ruimte in uw register verbruiken. Afbeeldingen zonder tag worden niet weergegeven in de Azure CLI of in de Azure Portal wanneer u afbeeldingen per tag welijst of bekijkt. De lagen zijn echter nog steeds aanwezig en verbruiken ruimte in uw register. Als u een niet-getagged afbeelding wilt verwijderen, wordt er registerruimte vrij gemaakt wanneer het manifest de enige of de laatste is die verwijst naar een bepaalde laag. Zie Containerafbeeldingen verwijderen in Azure Container Registry voor meer informatie over het vrij maken van ruimte die wordt gebruikt door afbeeldingen zonder Azure Container Registry.
Een artefact aanpakken
Als u een registerartefact voor push- en pull-bewerkingen wilt aanpakken met Docker of andere clienthulpprogramma's, combineert u de volledig gekwalificeerde registernaam, de naam van de opslagplaats (inclusief het naamruimtepad indien van toepassing) en een artefacttag of manifest digest. Zie de vorige secties voor uitleg over deze termen.
Adres op tag: [loginServerUrl]/[repository][:tag]
Adres per samenvatting:[loginServerUrl]/[repository@sha256][:digest]
Wanneer u Docker of andere clienthulpprogramma's gebruikt om artefacten op te halen of te pushen naar een Azure-containerregister, 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 (in kleine letters).
Notitie
- U kunt geen poortnummer opgeven in de aanmeldingsserver-URL van het register, zoals
myregistry.azurecr.io:443. - De tag wordt standaard gebruikt als u geen tag op te geven
latestin de opdracht.
Push by 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 pullen van afbeeldingen Azure Container Registry.