Azure Container Registry klientbibliotek för Python – version 1.2.0
Azure Container Registry kan du lagra och hantera containeravbildningar och artefakter i ett privat register för alla typer av containerdistributioner.
Använd klientbiblioteket för Azure Container Registry för att:
- Visa en lista över avbildningar eller artefakter i ett register
- Hämta metadata för bilder och artefakter, lagringsplatser och taggar
- Ange läs-/skriv-/borttagningsegenskaper för registerobjekt
- Ta bort bilder och artefakter, lagringsplatser och taggar
| KällkodPaket (Pypi) | Paket (Conda) | API-referensdokumentation | REST API-dokumentation | Produktdokumentation
Friskrivning
Stöd för Azure SDK Python-paket för Python 2.7 upphörde den 1 januari 2022. Mer information och frågor finns i https://github.com/Azure/azure-sdk-for-python/issues/20691Python 3.7 eller senare som krävs för att använda det här paketet. Mer information finns i Supportprincip för Azure SDK för Python-version.
Komma igång
Installera paketet
Installera Azure Container Registry-klientbiblioteket för Python med pip:
pip install --pre azure-containerregistry
Förutsättningar
- Python 3.7 eller senare krävs för att använda det här paketet.
- Du behöver en Azure-prenumeration och ett Container Registry-konto för att kunna använda det här paketet.
Om du vill skapa ett nytt containerregister kan du använda Azure-portalen, Azure PowerShell eller Azure CLI. Här är ett exempel med Azure CLI:
az acr create --name MyContainerRegistry --resource-group MyResourceGroup --location westus --sku Basic
Autentisera klienten
Azure Identity-biblioteket tillhandahåller enkelt Azure Active Directory-stöd för autentisering. förutsätter AZURE_CLIENT_ID
att miljövariablerna , AZURE_TENANT_ID
och AZURE_CLIENT_SECRET
har angetts. Mer information finns i avsnittet Azure Identity Environment variables (Miljövariabler för Azure Identity)DefaultAzureCredential
# Create a ContainerRegistryClient that will authenticate through Active Directory
from azure.containerregistry import ContainerRegistryClient
from azure.identity import DefaultAzureCredential
endpoint = "https://mycontainerregistry.azurecr.io"
audience = "https://management.azure.com"
client = ContainerRegistryClient(endpoint, DefaultAzureCredential(), audience=audience)
Viktiga begrepp
Ett register lagrar Docker-avbildningar och OCI-artefakter. En bild eller artefakt består av ett manifest och lager. En bilds manifest beskriver de lager som utgör bilden och identifieras unikt av dess sammandrag. En bild kan också "taggas" för att ge den ett läsbart alias. En bild eller artefakt kan ha noll eller flera associerade taggar och varje tagg identifierar bilden unikt. En samling avbildningar som delar samma namn men har olika taggar kallas för en lagringsplats.
Mer information finns i Begrepp för containerregister.
Exempel
Följande avsnitt innehåller flera kodfragment som täcker några av de vanligaste ACR Service-uppgifterna, inklusive:
- Registeråtgärder:
- Blob- och manifeståtgärder:
Observera att varje exempel förutsätter att det finns en CONTAINERREGISTRY_ENDPOINT
miljövariabel inställd på en sträng som innehåller https://
prefixet och namnet på inloggningsservern, till exempel "https://myregistry.azurecr.io". Anonyma åtkomstexempel hämtar slutpunktsvärde från miljövariabelnCONTAINERREGISTRY_ANONREGISTRY_ENDPOINT
.
Visa en lista över lagringsplatser
Iterera genom samlingen med lagringsplatser i registret.
with ContainerRegistryClient(self.endpoint, self.credential) as client:
# Iterate through all the repositories
for repository_name in client.list_repository_names():
print(repository_name)
Lista taggar med anonym åtkomst
Iterera genom samlingen med taggar på lagringsplatsen med anonym åtkomst.
with ContainerRegistryClient(endpoint) as anon_client:
manifest = anon_client.get_manifest_properties("library/hello-world", "latest")
print(f"Tags of {manifest.repository_name}: ")
# Iterate through all the tags
for tag in manifest.tags:
print(tag)
Ange artefaktegenskaper
Ange egenskaper för en artefakt.
with ContainerRegistryClient(self.endpoint, self.credential) as client:
# Set permissions on image "library/hello-world:v1"
client.update_manifest_properties(
"library/hello-world",
"v1",
can_write=False,
can_delete=False
)
Ta bort avbildningar
Ta bort avbildningar som är äldre än de tre första på lagringsplatsen.
with ContainerRegistryClient(self.endpoint, self.credential) as client:
for repository in client.list_repository_names():
# Keep the three most recent images, delete everything else
manifest_count = 0
for manifest in client.list_manifest_properties(
repository, order_by=ArtifactManifestOrder.LAST_UPDATED_ON_DESCENDING
):
manifest_count += 1
if manifest_count > 3:
# Make sure will have the permission to delete the manifest later
client.update_manifest_properties(
repository,
manifest.digest,
can_write=True,
can_delete=True
)
print(f"Deleting {repository}:{manifest.digest}")
client.delete_manifest(repository, manifest.digest)
Ladda upp bilder
Om du vill ladda upp en fullständig avbildning måste vi ladda upp enskilda lager och konfigurationer. Därefter kan vi ladda upp ett manifest som beskriver en bild eller artefakt och tilldela den en tagg.
self.repository_name = "sample-oci-image"
layer = BytesIO(b"Sample layer")
config = BytesIO(json.dumps(
{
"sample config": "content",
}).encode())
with ContainerRegistryClient(self.endpoint, self.credential) as client:
# Upload a layer
layer_digest, layer_size = client.upload_blob(self.repository_name, layer)
print(f"Uploaded layer: digest - {layer_digest}, size - {layer_size}")
# Upload a config
config_digest, config_size = client.upload_blob(self.repository_name, config)
print(f"Uploaded config: digest - {config_digest}, size - {config_size}")
# Create an oci image with config and layer info
oci_manifest = {
"config": {
"mediaType": "application/vnd.oci.image.config.v1+json",
"digest": config_digest,
"sizeInBytes": config_size,
},
"schemaVersion": 2,
"layers": [
{
"mediaType": "application/vnd.oci.image.layer.v1.tar",
"digest": layer_digest,
"size": layer_size,
"annotations": {
"org.opencontainers.image.ref.name": "artifact.txt",
},
},
],
}
# Set the image with tag "latest"
manifest_digest = client.set_manifest(self.repository_name, oci_manifest, tag="latest")
print(f"Uploaded manifest: digest - {manifest_digest}")
Ladda ned bilder
För att ladda ned en fullständig avbildning måste vi ladda ned dess manifest och sedan ladda ned enskilda lager och konfigurationer.
with ContainerRegistryClient(self.endpoint, self.credential) as client:
# Get the image
get_manifest_result = client.get_manifest(self.repository_name, "latest")
received_manifest = get_manifest_result.manifest
print(f"Got manifest:\n{received_manifest}")
# Download and write out the layers
for layer in received_manifest["layers"]:
# Remove the "sha256:" prefix from digest
layer_file_name = layer["digest"].split(":")[1]
try:
stream = client.download_blob(self.repository_name, layer["digest"])
with open(layer_file_name, "wb") as layer_file:
for chunk in stream:
layer_file.write(chunk)
except DigestValidationError:
print(f"Downloaded layer digest value did not match. Deleting file {layer_file_name}.")
os.remove(layer_file_name)
print(f"Got layer: {layer_file_name}")
# Download and write out the config
config_file_name = "config.json"
try:
stream = client.download_blob(self.repository_name, received_manifest["config"]["digest"])
with open(config_file_name, "wb") as config_file:
for chunk in stream:
config_file.write(chunk)
except DigestValidationError:
print(f"Downloaded config digest value did not match. Deleting file {config_file_name}.")
os.remove(config_file_name)
print(f"Got config: {config_file_name}")
Ta bort manifest
with ContainerRegistryClient(self.endpoint, self.credential) as client:
get_manifest_result = client.get_manifest(self.repository_name, "latest")
# Delete the image
client.delete_manifest(self.repository_name, get_manifest_result.digest)
Ta bort blob
with ContainerRegistryClient(self.endpoint, self.credential) as client:
get_manifest_result = client.get_manifest(self.repository_name, "latest")
received_manifest = get_manifest_result.manifest
# Delete the layers
for layer in received_manifest["layers"]:
client.delete_blob(self.repository_name, layer["digest"])
# Delete the config
client.delete_blob(self.repository_name, received_manifest["config"]["digest"])
Felsökning
Information om felsökning finns i felsökningsguiden.
Allmänt
ACR-klientbiblioteket genererar undantag som definierats i Azure Core.
Loggning
Det här biblioteket använder standardloggningsbiblioteket för loggning.
Grundläggande information om HTTP-sessioner (URL:er, rubriker osv.) loggas på INFO
nivå.
Detaljerad DEBUG
nivåloggning, inklusive begärande-/svarskroppar och oredigerade rubriker, kan aktiveras på klienten eller per åtgärd med nyckelordsargumentet logging_enable
.
Se fullständig SDK-loggningsdokumentation med exempel här.
Valfri konfiguration
Valfria nyckelordsargument kan skickas in på klient- och åtgärdsnivå. Referensdokumentationen för azure-core beskriver tillgängliga konfigurationer för återförsök, loggning, transportprotokoll med mera.
Nästa steg
- Gå vidare med azure.containerregistry och våra exempel.
- Titta på en demo eller en djupdykningsvideo.
- Läs mer om tjänsten Azure Container Registry.
Bidra
Det här projektet välkomnar bidrag och förslag. Merparten av bidragen kräver att du godkänner ett licensavtal för bidrag, där du deklarerar att du har behörighet att bevilja oss rättigheten att använda ditt bidrag, och att du dessutom uttryckligen gör så. Mer information finns i cla.microsoft.com.
Det här projektet använder sig av Microsofts uppförandekod för öppen källkod. Mer information finns i Vanliga frågor och svar om uppförandekoden eller kontakta opencode@microsoft.com med ytterligare frågor eller kommentarer.
Azure SDK for Python
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för