Siamo entusiasti di annunciare che Skopeo 1.0 è stato rilasciato.
Parlo spesso di tutti i nuovi strumenti per container che abbiamo sviluppato negli ultimi anni e spesso passiamo in rassegna Skopeo. Ma Skopeo è stato il primo e ha davvero delle fantastiche funzioni.
Skopeo è uno strumento per spostare le immagini dei container tra diversi tipi di archiviazione dei container. Ti consente di copiare le immagini del contenitore tra i registri del contenitore come docker.io , quay.io e il registro del contenitore interno o diversi tipi di archiviazione sul sistema locale. È possibile copiare in un contenitore / repository di archiviazione locale , anche direttamente in un demone Docker.
Una delle cose migliori di Skopeo è che non è necessario essere root per eseguirlo e non è necessario archiviare le immagini localmente se si sta semplicemente copiando da un registro container a un altro. Skopeo non richiede che un demone sia in esecuzione per eseguire le sue operazioni. Credo che sia una soluzione molto migliore che dover correre
podman pull IMAGE; podman push IMAGE
.
Skopeo viene utilizzato in tutto il mondo per spostare le immagini dei container. Viene utilizzato nei sistemi CI / CD per mantenere aggiornati i registri dei contenitori, nonché per caricare l'archiviazione dei contenitori per tutti i diversi tipi di server dei contenitori.
Storia
Skopeo era originariamente un progetto collaterale che Antonio Murdaca di Red Hat ha iniziato a visualizzare il file JSON dell'immagine contenitore memorizzato in un registro contenitore. Le immagini del contenitore, siano esse immagini OCI (Open Container Initiative) o Docker, sono costituite da due parti. Una parte è un tarball della directory rootfs. Questa directory, che tende ad apparire come il file system di root sul sistema operativo linux, contiene tutto il codice e i file di configurazione richiesti per eseguire un'applicazione.
La seconda parte è un file JSON che descrive l'applicazione, questo è l'input dello sviluppatore dell'immagine del contenitore, come si aspetta che venga eseguito il contenitore. Include entrypoint e cmd che descrivono il percorso dell'eseguibile per avviare il contenitore. Include anche contenuti come variabili di ambiente e directory di lavoro. Fondamentalmente, tutti quei campi extra che le persone vedono nelle definizioni Dockerfile. Questi campi non sono standardizzati come parte della specifica dell'immagine OCI .
Questi tarball di immagini possono diventare molto grandi, ho visto immagini multi-gigabyte. Il problema era che se volevi visualizzare il file JSON di specifica dell'immagine, l'unico modo per farlo era fare un docker pull IMAGE; finestra mobile ispeziona IMMAGINE. Alcuni anni fa abbiamo aperto una richiesta pull con il progetto Docker upstream per fare un 'docker inspect --remote IMAGE, la richiesta è stata respinta, perché i manutentori non volevano complicare la CLI Docker. Ma ci è stato detto che i registri dei container erano solo server Web e che dovevamo creare il nostro strumento per estrarre il file JSON. Antonio ha creato questo strumento e lo ha chiamato Skopeo, che è la parola greca per la visualizzazione remota.
Antonio ha pensato che se avesse tirato fuori la specifica dell'immagine, avrebbe potuto anche tirare l'immagine. Una volta estratta l'immagine, ha immaginato di poter spingere l'immagine e Skopeo si è sviluppato in uno strumento in grado di copiare le immagini del contenitore tra tutti i diversi tipi di archiviazione del contenitore.
Red Hat stava lavorando con CoreOS prima della fusione delle società e CoreOS voleva utilizzare Skopeo per copiare le immagini sui loro host da utilizzare con il loro motore contenitore
rkt
. Ma gli sviluppatori CoreOS non volevano uscire su Skopeo, volevano chiamare una libreria Golang. Questo ci ha portato a dividere Skopeo in uno strumento da riga di comando e in una libreria separata github.com/containers/image . Questa libreria è ora condivisa da molti altri motori container tra cui Podman , Buildah , CRI-O .
USO
$ skopeo --help
Varie operazioni con immagini contenitore e registri immagini contenitore
Utilizzo:
skopeo [comando]
Comandi disponibili:
copia Copia un IMAGE-NAME da una posizione a un'altra
elimina Elimina immagine IMAGE-NAME
aiuto Aiuto su qualsiasi comando
ispeziona Immagine IMAGE-NAME
list-tags Elenca i tag nel trasporto / repository specificato dal login REPOSITORY-NAME
Accedi a un logout del registro container
Logout di un manifest-digest del registro container
Calcola un digest manifest di un file
standalone-sign Crea una firma utilizzando i file locali
standalone-verifica Verifica una firma utilizzando la sincronizzazione dei file locali
Sincronizza una o più immagini da una posizione a un'altra
Skopeo opera sui seguenti tipi di immagine e repository:
Registri dei contenitori:
Un'immagine in un registro che implementa "Docker Registry HTTP API V2". docker: // finestra mobile-riferimento. Lo stato di autorizzazione è memorizzato in
$XDG_RUNTIME_DIR/containers/auth.json
, che è impostato usando (skopeo login).
Conservazione del contenitore
Un'immagine situata in un contenitore locale / archivio di immagini di archiviazione. Ubicazione e negozio di immagini specificati in
/etc/containers/storage.conf
.
File system locale
Un percorso di directory locale esistente che memorizza manifest, layer tarball e firme come singoli file. Questo è un formato non standardizzato, utile principalmente per il debug o l'ispezione non invasiva del contenitore.
Archivio Docker
Un'immagine è memorizzata nella finestra mobile salva il file formattato. docker-reference viene utilizzato solo durante la creazione di tale file e non deve contenere un digest.
Docker Daemon
Un riferimento finestra mobile immagine memorizzato nella memoria interna del demone finestra mobile. Docker-Reference deve contenere un tag o un digest. In alternativa, durante la lettura di immagini, il formato può anche essere docker-daemon: algo: digest (un ID immagine).
Directory locale con formattazione OCI
Un tag immagine in una directory conforme a "Specifica layout immagine contenitore aperto" nel percorso.
Esempi
Ispezione di un repository
Esempi:
$ skopeo inspect --config docker: //quay.io/podman/stable | json_pp
{
"architecture": "amd64",
"config": {
"Cmd": [
"/ bin / bash"
],
"Env": [
"DISTTAG = f32container",
"FGC = f32",
"container = oci" ,
"PATH = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin",
"_CONTAINERS_USERNS_CONFIGURED ="
],
"Labels": {
"licenza": "MIT",
"name": "fedora",
"vendor": "Fedora Project",
"version":
...
],
"os": "linux",
"rootfs": {
"diff_ids": [
"sha256: a4c0fa2b217d3fd63d51e55a6fd59432e543d499c0df2b1acd48fbe424f2ddd1",
"SHA256: 120e15c4fd15cb42f0fc028a5105f3923b928c3cb766afc6cbc2c14a78b49387",
"sha256: f100a96598ff0e42eede39a8cd57ff85c3478f942074216572b01d1d614fc083",
"sha256: dbb194061737e6970cc735cee0b2353d541f51fe12a69cffb3827cce4cdf5c25",
"sha256: 8dc1236d8bfbd7be7b8bf04677f5dd20fa41bbe6bd98688408071b1d4ec3ecf7 "
],
" type ":" layers "
}
}
Copia di immagini
Skopeo può copiare immagini di container tra vari meccanismi di archiviazione:
$ skopeo copy docker: //registry.access.redhat.com/ubi8-init docker: //reg.company.com/ubi-init
Ottenere le firme della fonte dell'immagine
Copia del BLOB 58e1deb9693d done
Copia del BLOB f544909c6b5a done
Copia del BLOB 78afc5364ad2 done
Copia config a858c9c7 fatto
Scrittura manifest su destinazione immagine
Memorizzazione delle firme
a858c9c7ea130b17bad01c858a20f4392085bcc0f25aa5eeee4b16726bed5bab
$ skopeo copy docker: //registry.fedoraproject.org/fedora: latest container-storage: fedora
Ottenere le firme della fonte dell'immagine
Copia del BLOB 3088721d7dbf fatto
Copia della configurazione d81c91deec fatto
Scrittura del manifest sull'immagine destinazione
Memorizzazione delle firme
Eliminazione di immagini da un registro
Per esempio,
$ skopeo delete docker: // localhost: 5000 / imagename: latest
Conclusione
Skopeo è un ottimo strumento leggero per aiutare gli utenti e gli amministratori a mantenere la propria infrastruttura di immagini container. Sebbene non abbia ricevuto l'attenzione che probabilmente merita, Skopeo è uno strumento davvero eccezionale da avere nella propria cassetta degli attrezzi.