Come standardizzare la consegna del software con artefatti OCI, ORAS e Docker Hub

0
30

Docker Hub è il registro più noto per la distribuzione e la condivisione di immagini di container. Tuttavia, Docker Hub e altri registri conformi a OCI ora possono fare molto di più che semplici immagini di container. Il progetto ORAS (OCI Registry As Storage) trasforma i registri in negozi di artefatti generici, in grado di pubblicare qualsiasi risorsa rilevante per la tua applicazione.

In questo articolo imparerai cos'è ORAS, le sfide risolve e come iniziare a usarlo con Docker Hub.

Docker Hub vs OCI Registries

Innanzitutto, chiariamo un dettaglio: l'ecosistema di container è più di un semplice Docker. Gli strumenti e i processi di cui Docker è stato pioniere sono stati standardizzati dall'OCI. Docker è ora un'implementazione delle specifiche OCI, insieme ad altri sistemi di container compatibili come Podman e Kubernetes.

Docker Hub è una piattaforma compatibile con OCI Registry per la distribuzione di immagini di container. Gli strumenti del contenitore OCI possono consumare contenuto da Docker Hub e altri registri tramite comandi come docker pull e docker push. Sebbene in precedenza funzionassero solo con le immagini contenitore, ora puoi utilizzare lo stesso meccanismo per distribuire gli altri componenti della tua app.

Perché gli artefatti generici sono importanti

Questa funzionalità è stata sviluppata sotto il banner ORAS. Rimodella i registri come “negozi di artefatti generici” con cui puoi interagire utilizzando il familiare flusso di lavoro push/pull.

Un artefatto è tutto ciò di cui un utente potrebbe aver bisogno per eseguire correttamente il tuo software. Potrebbe trattarsi di un'immagine contenitore o di un altro tipo di risorsa che abbia senso per il tuo progetto:

  • Grafici Helm
  • Binario precompilato e pacchetti di installazione
  • SBOM
  • Configurazioni dei criteri di sicurezza consigliate, come le regole OPA
  • Rilascio di firme, certificati e metadati

Queste risorse vitali possono spesso essere difficili da trovare per gli utenti. Tendono a essere sparsi su diverse piattaforme di controllo del codice sorgente, gestori di pacchetti e download diretti di siti Web. Con ORAS, puoi depositare tutto in un registro centralizzato, quindi consentire agli utenti di recuperare i contenuti utilizzando un unico set di strumenti e credenziali. Visualizzare la SBOM per la versione v1.1.0 è semplice, ad esempio, come oras pull example.com/my-app/sbom:v1.1.0.

ORAS è una modifica sostanziale per le immagini del contenitore?

ORAS non viola alcuna funzionalità del registro contenitore esistente. Puoi continuare a eseguire comandi come docker push my-image:latest per spostare le tue immagini.

Tuttavia, dietro le quinte sono state apportate modifiche significative all'archiviazione dei contenuti. ORAS rimuove il presupposto storico che tutto il contenuto del registro sia un'immagine. Per supportare gli artefatti, i registri devono tenere traccia del tipo di ogni caricamento completato. Diversi tipi di artefatti sono definiti “tipi di media” all'interno di ORAS.

I progetti di comunità popolari possono registrare i propri tipi di media per identificare le classificazioni degli artefatti di uso comune, come i grafici Helm. Ciò consente ai fornitori di registri di visualizzare informazioni pertinenti sugli artefatti che hai archiviato.

Il tipo di supporto dell'immagine del contenitore viene utilizzato automaticamente quando esegui il push da strumenti esistenti come docker push. Un valore predefinito “sconosciuto” viene applicato quando si carica direttamente dalla CLI ORAS, a meno che non si specifichi un tipo registrato.

Installazione della CLI ORAS

È necessario la CLI ORAS per eseguire il push e il pull di artefatti con tipi arbitrari. Puoi scaricare l'ultima versione dalla pagina delle versioni di GitHub del progetto. Attualmente sono supportati solo i sistemi macOS e Linux.

Estrai l'archivio scaricato, quindi copia il binario oras in una posizione che si trova nel tuo percorso:

$ tar -zxf oras_0.16.0_*.tar.gz -C oras-install/$ mv oras-install/oras /usr/local/bin/$ rm -rf oras_0.16.0_*.tar.gz oras-install/

Controlla il funzionamento del tuo binario eseguendo il comando oras version:

$ oras version 0.16.0

Ora sei pronto per iniziare a utilizzare ORAS.

Utilizzo di ORAS con Docker Hub

ORAS è compatibile solo con i registri che hanno implementato il supporto per la specifica OCI Artifacts. Questo elenco include ora la maggior parte dei principali fornitori, tra cui Amazon ECR, Azure, Google e GitHub, nonché istanze self-hosted distribuite utilizzando la distribuzione CNCF.

Utilizzeremo Docker Hub per questo articolo poiché è la soluzione di registro più popolare. Ha aggiunto il supporto completo per gli artefatti OCI nel novembre 2022.

Accedi al tuo registro

ORAS riutilizza automaticamente le credenziali di registro che hai precedentemente aggiunto al tuo file ~/.docker/config.json. Se devi accedere a Docker Hub, puoi eseguire docker login o oras login per farlo:

