Skicka och hämta en OCI-artefakt med hjälp av ett Azure-containerregister

Du kan använda ett Azure-containerregister för att lagra och hantera OCI-artefakter (Open Container Initiative) samt Docker- och Docker-kompatibla containeravbildningar.

För att demonstrera den här funktionen visar den här artikeln hur du använder ORAS-verktyget (OCI Registry as Storage) för att skicka en exempelartefakt – en textfil – till ett Azure-containerregister. Hämta sedan artefakten från registret. Du kan hantera en mängd olika OCI-artefakter i ett Azure-containerregister med olika kommandoradsverktyg som är lämpliga för varje artefakt.

Förutsättningar

  • Azure-containerregister – Skapa ett containerregister i din Azure-prenumeration. Använd till exempel Azure Portal eller Azure CLI.
  • ORAS-verktyget – Ladda ned och installera en aktuell ORAS-version för ditt operativsystem från GitHub-lagringsplatsen. Verktyget släpps som en komprimerad tarball .tar.gz (-fil). Extrahera och installera filen med hjälp av standardprocedurer för ditt operativsystem.
  • Azure Active Directory tjänstens huvudnamn (valfritt) – Om du vill autentisera direkt med ORAS skapar du ett huvudnamn för tjänsten för att få åtkomst till registret. Se till att tjänstens huvudnamn har tilldelats en roll, till exempel AcrPush, så att den har behörighet att skicka och hämta artefakter.
  • Azure CLI (valfritt) – Om du vill använda en enskild identitet behöver du en lokal installation av Azure CLI. Version 2.0.71 eller senare rekommenderas. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
  • Docker (valfritt) – Om du vill använda en enskild identitet måste du också ha Docker installerat lokalt för att autentisera med registret. Docker innehåller paket som enkelt kan konfigurera Docker på ett macOS-, Windows- eller Linux-system.

Logga in på ett register

Det här avsnittet visar två föreslagna arbetsflöden för att logga in i registret, beroende på vilken identitet som används. Välj den metod som passar din miljö.

Logga in med ORAS

Använd tjänstens huvudnamn med push-behörighet och kör kommandot för att logga in i oras login registret med program-ID och lösenord för tjänstens huvudnamn. Ange det fullständigt kvalificerade registernamnet (endast gemener), i det här myregistry.azurecr.io. Program-ID:t för tjänstens huvudnamn skickas i $SP_APP_ID miljövariabeln och lösenordet i variabeln $SP_PASSWD .

oras login myregistry.azurecr.io --username $SP_APP_ID --password $SP_PASSWD

Om du vill läsa lösenordet från Stdin använder du --password-stdin .

Logga in med Azure CLI

Logga in på Azure CLI med din identitet för att skicka och hämta artefakter från containerregistret.

Använd sedan Azure CLI-kommandot az acr login för att komma åt registret. Till exempel för att autentisera till ett register med namnet myregistry:

az login
az acr login --name myregistry

Anteckning

az acr login använder Docker-klienten för att Azure Active Directory en token i docker.config filen. Docker-klienten måste installeras och köras för att slutföra det enskilda autentiseringsflödet.

Push-skicka en artefakt

Skapa en textfil i en lokal arbetskatalog med lite exempeltext. Till exempel i ett bash-gränssnitt:

echo "Here is an artifact" > artifact.txt

Använd kommandot oras push för att skicka den här textfilen till registret. I följande exempel push-fil för exempeltext till samples/artifact lagringsplatsen. Registret identifieras med det fullständigt kvalificerade registernamnet myregistry.azurecr.io (endast gemener). Artefakten har taggats 1.0 . Artefakten har som standard en odefinierad typ som identifieras av strängen för medietyp efter filnamnet artifact.txt . Se OCI Artifacts (OCI-artefakter) för ytterligare typer.

Linux eller macOS

oras push myregistry.azurecr.io/samples/artifact:1.0 \
    --manifest-config /dev/null:application/vnd.unknown.config.v1+json \
    ./artifact.txt:application/vnd.unknown.layer.v1+txt

Windows

.\oras.exe push myregistry.azurecr.io/samples/artifact:1.0 ^
    --manifest-config NUL:application/vnd.unknown.config.v1+json ^
    .\artifact.txt:application/vnd.unknown.layer.v1+txt

Utdata för en lyckad push liknar följande:

Uploading 33998889555f artifact.txt
Pushed myregistry.azurecr.io/samples/artifact:1.0
Digest: sha256:xxxxxxbc912ef63e69136f05f1078dbf8d00960a79ee73c210eb2a5f65xxxxxx

Om du vill hantera artefakter i registret, om du använder Azure CLI, kör du az acr standardkommandon för att hantera avbildningar. Du kan till exempel hämta attributen för artefakten med kommandot az acr repository show:

az acr repository show \
    --name myregistry \
    --image samples/artifact:1.0

De utdata som genereras liknar följande:

{
  "changeableAttributes": {
    "deleteEnabled": true,
    "listEnabled": true,
    "readEnabled": true,
    "writeEnabled": true
  },
  "createdTime": "2019-08-28T20:43:31.0001687Z",
  "digest": "sha256:xxxxxxbc912ef63e69136f05f1078dbf8d00960a79ee73c210eb2a5f65xxxxxx",
  "lastUpdateTime": "2019-08-28T20:43:31.0001687Z",
  "name": "1.0",
  "signed": false
}

Hämta en artefakt

Kör kommandot oras pull för att hämta artefakten från registret.

Ta först bort textfilen från din lokala arbetskatalog:

rm artifact.txt

Kör oras pull för att hämta artefakten och ange den medietyp som används för att skicka artefakten:

oras pull myregistry.azurecr.io/samples/artifact:1.0 \
    --media-type application/vnd.unknown.layer.v1+txt

Kontrollera att pull-programmet lyckades:

$ cat artifact.txt
Here is an artifact

Ta bort artefakten (valfritt)

Om du vill ta bort artefakten från Azure-containerregistret använder du kommandot az acr repository delete. I följande exempel tas artefakten som du lagrade där bort:

az acr repository delete \
    --name myregistry \
    --image samples/artifact:1.0

Exempel: Skapa Docker-avbildning från OCI-artefakt

Källkod och binärfiler för att skapa en containeravbildning kan lagras som OCI-artefakter i ett Azure-containerregister. Du kan referera till en källartefakt som byggkontext för en ACR-uppgift. Det här exemplet visar hur du lagrar en Dockerfile som en OCI-artefakt och sedan refererar till artefakten för att skapa en containeravbildning.

Skapa till exempel en Dockerfile med en rad:

echo "FROM mcr.microsoft.com/hello-world" > hello-world.dockerfile

Logga in på målcontainerregistret.

az login
az acr login --name myregistry

Skapa och push-skicka en ny OCI-artefakt till målregistret med hjälp av oras push kommandot . Det här exemplet anger standardmedietypen för artefakten.

oras push myregistry.azurecr.io/dockerfile:1.0 hello-world.dockerfile

Kör kommandot az acr build för att skapa hello-world-avbildningen med den nya artefakten som byggkontext:

az acr build --registry myregistry --image builds/hello-world:v1 \
  --file hello-world.dockerfile \
  oci://myregistry.azurecr.io/dockerfile:1.0

Nästa steg