Questa pagina descrive il push e il pull delle immagini container con Docker. Inoltre,
fornisce informazioni sull'estrazione di immagini con lo strumento crictl
, se
risolvere i problemi in Google Kubernetes Engine.
Per informazioni sul deployment negli ambienti di runtime Google Cloud, consulta Eseguire il deployment in Google Cloud.
Per istruzioni su come elencare, taggare ed eliminare le immagini, consulta Gestione delle immagini.
Prima di iniziare
- Se il repository di destinazione non esiste, per creare un nuovo repository.
- Devi disporre almeno dell'accesso in scrittura ad Artifact Registry nel repository.
- Installa Docker se non è già installata.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per eseguire il push e il pull delle immagini, chiedi all'amministratore di concederti seguenti ruoli IAM sul repository:
-
Esegui il pull delle immagini:
Lettore Artifact Registry (
roles/artifactregistry.reader
) -
Aggiungi tag ed esegui il push delle immagini:
Writer Artifact Registry (
roles/artifactregistry.writer
)
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite la ruoli o altri ruoli predefiniti ruoli.
Autenticazione in un repository
Devi eseguire l'autenticazione nei repository ogni volta che utilizzi Docker o un altro client di terze parti con un repository Docker. Questa sezione fornisce un breve riepilogo dei requisiti necessari per l'autenticazione. Per dettagli vedi Configurare l'autenticazione per Docker.
Utilizzo di un assistente per le credenziali
Per gcloud CLI credential helper o assistente per le credenziali autonomo, Gli host Artifact Registry che utilizzi devono essere presenti nel file di configurazione Docker.
Artifact Registry non aggiunge automaticamente tutti gli host del registry al di configurazione Docker. Il tempo di risposta di Docker è notevolmente più lento c'è un numero elevato di registri configurati. Per ridurre al minimo il numero registri nel file di configurazione, aggiungi gli host necessari .
Per confermare quali host sono configurati, esegui questo comando per visualizzare i contenuti del file di configurazione:
- Linux:
cat ~/.docker/config.json
- Windows:
cat %USERPROFILE%\.docker\config.json
La sezione credHelpers
elenca gli host Docker di Artifact Registry configurati.
I nomi host terminano con -docker.pkg.dev
. L'esempio seguente mostra alcuni host
configurato per l'helper delle credenziali
della gcloud CLI.
"credHelpers": {
"asia.gcr.io": "gcloud",
"eu.gcr.io": "gcloud",
"gcr.io": "gcloud",
"marketplace.gcr.io": "gcloud",
"northamerica-northeast1-docker.pkg.dev": "gcloud",
"us-central1-docker.pkg.dev": "gcloud",
"us-east1-docker.pkg.dev": "gcloud",
"us.gcr.io": "gcloud"
}
Se un host che vuoi utilizzare non è nell'elenco, esegui di nuovo l'helper delle credenziali
per aggiungere l'host. Ad esempio, il seguente comando aggiunge
us-west1-docker.pkg.dev
.
Assistente per le credenziali della gcloud CLI:
gcloud auth configure-docker us-west1-docker.pkg.dev
Assistente per le credenziali autonomo
docker-credential-gcr configure-docker us-west1-docker.pkg.dev
Utilizzo di un token di accesso
Per l'autenticazione dei token di accesso, generi un token e lo utilizzi come password
con il comando docker login
. I token sono validi per 60 minuti, quindi
devono eseguire l'autenticazione poco prima di taggare, eseguire il push o il pull delle immagini.
L'esempio seguente genera un token di accesso utilizzando l'account di servizio
furto d'identità e poi
esegue l'autenticazione in Artifact Registry. Devi avere
dispongono delle autorizzazioni nel ruolo Creatore token account di servizio
(roles/iam.serviceAccountTokenCreator
) per generare un token in questo modo.
Linux
gcloud auth print-access-token \
--impersonate-service-account ACCOUNT | docker login \
-u oauth2accesstoken \
--password-stdin https://LOCATION-docker.pkg.dev
Windows
gcloud auth print-access-token \
--impersonate-service-account ACCOUNT
ya29.8QEQIfY_...
docker login -u oauth2accesstoken -p "ya29.8QEQIfY_..." \
https://LOCATION-docker.pkg.dev
Se non hai le autorizzazioni per impersonare un account di servizio, puoi attivare l'account di servizio nella sessione gcloud CLI e ottenere un token. Per maggiori dettagli, consulta le istruzioni per configurare il token di accesso autenticazione.
Utilizzo di una chiave dell'account di servizio
Per una chiave dell'account di servizio, devi utilizzare la chiave come password con docker login
.
Ad esempio, il comando seguente usa la chiave dell'account di servizio con codifica base64
nel file key.json
per l'autenticazione su us-west1-docker.pkg.dev
.
Linux
cat key.json | docker login -u _json_key_base64 --password-stdin \
https://us-west1-docker.pkg.dev
Windows
docker login -u _json_key_base64 --password-stdin https://us-west1-docker.pkg.dev < key.json
Per maggiori dettagli, consulta le istruzioni per la configurazione dell'autenticazione della chiave dell'account di servizio.
Push di un'immagine
Modalità repository: standard
Per eseguire il push di un'immagine locale in un repository Docker standard, devi contrassegnarla con il del repository ed eseguire il push dell'immagine.
Se nel repository Docker di Artifact Registry è abilitata l'immutabilità dei tag, un tag deve sempre fare riferimento allo stesso digest immagine nel repository. Non puoi utilizzare il tag su un'altra versione della stessa immagine che invii alla repository Git. Per ulteriori informazioni su sintesi, tag e tag delle immagini immutabilità, consulta Versioni immagine container.
Per le immagini di grandi dimensioni si applicano i seguenti limiti:
- Tempo di caricamento
- Se esegui l'autenticazione in Artifact Registry utilizzando un token di accesso, il token è valido solo per 60 minuti. Se prevedi che il tempo di caricamento supererà i 60 minuti, Utilizzare un metodo di autenticazione diverso.
- Dimensioni dell'immagine
- La dimensione massima dell'artefatto è 5 TB.
- Artifact Registry non supporta i caricamenti a blocchi Docker. Alcuni strumenti supportano il caricamento di immagini di grandi dimensioni tramite caricamenti a blocchi o un un singolo caricamento monolitico. Devi utilizzare caricamenti monolitici per eseguire il push delle immagini Artifact Registry.
Taggare l'immagine locale
Assicurati di aver eseguito l'autenticazione nel repository.
Determina il nome dell'immagine. Il formato del nome completo di un'immagine è:
LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE
Sostituisci i seguenti valori:
LOCATION è il una o più regioni posizione del repository in cui è viene archiviato.
PROJECT-ID è la tua console Google Cloud ID progetto. Se l'ID progetto contiene i due punti (":"), vedi Progetti con ambito dominio.
REPOSITORY è il nome del repository in cui l'immagine viene archiviato.
IMAGE è il nome dell'immagine. Può essere diverso da il nome locale dell'immagine.
Ad esempio, considera un'immagine con le seguenti caratteristiche:
- Località del repository:
us-west1
- Nome repository:
my-repo
- ID progetto:
my-project
- Nome immagine locale:
my-image
- Nome immagine di destinazione:
test-image
Il nome dell'immagine per questo esempio è:
us-west1-docker.pkg.dev/my-project/my-repo/test-image
Per maggiori dettagli sul formato del nome delle immagini, inclusa la gestione di progetti con ambito dominio, consulta i nomi di repository e immagini.
Contrassegna l'immagine locale con il nome del repository.
docker tag SOURCE-IMAGE LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
Sostituisci SOURCE-IMAGE con il nome locale dell'immagine o l'ID immagine e TAG con il tag. Se non specifichi un tag, Docker applica tag
latest
predefinito.Se l'impostazione dei tag immagine immutabili è abilitata, i tag devono essere univoci per ogni versione immagine, incluso il tag
latest
. Non puoi eseguire il push di un'immagine a nel repository se il tag è già utilizzato da un'altra versione nel repository. Per verificare se l'impostazione è abilitata per il parametro repository, esegui il comando:gcloud artifacts repositories describe REPOSITORY \ --project=PROJECT-ID \ --location=LOCATION
Per l'immagine di esempio del passaggio precedente, dovresti utilizzare il seguente codice se l'immagine locale
my-image
si trova nella directory attuale:docker tag my-image us-west1-docker.pkg.dev/my-project/my-repo/test-image
Se vuoi applicare un tag specifico, utilizza il comando:
docker tag SOURCE-IMAGE LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
Per utilizzare il tag
staging
con l'immagine di esempio, aggiungi:staging
a il comando:docker tag my-image us-west1-docker.pkg.dev/my-project/my-repo/test-image:staging
Esegui il push dell'immagine taggata in Artifact Registry
Assicurati di aver eseguito l'autenticazione nel repository.
Se hai usato
gcloud auth configure-docker
odocker-credential-gcr configure-docker
per configurare il client Docker, verifica che il nome host di destinazione sia presente nel file di configurazione Docker.Esegui il push dell'immagine taggata con il comando:
docker push LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE
Questo comando esegue il push dell'immagine che ha il tag
latest
. Se vuoi esegui il push di un'immagine con un tag diverso, utilizza il comando:docker push LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
Quando esegui il push di un'immagine, questa viene archiviata nel repository specificato.
Dopo aver eseguito il push dell'immagine, puoi:
Vai alla console Google Cloud per visualizzare dell'immagine.
Esegui il comando
gcloud
per visualizzare i tag dell'immagine e digest generato automaticamente:gcloud artifacts docker images list \ LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE [--include-tags]
L'output di esempio seguente mostra digest di immagini troncate, ma il comando restituisce sempre il digest completo dell'immagine.
IMAGE DIGEST CREATE_TIME UPDATE_TIME us-west1-docker.pkg.dev/my-project/my-repo/my-image sha256:85f... 2019-04-10T15:08:45 2019-04-10T15:08:45 us-west1-docker.pkg.dev/my-project/my-repo/my-image sha256:238... 2019-04-10T17:23:53 2019-04-10T17:23:53 us-west1-docker.pkg.dev/my-project/my-repo/my-image sha256:85f... 2019-04-10T15:08:46 2019-04-10T15:08:46
Pull delle immagini con Docker
Modalità repository: standard, remota, virtuale
Assicurati di aver eseguito l'autenticazione nel repository.
Se hai usato
gcloud auth configure-docker
odocker-credential-gcr configure-docker
per configurare il client Docker, verifica che il nome host di destinazione sia presente nel file di configurazione Docker.Per eseguire il pull da un repository, utilizza il comando:
docker pull LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
o
docker pull LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE@IMAGE-DIGEST
Sostituisci i seguenti valori:
- LOCATION è il una o più regioni posizione del repository in cui è viene archiviato.
- PROJECT è la tua console Google Cloud ID progetto. Se l'ID progetto contiene i due punti (":"), vedi Progetti con ambito dominio.
- REPOSITORY è il nome del repository in cui l'immagine viene archiviato.
- IMAGE è il nome dell'immagine nel repository.
- TAG è il tag della versione dell'immagine di cui vuoi eseguire il pull.
- IMAGE-DIGEST è il valore hash sha256 dei contenuti dell'immagine. Ogni versione di un'immagine ha un digest immagine univoco. Nella console Google Cloud, fai clic sull'immagine specifica per visualizzarne i metadati. Il digest è indicato come Sintesi immagine.
Ad esempio, considera un'immagine con le seguenti caratteristiche:
- Località del repository:
us-west1
- Nome repository:
my-repo
- ID progetto:
my-project
- Nome immagine:
test-image
- Tag:
staging
Questo comando per eseguire il pull dell'immagine è:
docker pull us-west1-docker.pkg.dev/my-project/my-repo/test-image:staging
Docker scarica l'immagine specificata.
Se richiedi un'immagine da un repository remoto, scarica e memorizza nella cache l'immagine dall'origine upstream se la copia memorizzata nella cache non viene esistono.
Se richiedi un'immagine da un repository virtuale, Artifact Registry cerca l'immagine richiesta nei repository upstream. Se richiedi un disponibile in più di un repository upstream, Artifact Registry sceglie un repository upstream da utilizzare in base le impostazioni di priorità configurate per il repository virtuale.
Ad esempio, considera un repository virtuale con le seguenti impostazioni di priorità per i repository upstream:
main-repo
: priorità impostata su100
secondary-repo1
: priorità impostata su80
.secondary-repo2
: priorità impostata su80
.test-repo
: priorità impostata su20
.
main-repo
ha il valore di priorità più alto, quindi il repository virtuale
lo cerca sempre per primo.
Sia secondary-repo1
che secondary-repo2
hanno la priorità impostata su 80
. Se
l'immagine richiesta non è disponibile in main-repo
, Artifact Registry
a cercare successivamente questi repository. Poiché entrambi hanno lo stesso valore di priorità,
Artifact Registry può scegliere di gestire un'immagine da entrambi i repository
se la versione è disponibile in entrambi.
test-repo
ha il valore di priorità più basso e pubblicherà un artefatto archiviato se
ma nessuno degli altri repository upstream lo contiene.
Pull delle immagini con crictl
crictl
è un utile strumento a riga di comando per il debug degli sviluppatori di runtime CRI
il runtime senza dover configurare i componenti di Kubernetes. Se le tue
I nodi di Google Kubernetes Engine utilizzano un runtime containerd, da cui puoi eseguire il pull delle immagini
Artifact Registry utilizzando crictl
.
Poiché crictl
è principalmente uno strumento per la risoluzione dei problemi, alcuni comandi Docker come
l'invio o l'assegnazione di tag alle immagini non sono disponibili.
Per eseguire il pull di un'immagine da Artifact Registry:
Nella console Google Cloud, vai alla pagina Istanze VM.
Accedi tramite SSH a il nodo di cui stai risolvendo i problemi.
Ottieni un token di accesso per l'autenticazione con il repository.
curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
Esegui il pull dell'immagine utilizzando
crictl pull --creds
e il valoreaccess_token
crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
o
crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE@IMAGE-DIGEST
L'output è simile al seguente:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
Passaggi successivi
- Scopri di più su come gestire i tag ed eliminare le immagini.
- Se vuoi eseguire container su Compute Engine, scopri di più container su Compute Engine.
- Utilizza
crictl
per eseguire il debug dei nodi Kubernetes - Scopri come utilizzare
crictl
per eseguire il pull delle immagini da Artifact Registry privato repository - Scopri di più sulla configurazione di
crictl
registri di immagini