$ oras login -u username -p password_or_personal_access_token $ docker login -u username -p password_or_personal_access_token

Quindi crea un semplice file da caricare in anagrafica. Ricorda che non ci sono restrizioni sul tipo di risorsa che spingi. Questo esempio è un file JSON artificioso che descrive lo stato del progetto, ma puoi caricare qualsiasi cosa che possa essere utile ai tuoi utenti o sviluppatori.

$ echo '{“app”: “oras-demo”, “version”: “1.1.0”}' > artifact.json

Ora sei pronto per eseguire il push del tuo file con la CLI di ORAS.

Push Your Artifact

Esegui il seguente comando per inviare il tuo artefatto, dopo aver sostituito <username> con il tuo vero nome utente Docker Hub:

$ oras push docker.io/<username>/oras-demo:1.1.0 artifact.json:application/json –artifact-type application/vnd.unknown.config.v1+json Caricamento 7ac68d8d2a12 artifact.json Caricato 7ac68d8d2a12 artifact.json Pushed docker.io/ilmiont/oras-demo:1.1.0 Digest: sha256:41abfed0ab43a24933c5eafe3c363418264a59eee527821a39fe7c0abf25570b

Ci sono alcuni dettagli degni di nota in questo comando:

    Il primo argomento define
  • A differenza della CLI docker, ORAS richiede di specificare l'URL del registro (docker.io per Docker Hub). ORAS è uno strumento generico che non può fare supposizioni su cosa o dove stai spingendo.
  • Il secondo argomento specifica il percorso del file che stai caricando in filename:content -tipo formato. Poiché il file di esempio è JSON, viene selezionato il tipo di contenuto application/json.
  • Il terzo argomento specifica il tipo di artefatto ORAS (tipo di supporto) da assegnare all'artefatto. Dovresti utilizzare un tipo di supporto standard se stai caricando un tipo di artefatto registrato, come un grafico Helm, ma l'elemento “sconosciuto” il valore predefinito è appropriato per questa demo.

L'avanzamento del caricamento viene mostrato nel tuo terminale, in modo simile a un normale docker push. Prova a eseguire il comando oras repo tags per confermare che il push è stato completato:

$ oras repo tags docker.io/<username>/oras-demo 1.1.0

Gestione degli artefatti nell'interfaccia utente di Docker Hub

Il tuo artefatto apparirà anche sul sito web di Docker Hub. Nell'elenco Repository, vedrai Contiene: Altro per indicare che il repository contiene un artefatto generico. I repository di immagini contenitore sono etichettati come Contiene: Immagine.

Seleziona repository per visualizzarne i dettagli, aggiungere una descrizione e vedere tutti i tag disponibili. È simile a lavorare con le immagini contenitore.

Tirando il tuo manufatto

Con il tuo artefatto disponibile nel registro, ora puoi passare a un'altra macchina e ripetere i passaggi per installare la CLI ORAS e accedere al tuo account Docker Hub. Dopo esserti autenticato, usa il comando oras pull per recuperare il tuo artefatto:

$ oras pull docker.io/<username>/oras-demo:1.1.0 Download di 7ac68d8d2a12 artifact.json Hai scaricato l'artefatto 7ac68d8d2a12. json Pulled docker.io/ilmiont/oras-demo:1.1.0 Digest: sha256:41abfed0ab43a24933c5eafe3c363418264a59eee527821a39fe7c0abf25570b

I file nell'artefatto verranno depositati nella tua directory di lavoro:

$ ls artifact.json $ cat artifact.json {“app”: “demo-oras”, “version”: “1.1.0”}

Hai utilizzato con successo ORAS per distribuire gli artefatti della tua applicazione, utilizzando l'infrastruttura esistente disponibile dal provider del registro contenitori.

Riepilogo

ORAS trasforma i registri delle immagini dei container in piattaforme di distribuzione generiche. Puoi eseguire il push di qualsiasi artefatto rilevante per la tua applicazione e gli utenti possono recuperarlo utilizzando un meccanismo coerente. Ciò evita di dover mantenere, pubblicare e passare da un canale di distribuzione all'altro.

Il supporto di ORAS viene aggiunto anche ai più diffusi strumenti dell'ecosistema. Helm ti consente di inviare direttamente i grafici a un registro ORAS utilizzando il suo comando push helm, ad esempio. Ciò evita di dover esportare manualmente il grafico in modo da poterlo inviare con oras push. Gestisce anche l'impostazione del tipo di supporto ORAS corretto per te. Puoi aspettarti più strumenti per iniziare a integrare ORAS, permettendoti di inviare tutti i tipi di contenuto direttamente al tuo registro centralizzato.

LEGGI SUCCESSIVO

  • › Il campanello video più economico di Ring ha appena raggiunto il miglior prezzo finora
  • › L'iPhone ha appena ricevuto una fantastica nuova app Mastodon
  • › I nuovi MacBook Pro hanno uno storage ancora più veloce
  • › La nuova CPU Ryzen 7000X3D di AMD è appena migliorata
  • › 3 modi per inserire collegamenti ipertestuali in Microsoft Excel
  • › Acquista un'unità SSD Samsung 980 Pro da 1 TB a soli $ 120