banner large

Cara Menjadi Power User Docker CLI Dengan “–format” dan Output Template

Comment
X
Share

Menggunakan CLI Docker untuk membuat daftar dan memeriksa sumber daya pada sistem Anda sering kali menghasilkan keluaran verbose yang dapat menyembunyikan detail penting. Docker mendukung sintaks templating Go dalam hubungannya dengan --format bendera untuk memberi Anda kendali atas apa yang ditampilkan.

Mempelajari cara menggunakan template dapat mengubah Anda menjadi pengguna kuat Docker CLI. Mereka memungkinkan Anda memilih dan mengubah output perintah secara efisien untuk membuat tampilan yang Anda butuhkan. Ini menghasilkan pengalaman CLI yang lebih produktif dan lebih sedikit waktu yang dihabiskan untuk memindai baris konsol yang panjang.

Perintah Manakah yang Mendukung “–format”?

Itu --format bendera didukung oleh yang paling umum digunakan docker perintah. Anda dapat menggunakannya dengan docker inspect dan perintah yang menghasilkan daftar item, seperti docker ps, docker imagesdan docker volumes.

Ketika Anda memasukkan --format flag, Docker akan mengirimkan output perintah melalui string template Go yang Anda berikan. Anda dapat menggunakan fitur templating yang disediakan oleh Go untuk menggunakan placeholder yang disetel oleh Docker. Ini memberi Anda akses ke data yang diambil oleh CLI.

Contoh Dasar

Berlari docker inspect pada wadah menampilkan objek JSON panjang yang biasanya memenuhi jendela terminal Anda. Menggunakan --formatAnda dapat menarik bagian tertentu dari data yang Anda minati. Berikut adalah contoh yang menunjukkan status penampung, PID, dan waktu mulai:

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

Jauh lebih mudah untuk menemukan nilai target menggunakan template daripada saat menelusuri JSON mentah secara manual.

Mengakses Nilai Keluaran

Bagian dinamis dari template Anda dibungkus dengan tanda kurung kurawal ganda. Anda dapat mereferensikan nilai dalam output perintah Docker menggunakan {{.Field}} sintaksis. Field harus menjadi nama properti dalam representasi JSON dari output itu. Bidang bersarang dipilih menggunakan sintaks berantai yang mirip dengan akses properti di JavaScript, .Field.NestedValue.

Anda dapat mengetahui bidang mana yang tersedia dengan melihat output mentah perintah. docker inspect menampilkan JSON secara default; ini dapat langsung dipetakan ke placeholder sintaks template. Untuk perintah lain seperti ps dan imagesAnda dapat mengambil struktur JSON yang mendasarinya menggunakan templat khusus:

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

Itu json fungsi menampilkan versi mentah JSON dari data yang Anda berikan.

Transformasi Sederhana

Fungsi transformasi menawarkan cara mudah untuk memanipulasi nilai. upper dan lower mengkonversi string ke huruf besar dan huruf kecil masing-masing. Anda dapat menerapkan casing judul ke string dengan title. Fungsi dimasukkan ke dalam template sebelum nilai operasinya:

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

Jika Anda ingin menambahkan karakter baris baru di antara nilai, gunakan println fungsi:

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

Bekerja dengan Array

Sintaks template memiliki dukungan terintegrasi untuk iterasi elemen array. Itu range fungsi mengulang nilai array dan menyetel . variabel untuk masing-masing:

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

Anda dapat menggabungkan elemen array bersama-sama dengan join fungsi:

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

Ini menciptakan string yang menggabungkan setiap nilai dalam array. Elemen digabungkan bersama dengan teks yang ditentukan sebagai parameter kedua argumen.

Keluaran Tabulasi

Banyak perintah Docker default untuk menampilkan data dalam tata letak tabel yang dapat dibaca manusia. Anda dapat membuat tabel sendiri menggunakan spesial table komponen templat.

Menggunakan t karakter untuk memisahkan bidang data ke dalam kolom tabel. Template akan dieksekusi untuk setiap item yang disertakan dalam output perintah Docker CLI. Kolom tabel secara otomatis berukuran agar sesuai dengan panjang kontennya.

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

Docker secara otomatis menyertakan tajuk kolom yang sesuai untuk bidang di template Anda.

Pemformatan Bersyarat

Template juga mendukung pernyataan “jika” bersyarat. Anda dapat menyesuaikan output perintah secara dinamis dengan menampilkan nilai yang berbeda berdasarkan kondisi:

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

Template ini menampilkan baik Alive atau Not Running tergantung pada apakah masing-masing wadah State bidang diatur ke running. Itu if blok diikuti oleh nilai yang ditampilkan saat kondisinya cocok. Sebuah opsional else blok dapat dirantai sesudahnya. Kondisi diakhiri oleh {{end}} kata kunci.

Template Go memahami beberapa operator perbandingan. Itu eq ditunjukkan di atas memeriksa apakah nilai pertama sama dengan yang kedua. Opsi berikut tersedia sebagai tambahan:

  • ne – Perbandingan “tidak sama dengan”.
  • lt – Perbandingan “kurang dari” (<)).
  • lte – Perbandingan “kurang dari atau sama dengan” (<=).
  • gt – Perbandingan “lebih besar dari” (>).
  • gte – Perbandingan “lebih besar dari atau sama dengan” (>=).

Ada and, ordan not kata kunci juga untuk merangkai kondisi menjadi ekspresi kompleks.

Pemformatan Lanjutan Menggunakan Jq

Itu --format flag terutama digunakan untuk membuat string keluaran yang dapat dibaca manusia. Jika Anda lebih nyaman memeriksa JSON mentah, Anda dapat menggunakan alat lain seperti jq untuk memanipulasi output Docker secara lebih langsung. Ini bisa berguna saat Anda ingin membuat kueri yang lebih canggih daripada yang bisa disediakan oleh template Go saja.

docker inspect menghasilkan JSON secara default sehingga outputnya dapat disalurkan langsung ke jq:

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

Output dari perintah lain harus dikonversi ke JSON mentahnya dengan --format sebelum diteruskan ke jq:

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

Jq menyediakan sintaks sendiri untuk memilih, memanipulasi, dan memformat data JSON. Dasar-dasarnya mirip dengan placeholder template Go. Bidang direferensikan menggunakan .Field sintaksis. Ada dukungan untuk memilih elemen array menggunakan .[index] notasi.

Kesimpulan

CLI Docker menjadi lebih kuat ketika Anda dapat secara selektif melihat dan memanipulasi data keluaran. Buka template dengan --format flag menyediakan cara untuk membuat antarmuka khusus yang menyederhanakan pengelolaan container Anda.

Dalam beberapa situasi, --format masih mungkin tidak menawarkan kekuatan dan fleksibilitas yang Anda butuhkan. Piping perintah Docker ke alat eksternal seperti jq menyediakan cara lain untuk menginterogasi instalasi Anda dengan cepat dan memunculkan datanya di dalam sistem lain.

Leave a Reply

Your email address will not be published. Required fields are marked *