Om register, lagringsplatser och artefakter

Den här artikeln beskriver viktiga begrepp för containerregister, lagringsplatser och containeravbildningar och relaterade artefakter.

Registry, repositories, and artifacts

Register

Ett containerregister är en tjänst som lagrar och distribuerar containeravbildningar och relaterade artefakter. Docker Hub är ett exempel på ett offentligt containerregister som fungerar som en allmän katalog över Docker-containeravbildningar. Azure Container Registry ger användarna direkt kontroll över sitt containerinnehåll, med integrerad autentisering, geo-replikering som stöder global distribution och tillförlitlighet för nätverksnära distributioner, konfiguration av virtuella nätverk med Private Link, tagglåsning och många andra förbättrade funktioner.

Förutom Docker-kompatibla containeravbildningar stöder Azure Container Registry en rad innehållsartefakter , inklusive Helm-diagram och OCI-avbildningsformat (Open Container Initiative).

Lagringsplats

En lagringsplats är en samling containeravbildningar eller andra artefakter i ett register som har samma namn, men olika taggar. Följande tre bilder finns till exempel på lagringsplatsen acr-helloworld :

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

Lagringsplatsens namn kan också innehålla namnområden. Med namnrymder kan du identifiera relaterade lagringsplatser och artefaktägarskap i din organisation med hjälp av snedstrecksavgränsade namn. Registret hanterar dock alla lagringsplatser oberoende av varandra, inte som en hierarki. Till exempel:

  • 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

Lagringsplatsnamn kan bara innehålla alfanumeriska gemener, punkter, bindestreck, understreck och snedstreck.

Artefakt

En containeravbildning eller annan artefakt i ett register är associerad med en eller flera taggar, har ett eller flera lager och identifieras av ett manifest. Att förstå hur dessa komponenter är relaterade till varandra kan hjälpa dig att hantera registret effektivt.

Tagg

Taggen för en bild eller annan artefakt anger dess version. En enskild artefakt i en lagringsplats kan tilldelas en eller flera taggar och kan också vara "otaggade". Du kan alltså ta bort alla taggar från en avbildning, medan avbildningens data (dess lager) finns kvar i registret.

Lagringsplatsen (eller lagringsplatsen och namnområdet) plus en tagg definierar en bilds namn. Du kan push-överföra och hämta en bild genom att ange dess namn i push- eller pull-åtgärden. Taggen latest används som standard om du inte anger något i Docker-kommandona.

Hur du taggar containeravbildningar styrs av dina scenarier för att utveckla eller distribuera dem. Till exempel rekommenderas stabila taggar för att underhålla dina basavbildningar och unika taggar för distribution av avbildningar. Mer information finns i Rekommendationer för taggning och versionshantering av containeravbildningar.

Information om namngivningsregler för taggar finns i Docker-dokumentationen.

Skikt

Containeravbildningar och artefakter består av ett eller flera lager. Olika artefakttyper definierar lager på olika sätt. I en Docker-containeravbildning motsvarar till exempel varje lager en rad i Dockerfile som definierar avbildningen:

Layers of a container image

Artefakter i ett register delar gemensamma lager, vilket ökar lagringseffektiviteten. Flera avbildningar på olika lagringsplatser kan till exempel ha ett gemensamt ASP.NET Core-basskikt, men endast en kopia av det lagret lagras i registret. Lagerdelning optimerar också lagerdistribution till noder, med flera artefakter som delar gemensamma lager. Om en bild som redan finns på en nod innehåller ASP.NET Core-lagret som bas, överförs inte den efterföljande hämtningen av en annan bild som refererar till samma lager lagret till noden. I stället refererar den till det lager som redan finns på noden.

För att ge säker isolering och skydd mot potentiell lagermanipulering delas inte lager mellan register.

Manifest

Varje containeravbildning eller artefakt som skickas till ett containerregister är associerad med ett manifest. Manifestet, som genereras av registret när innehållet skickas, identifierar artefakterna unikt och anger lagren.

Ett grundläggande manifest för en Linux-avbildning hello-world ser ut ungefär så här:

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

Du kan lista manifesten för en lagringsplats med Azure CLI-kommandot az acr manifest list-metadata:

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

Du kan till exempel lista manifesten för lagringsplatsen "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"
  }
]

Manifestsammandrag

Manifest identifieras med en unik SHA-256-hash eller manifestsammandrag. Varje bild eller artefakt – oavsett om den är taggad eller inte – identifieras av dess sammandrag. Sammandragsvärdet är unikt även om artefaktens lagerdata är identiska med en annan artefakts. Den här mekanismen gör att du upprepade gånger kan skicka identiskt taggade avbildningar till ett register. Du kan till exempel upprepade gånger skicka myimage:latest till registret utan fel eftersom varje avbildning identifieras av dess unika sammanfattning.

Du kan hämta en artefakt från ett register genom att ange dess sammandrag i pull-åtgärden. Vissa system kan konfigureras för att hämtas med sammandrag eftersom det garanterar att avbildningsversionen hämtas, även om en identiskt taggad avbildning skickas senare till registret.

Viktigt!

Om du upprepade gånger push-överför ändrade artefakter med identiska taggar kan du skapa "överblivna"-artefakter som inte är taggade, men som fortfarande förbrukar utrymme i registret. Otaggade bilder visas inte i Azure CLI eller i Azure-portalen när du listar eller visar bilder med tagg. Deras lager finns dock fortfarande och förbrukar utrymme i registret. Om du tar bort en otagbar avbildning frigörs registerutrymmet när manifestet är det enda, eller det sista, som pekar på ett visst lager. Information om hur du frigör utrymme som används av otaggade avbildningar finns i Ta bort containeravbildningar i Azure Container Registry.

Åtgärda en artefakt

Om du vill hantera en registerartefakt för push- och pull-åtgärder med Docker eller andra klientverktyg kombinerar du det fullständigt kvalificerade registernamnet, lagringsplatsens namn (inklusive namnområdessökväg om tillämpligt) och en artefakttagg eller manifestsammandrag. Se föregående avsnitt för förklaringar av dessa termer.

Adress efter tagg: [loginServerUrl]/[repository][:tag]

Adress efter sammandrag: [loginServerUrl]/[repository@sha256][:digest]

När du använder Docker eller andra klientverktyg för att hämta eller skicka artefakter till ett Azure-containerregister använder du registrets fullständigt kvalificerade URL, även kallat inloggningsserverns namn. I Azure-molnet är den fullständigt kvalificerade URL:en för ett Azure-containerregister i formatet myregistry.azurecr.io (alla gemener).

Kommentar

  • Du kan inte ange ett portnummer i url:en för registerinloggningsservern, till exempel myregistry.azurecr.io:443.
  • Taggen latest används som standard om du inte anger någon tagg i kommandot.

Push-överföring efter tagg

Exempel:

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

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

Hämta efter tagg

Exempel:

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

Hämta efter manifestsammandrag

Exempel:

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

Nästa steg

Läs mer om registerlagring och innehållsformat som stöds i Azure Container Registry.

Lär dig hur du pushar och hämtar avbildningar från Azure Container Registry.