Hur man kommer igång med Docker Engine API
Webbyrå » Digitala nyheter » Hur man blir en avancerad användare av Docker CLI med "-format" och utdatamallar

Hur man blir en avancerad användare av Docker CLI med "-format" och utdatamallar

Att använda Docker CLI för att lista och inspektera dina systemresurser producerar ofta detaljerade utdata som kan dölja viktiga detaljer. Docker stöder Gos mallsyntax i samband med --format flagga för att ge dig kontroll över vad som visas.

Att lära sig att använda mallar kan göra dig till en erfaren Docker CLI-användare. De låter dig effektivt välja och omvandla kommandoutgångar för att skapa de vyer du behöver. Detta resulterar i en mer produktiv CLI-upplevelse och mindre tid på att analysera långa konsolrader.

Vilka kommandon stöder "-format"?

La --format flaggan stöds av de mest använda docker order. Du kan använda den med docker inspect och kommandon som producerar listor med objekt, som t.ex docker ps, docker imageset docker volumes.

När du inkluderar --format flagga, kommer Docker att skicka kommandot ut genom den Go-modellsträng du tillhandahåller. Du kan använda mallfunktionerna som tillhandahålls av Go för att arbeta med platshållare som definieras av Docker. Dessa ger dig tillgång till data som hämtas av CLI.

Ett grundläggande exempel

drift docker inspect på en container visar ett långt JSON-objekt som vanligtvis svämmar över ditt terminalfönster. Använder sig av --formatdu kan extrahera de specifika delar av datan som intresserar dig. Här är ett exempel som visar status, PID och starttid för behållaren:

~$ docker inspect 94a8d1315315 --format '{{.State.Status}} (PID: {{.State.Pid}}) {{.State.StartedAt}}'
running (PID: 1488278) 2022-03-22T20:45:58.614115689Z

Det är mycket lättare att upptäcka målvärden med hjälp av ett mönster än genom att manuellt iterera genom den råa JSON.

Få tillgång till utdatavärden

Dynamiska delar av din mall är omgivna av dubbla krulliga parenteser. Du kan referera värden i Docker-kommandoutdata med {{.Field}} syntax. Field måste vara namnet på en egenskap i JSON-representationen av denna utdata. Kapslade fält väljs med en kedjad syntax som liknar egendomsåtkomster i JavaScript, .Field.NestedValue.

Du kan bestämma vilka fält som är tillgängliga genom att visa råutdata från kommandot. docker inspect visar JSON som standard; detta kan direkt mappas till mallsyntaxplatshållare. För andra kommandon som t.ex ps et imagesdu kan hämta den underliggande JSON-strukturen med hjälp av en speciell mall:

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

La json Funktionen visar den råa JSON-versionen av den data du tillhandahåller.

Enkla transformationer

Transformeringsfunktioner ger ett bekvämt sätt att manipulera värden. upper et lower konvertera strängar till versaler respektive gemener. Du kan använda skiftläge på en sträng med title. Funktioner infogas i modellen före värdet som de verkar på:

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

Om du vill lägga till ett nyradstecken mellan värden, använd println fungera:

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

Arbeta med tabeller

Mallsyntaxen har inbyggt stöd för att iterera elementen i en array. De range funktionen loopar över värdena för en array och ställer in . variabel för varje:

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

Du kan kombinera arrayelement med join fungera:

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

Detta skapar en sträng som bäddar in varje värde i arrayen. Objekt sammanfogas med texten som anges som den andra argumentparametern.

Fliken Utdata

Många Docker-kommandon visar data i en läsbar tabelllayout som standard. Du kan skapa dina egna arrayer med hjälp av specialen table modellkomponent.

Utnyttjande t tecken för att separera datafält i tabellkolumner. Mallen kommer att köras för vart och ett av objekten som ingår i Docker CLI-kommandot. Tabellkolumner anpassas automatiskt till längden på innehållet.

~$ docker images --format 'table {{.ID}}t{{.Tag}}t{{.Size}}'
IMAGE ID       TAG          SIZE
ede20431e41f   caddy        40.4MB
e5179b119094   <none>       40.4MB

Docker inkluderar automatiskt lämpliga kolumnrubriker för fält i din modell.

Villkorlig formatering

Mallar stöder också villkorade "om"-satser. Du kan dynamiskt anpassa kommandoutmatningen genom att visa ett annat värde baserat på ett villkor:

~$ docker ps --format '{{.ID}} {{if eq .State "running"}}Alive{{else}}Not Running{{end}}'
94a8d1315315 Alive

Denna modell visar antingen Alive ou Not Running beroende på om varje behållare State fältet är inställt på running. den if blocket följs av värdet som visas när villkoret matchar. En valfri else blocket kan kedjas efteråt. Villkoret avslutas av {{end}} nyckelord.

Go-modeller inkluderar flera jämförelseoperatörer. De eq ovan kontrollerar om det första värdet är lika med det andra. Följande alternativ är dessutom tillgängliga:

  • ne – En "annan än" jämförelse.
  • lt – En "mindre än" jämförelse (<)).
  • lte – En "mindre än eller lika med" jämförelse (<=)).
  • gt – En "större än" jämförelse (>)).
  • gte – En "större än eller lika med" (>=) jämförelse.

Där and, oret not också nyckelord för att kedja förhållanden i komplexa uttryck.

Avancerad formatering med Jq

La --format flaggan används främst för att skapa läsbara utdatasträngar. Om du är mer bekväm med att inspektera rå JSON kan du använda andra verktyg som jq för att mer direkt manipulera utdata från Docker. Detta kan vara användbart när du vill skapa mer avancerade frågor än Go-mallar ensamma kan ge.

docker inspect producerar JSON som standard så att dess utdata kan kopplas direkt till jq:

~$ docker inspect 94a8d1315315 | jq .[0].Config.Cmd
[
  "caddy",
  "run",
  "--config",
  "/etc/caddy/Caddyfile",
  "--adapter",
  "caddyfile"
]

Utdata från andra kommandon bör konverteras till dess råa JSON med --format innan det vidarebefordras till jq:

~$ docker images --format '{{json .}}' | jq .Size
"968MB"
"946MB"
"40.1MB"

Jq tillhandahåller sin egen syntax för att välja, manipulera och formatera JSON-data. Grunderna liknar Gos mallplatshållare. Fält refereras med hjälp av .Field syntax. Det finns stöd för att välja arrayelement med hjälp av .[index] notering.

Slutsats

Docker CLI blir kraftfullare när du selektivt kan visa och manipulera utdata. Gå modeller med --format flagga erbjuder ett sätt att skapa anpassade gränssnitt som effektiviserar din containerhantering.

I vissa situationer, --format kanske inte erbjuder den kraft och flexibilitet du behöver. Vidarebefordra Docker-kommandon till externa verktyg som t.ex jq ger ett annat sätt att snabbt fråga din installation och få dess data att visas i andra system.

★ ★ ★ ★ ★