Azure Container Registry clientbibliotheek voor Python - versie 1.2.0
met Azure Container Registry kunt u containerinstallatiekopieën en artefacten opslaan en beheren in een privéregister voor alle typen containerimplementaties.
Gebruik de clientbibliotheek voor Azure Container Registry om het volgende te doen:
- Installatiekopieën of artefacten in een register weergeven
- Metagegevens verkrijgen voor afbeeldingen en artefacten, opslagplaatsen en tags
- Eigenschappen voor lezen/schrijven/verwijderen voor registeritems instellen
- Installatiekopieën en artefacten, opslagplaatsen en tags verwijderen
Broncode | Pakket (Pypi) | Pakket (Conda) | API-referentiedocumentatie | REST API-documentatie | Productdocumentatie
Disclaimer
Ondersteuning voor Azure SDK Python-pakketten voor Python 2.7 is beëindigd op 1 januari 2022. Raadpleeg Python 3.7 of hoger is vereist om https://github.com/Azure/azure-sdk-for-python/issues/20691dit pakket te gebruiken voor meer informatie en vragen. Raadpleeg het ondersteuningsbeleid voor Azure SDK voor Python-versies voor meer informatie.
Aan de slag
Het pakket installeren
Installeer de Azure Container Registry-clientbibliotheek voor Python met pip:
pip install --pre azure-containerregistry
Vereisten
- Python 3.7 of hoger is vereist voor het gebruik van dit pakket.
- U hebt een Azure-abonnement en een Container Registry-account nodig om dit pakket te kunnen gebruiken.
Als u een nieuwe Container Registry wilt maken, kunt u azure portal, Azure PowerShell of de Azure CLI gebruiken. Hier volgt een voorbeeld van het gebruik van de Azure CLI:
az acr create --name MyContainerRegistry --resource-group MyResourceGroup --location westus --sku Basic
De client verifiëren
De Azure Identity-bibliotheek biedt eenvoudige Azure Active Directory-ondersteuning voor verificatie. De DefaultAzureCredential
gaat ervan uit dat de AZURE_CLIENT_ID
omgevingsvariabelen , AZURE_TENANT_ID
en AZURE_CLIENT_SECRET
zijn ingesteld. Raadpleeg de sectie Omgevingsvariabelen voor Azure Identity voor meer informatie
# 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)
Belangrijkste concepten
In een register worden Docker-installatiekopieën en OCI-artefacten opgeslagen. Een afbeelding of artefact bestaat uit een manifest en lagen. Het manifest van een afbeelding beschrijft de lagen waaruit de afbeelding bestaat en wordt uniek geïdentificeerd door de samenvatting. Een afbeelding kan ook worden 'getagd' om deze een door mensen leesbare alias te geven. Aan een afbeelding of artefact kunnen nul of meer tags zijn gekoppeld en elke tag identificeert de afbeelding uniek. Een verzameling installatiekopieën die dezelfde naam delen, maar verschillende tags hebben, wordt een opslagplaats genoemd.
Zie Container Registry-concepten voor meer informatie.
Voorbeelden
De volgende secties bevatten verschillende codefragmenten voor enkele van de meest voorkomende ACR-servicetaken, waaronder:
- Registerbewerkingen:
- Blob- en manifestbewerkingen:
Houd er rekening mee dat in elk voorbeeld wordt ervan uitgegaan dat er een CONTAINERREGISTRY_ENDPOINT
omgevingsvariabele is ingesteld op een tekenreeks die het https://
voorvoegsel en de naam van de aanmeldingsserver bevat, bijvoorbeeld 'https://myregistry.azurecr.io". Voorbeelden van anonieme toegang krijgen een eindpuntwaarde uit de omgevingsvariabeleCONTAINERREGISTRY_ANONREGISTRY_ENDPOINT
.
Opslagplaatsen weergeven
Doorloop de verzameling opslagplaatsen in het register.
with ContainerRegistryClient(self.endpoint, self.credential) as client:
# Iterate through all the repositories
for repository_name in client.list_repository_names():
print(repository_name)
Tags met anonieme toegang weergeven
Doorloop de verzameling tags in de opslagplaats met anonieme toegang.
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)
Artefacteigenschappen instellen
Eigenschappen van een artefact instellen.
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
)
Installatiekopieën verwijderen
Verwijder installatiekopieën die ouder zijn dan de eerste drie in de opslagplaats.
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)
Afbeeldingen uploaden
Als u een volledige afbeelding wilt uploaden, moeten we afzonderlijke lagen en configuratie uploaden. Daarna kunnen we een manifest uploaden waarin een afbeelding of artefact wordt beschreven en deze een tag toewijzen.
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}")
Afbeeldingen downloaden
Als u een volledige installatiekopieën wilt downloaden, moeten we het bijbehorende manifest downloaden en vervolgens afzonderlijke lagen en configuratie downloaden.
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}")
Manifest verwijderen
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)
Blob verwijderen
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"])
Problemen oplossen
Raadpleeg de gids voor probleemoplossing voor informatie over het oplossen van problemen.
Algemeen
De ACR-clientbibliotheek genereert uitzonderingen die zijn gedefinieerd in Azure Core.
Logboekregistratie
Deze bibliotheek maakt gebruik van de standaardbibliotheek voor logboekregistratie voor logboekregistratie.
Basisinformatie over HTTP-sessies (URL's, headers, enzovoort) wordt geregistreerd op INFO
niveau.
Gedetailleerde DEBUG
logboekregistratie op niveau, inclusief aanvraag-/antwoordteksten en niet-bewerkte headers, kan worden ingeschakeld op de client of per bewerking met het logging_enable
trefwoordargument.
Bekijk hier de volledige documentatie voor SDK-logboekregistratie met voorbeelden.
Optionele configuratie
Optionele trefwoordargumenten kunnen worden doorgegeven op het niveau van de client en per bewerking. In de naslagdocumentatie van Azure Core worden de beschikbare configuraties beschreven voor nieuwe pogingen, logboekregistratie, transportprotocollen en meer.
Volgende stappen
- Ga verder met azure.containerregistry en onze voorbeelden.
- Bekijk een demo of gedetailleerde video.
- Meer informatie over de Azure Container Registry-service.
Bijdragen
Wij verwelkomen bijdragen en suggesties voor dit project. Voor de meeste bijdragen moet u instemmen met een licentieovereenkomst voor bijdragers (CLA: Contributor License Agreement) waarin u verklaart dat u gerechtigd bent ons het recht te geven uw bijdrage te gebruiken, en dat u dit ook doet. Ga naar cla.microsoft.com voor meer informatie.
Op dit project is de Microsoft Open Source Code of Conduct (Microsoft Open Source-gedragscode) van toepassing. Zie de Veelgestelde vragen over de gedragscode voor meer informatie of neem contact op opencode@microsoft.com met eventuele aanvullende vragen of opmerkingen.
Azure SDK for Python