Come diventare un utente esperto della Docker CLI con “–format” e modelli di output

0
108

L'utilizzo della Docker CLI per elencare e ispezionare le risorse sul sistema produce spesso un output dettagliato che può nascondere dettagli importanti. Docker supporta la sintassi dei modelli di Go insieme al flag –format per darti il ​​controllo su ciò che viene visualizzato.

Imparare a utilizzare i modelli può trasformarti in un utente esperto della Docker CLI . Ti consentono di selezionare e trasformare in modo efficiente gli output dei comandi per creare le viste di cui hai bisogno. Ciò si traduce in un'esperienza CLI più produttiva e meno tempo dedicato alla scansione di lunghe linee di console.

Quali comandi supportano “–format”?

Il flag –format è supportato dai comandi docker più comunemente usati. Puoi usarlo con docker inspect e comandi che producono elenchi di elementi, come docker ps, immagini docker e volumi docker.

Quando includi il flag –format, Docker invierà l'output del comando tramite la stringa del modello Go che fornisci. Puoi utilizzare le funzionalità di creazione di modelli fornite da Go per utilizzare i segnaposto impostati da Docker. Questi ti danno accesso ai dati recuperati dalla CLI.

Un esempio di base

L'esecuzione di docker inspect su un container mostra un lungo oggetto JSON che di solito trabocca la finestra del terminale. Usando –format, puoi estrarre le parti specifiche dei dati che ti interessano. Ecco un esempio che mostra lo stato, il PID e l'ora di inizio del contenitore:

~$ finestra mobile ispeziona 94a8d1315315 –format '{{.State.Status}} (PID: {{.State.Pid}}) {{.State.StartedAt}}' in esecuzione (PID: 1488278) 2022-03-22T20: 45:58.614115689Z

È molto più facile individuare i valori target utilizzando un modello rispetto a quando si sfoglia manualmente il JSON grezzo.

Accesso ai valori di output

Le parti dinamiche del modello sono racchiuse tra parentesi quadre doppie. Puoi fare riferimento ai valori all'interno dell'output del comando Docker utilizzando la sintassi {{.Field}}. Il campo deve essere il nome di una proprietà nella rappresentazione JSON di tale output. I campi nidificati vengono selezionati utilizzando una sintassi concatenata simile agli accessi alle proprietà in JavaScript, .Field.NestedValue.

Puoi determinare quali campi sono disponibili visualizzando l'output non elaborato del comando. docker inspect mostra JSON per impostazione predefinita; questo può essere mappato direttamente ai segnaposto della sintassi del modello. Per altri comandi come ps e immagini, puoi recuperare la struttura JSON sottostante utilizzando un modello speciale:

docker ps –format '{{json .}}`

La funzione json mostra la versione JSON grezza dei dati forniti.

Trasformazioni semplici

Le funzioni di trasformazione offrono un modo conveniente per manipolare i valori. upper e lower convertono le stringhe rispettivamente in maiuscolo e minuscolo. È possibile applicare la maiuscola del titolo a una stringa con titolo. Le funzioni vengono inserite nel modello prima del valore su cui operano:

~$ docker inspect 94a8d1315315 –format '{{upper .State.Status}} (PID: {{.State.Pid}})' ESECUZIONE (PID: 1488278)

Se vuoi aggiungere un carattere di nuova riga tra i valori, usa la funzione println:

~$ docker inspect 94a8d1315315 –format '{{.State.Status}} {{.State.Pid}}{{println}} {{.State.StartedAt}}' in esecuzione 1488278 2022-03-22T20:45:58.614115689Z

Lavorare con gli array

La sintassi del modello ha integrato il supporto per iterare gli elementi di un array. La funzione di intervallo esegue il loop sui valori di una matrice e imposta il . variabile a ciascuno:

~$ docker inspect 94a8d1315315 –format '{{range .Mounts}}{{println .Destination}}{{end}}' /config /data

Puoi combinare elementi dell'array insieme alla funzione di unione:

~$ docker inspect 94a8d1315315 –format '{{join .Config.Cmd ” “}}' caddy run –config /etc/caddy/Caddyfile –adapter caddyfile

Questo crea una stringa che incorpora ogni valore nel Vettore. Gli elementi vengono uniti insieme al testo specificato come secondo parametro dell'argomento.

Tabulare l'output

Molti comandi Docker per impostazione predefinita mostrano i dati in un layout di tabella leggibile dall'uomo. Puoi creare le tue tabelle utilizzando il componente speciale del modello di tabella.

Utilizza t caratteri per separare i campi di dati in colonne di tabella. Il modello verrà eseguito per ciascuno degli elementi inclusi nell'output del comando Docker CLI. Le colonne della tabella vengono ridimensionate automaticamente in base alla lunghezza del loro contenuto.

~$ immagini docker –format 'table {{.ID}}t{{.Tag}}t{{.Size}}' DIMENSIONE TAG ID IMMAGINE ede20431e41f caddy 40,4 MB e5179b119094 <none> 40,4 MB

Docker include automaticamente le intestazioni di colonna appropriate per i campi del tuo modello.

Formattazione condizionale

I modelli supportano “if“condizionale 8221; anche dichiarazioni. Puoi personalizzare dinamicamente l'output del comando visualizzando un valore diverso in base a una condizione:

~$ docker ps –format '{{.ID}} {{if eq .State “running”}} Alive{{else}}Non in esecuzione{{end}}' 94a8d1315315 Alive

Questo modello visualizza Alive o Not Running a seconda che il campo Stato di ogni contenitore sia impostato su In esecuzione. Il blocco if è seguito dal valore mostrato quando la condizione corrisponde. Un blocco else opzionale può essere concatenato in seguito. La condizione viene terminata dalla parola chiave {{end}}.

I modelli Go comprendono diversi operatori di confronto. L'eq mostrata sopra controlla se il primo valore è uguale al secondo. Sono inoltre disponibili le seguenti opzioni:

  • non – Un “non uguale a” confronto.
  • lt – Un “meno di” (<) confronto).
  • lte – Un “minore o uguale a” (<=) confronto).
  • gt – Un “maggiore di” (>) confronto).
  • gte – Un “maggiore o uguale a” (>=) confronto).

Ci sono e, o, e non anche parole chiave per concatenare le condizioni in espressioni complesse.

Formattazione avanzata tramite Jq

Il flag –format viene utilizzato principalmente per creare stringhe di output leggibili dall'uomo. Se ti senti più a tuo agio nell'ispezione di JSON non elaborato, puoi utilizzare altri strumenti come jq per manipolare l'output di Docker in modo più diretto. Questo può essere utile quando desideri creare query più avanzate di quelle che i modelli Go da soli possono fornire.

docker inspect produce JSON per impostazione predefinita in modo che il suo output possa essere reindirizzato direttamente a jq:

~$ ispezione finestra mobile 94a8d1315315 | jq .[0].Config.Cmd [ “caddy”, “run”, “–config”, “/etc/caddy/Caddyfile”, “–adapter”, “caddyfile” ]

L'output da altri i comandi dovrebbero essere convertiti nel suo JSON grezzo con –format prima che venga passato a jq:

~$ docker images –format '{{json .}}' | jq .Dimensioni “968 MB” “946 MB” “40,1 MB”

Jq fornisce la propria sintassi per selezionare, manipolare e formattare i dati JSON. I fondamenti sono simili ai segnaposto dei modelli di Go. I campi sono referenziati usando la sintassi .Field. È disponibile il supporto per la selezione di elementi dell'array utilizzando la notazione .[index].

Conclusione

La Docker CLI diventa più potente quando puoi visualizzare e manipolare i dati di output. I modelli Go con il flag –format forniscono un modo per creare interfacce personalizzate che semplificano la gestione dei tuoi container.

In alcune situazioni, –format potrebbe non offrire ancora la potenza e la flessibilità di cui hai bisogno. Il piping dei comandi Docker a strumenti esterni come jq fornisce un altro modo per interrogare rapidamente l'installazione e far emergere i suoi dati all'interno di altri sistemi.

LEGGI SUCCESSIVO

  • › Le nuove foto spaziali della NASA sono gli sfondi perfetti per il desktop
  • › Recensione del proiettore XGIMI Horizon Pro 4K: brillante e brillante
  • › Recensione del tablet Amazon Fire 7 Kids (2022): sicuro, robusto, ma lento
  • › Quanto costa caricare un'auto elettrica?
  • › Quanto riscalda la tua casa il tuo computer?
  • › 7 funzioni di Gmail poco conosciute che dovresti provare