Kita sudah mengenal tiga pintu bantuan pada Chapter Struktur Perintah Docker, dan kali ini kita akan benar-benar membaca isi di balik pintu pertama. Perintah docker --help adalah peta lengkap seluruh kemampuan CLI, sementara docker version dan docker info adalah dua panel instrumen yang menampilkan kondisi mesin kita. Tiga perintah ini menjadi ritual pertama yang bijak dijalankan setiap kali kita berhadapan dengan mesin baru — misalnya server kantor yang baru diambil alih — karena ketiganya cepat, aman, dan tidak menyentuh container apa pun. Chapter ini membedah output ketiganya baris demi baris supaya kita tahu persis apa yang sedang kita pegang: versi komponen mana yang terpasang, bagaimana daemon menyimpan image, dan seperti apa rasanya ketika daemon sedang tidak menyala.

Membaca docker –help #

Bantuan tingkat atas dicetak dengan pola yang sama seperti docker container --help yang sudah kita lihat, tetapi isinya jauh lebih kaya karena mencakup seluruh CLI. Output berikut dipotong di beberapa tempat agar fokus pada struktur, bukan pada panjangnya:

bash
$ docker --help

Output yang Dihasilkan:

text
Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Common Commands:
  run         Create and run a new container from an image
  exec        Execute a command in a running container
  ps          List containers
  build       Build an image from a Dockerfile
  pull        Download an image from a registry
  push        Upload an image to a registry
  images      List images
  login       Log in to a registry
  logout      Log out from a registry
  search      Search Docker Hub for images
  version     Show the Docker version information
  info        Display system-wide information

Management Commands:
  builder     Manage builds
  buildx*     Docker Buildx (Docker Inc.)
  compose*    Docker Compose (Docker Inc.)
  container   Manage containers
  image       Manage images
  manifest    Manage Docker image manifests and manifest lists
  network     Manage networks
  plugin      Manage plugins
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  commit      Create a new image from a container's changes
  ...
  wait        Block until one or more containers stop, then print their exit codes

General Options:
      --config string      Location of client config files (default "/home/budi/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket to connect to
  -l, --log-level string   Set the logging level ("debug", "info", "warn", "error", "fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlsverify          Use TLS and verify the remote

Run 'docker COMMAND --help' for more information on a command.
For more help on how to use Docker see our getting started guide at https://docs.docker.com/get-started/

Bagian Commands: di tengah dipotong karena memuat lebih dari tiga puluh baris. Mari kita telaah struktur output di atas:

  1. Baris Usage: dan tagline — pola pemakaian docker [OPTIONS] COMMAND mengonfirmasi tata bahasa dari chapter sebelumnya: flag global dulu, lalu perintah.
  2. Common Commands — dua belas perintah yang paling sering dipakai sehari-hari; bagian ini sengaja diletakkan paling atas supaya kita tidak perlu menggulung layar untuk menemukan run atau ps.
  3. Management Commands — kelompok objek yang sudah kita kenal lewat tabel objek, ditambah dua baris bertanda bintang: buildx* dan compose*; tanda * menandakan bahwa keduanya adalah plugin, bukan perintah bawaan CLI inti.
  4. Commands — daftar lengkap semua perintah tingkat atas termasuk bentuk-bentuk lama seperti attach dan commit; daftar ini tumpang tindih dengan Common Commands karena memang memuat semuanya.
  5. General Options — flag global yang sudah kita bahas, kini lengkap dengan nilai bawaannya: --config menunjuk ke /home/budi/.docker dan --log-level secara default berada di tingkat info.
  6. Dua baris penutup — pengingat pola docker COMMAND --help plus tautan panduan pemula resmi; baris terakhir inilah yang menjelaskan mengapa URL docs.docker.com selalu muncul di ujung bantuan.

Anatomi docker version #

Perintah docker version sudah dua kali menjadi tamu di course ini — pada Chapter Arsitektur Docker sebagai foto keluarga komponen, dan pada Chapter Verifikasi Instalasi sebagai alat pemeriksaan kesehatan. Sekarang kita bedah output-nya secara penuh dari sisi Client sampai sisi Server. Baris-baris detail build seperti Git commit, Go version, dan waktu kompilasi dipotong agar fokus pada komponen yang benar-benar kita gunakan:

bash
$ docker version

Output yang Dihasilkan:

text
Client: Docker Engine - Community
 Version:    29.9.0
 API version: 1.52
 OS/Arch:    linux/amd64
 Context:    default
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.28.0
  compose: Docker Compose (Docker Inc.)
    Version:  v5.6.0

Server: Docker Engine - Community
 Engine:
  Version:          29.9.0
  API version:      1.52 (minimum version 1.24)
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          2.1.4
 runc:
  Version:          1.3.2
 ...

Baris Path di bawah setiap plugin, baris detail build seperti Git commit dan waktu kompilasi, serta komponen docker-init di bagian paling bawah dipotong agar fokus. Mari kita telaah poin-poin terpentingnya:

  1. Client Version 29.9.0 dengan API version 1.52 — sisi kiri output adalah program CLI di mesin kita; CLI membawa pemahaman protokol API versi 1.52 yang akan dipakainya untuk berbicara dengan daemon.
  2. Context: default — baris kecil ini menunjuk daemon mana yang sedang dituju; kata default berarti daemon lokal lewat Unix socket, dan pembahasannya menjadi chapter tersendiri setelah ini.
  3. Plugins — buildx v0.28.0 dan Compose v5.6.0 terpasang sebagai plugin CLI dari repositori resmi Docker; baris Path yang terpotong mencantumkan lokasi berkas plugin di bawah direktori cli-plugins, tempat CLI mencari plugin yang bisa dipanggil lewat docker buildx dan docker compose.
  4. Server Engine 29.9.0 dengan API version 1.52 (minimum version 1.24) — daemon yang bicara dengan kita adalah dockerd versi sama dengan CLI; keterangan minimum version 1.24 berarti daemon masih mau melayani klien lama yang hanya menguasai API 1.24 ke atas.
  5. containerd 2.1.4 dan runc 1.3.2 — bukti bahwa sisi Server tersusun berlapis: dockerd menerima permintaan, containerd mengawasi siklus hidup, dan runc yang benar-benar melahirkan proses container; trio ini persis diagram pada Chapter Arsitektur Docker.

Perhatikan bahwa versi Client dan Server kebetulan sama di mesin kita karena keduanya terpasang dari repositori resmi yang sama. Keduanya tidak wajib sama — klien boleh lebih baru dari daemon atau sebaliknya, selama versi API yang dipahami keduanya masih bertemu di rentang yang didukung daemon.

Saat Daemon Tidak Menyala #

docker version juga menjadi alat diagnosis tercepat ketika sesuatu tidak beres. Karena bagian Client dicetak oleh CLI itu sendiri sedangkan bagian Server harus ditanyakan ke daemon, output akan terbelah jelas ketika daemon sedang mati. Mari kita lihat wujudnya:

bash
$ docker version

Output yang Dihasilkan:

text
Client: Docker Engine - Community
 Version:    29.9.0
 OS/Arch:    linux/amd64
 Context:    default

Server:
ERROR: Cannot connect to the Docker daemon. Is the docker daemon running on this host?

errors pretty printing info

Mari kita telaah apa yang sebenarnya terjadi pada output di atas:

  1. Bagian Client tetap utuh — CLI terpasang dan berjalan baik; galat ini membuktikan bahwa masalah ada di ujung Server, bukan pada instalasi klien.
  2. Pesan Cannot connect to the Docker daemon. Is the docker daemon running on this host? — CLI gagal membuka koneksi ke endpoint context aktif; penyebab paling umum adalah service Docker yang belum dinyalakan, sehingga solusinya adalah sudo systemctl start docker pada Ubuntu.
  3. Baris errors pretty printing info — pesan internal CLI ketika gagal memformat bagian Server karena datanya memang tidak pernah datang; baris ini boleh diabaikan dan bukan galat terpisah.

Bentuk kerabat dari galat ini adalah permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock, yang muncul ketika daemon hidup tetapi pengguna kita belum diberi izin ke socket. Penanganan lengkap untuk keduanya — dari menyalakan service sampai keanggotaan grup docker — sudah kita bahas pada Chapter Troubleshooting Instalasi dan Mengatur Akses Docker.

Menyaring Output dengan –format #

Output docker version yang panjang tidak enak dibaca mesin. Ketika skrip atau pipeline CI hanya membutuhkan satu potongan data, flag --format dengan template Go memungkinkan kita memetik field tertentu secara langsung:

bash
$ docker version --format '{{.Server.Version}}'

Output yang Dihasilkan:

text
29.9.0

Template bisa juga merangkai beberapa field sekaligus dengan teks di sekelilingnya:

bash
$ docker version --format 'Client {{.Client.Version}} / Server {{.Server.Version}}'

Output yang Dihasilkan:

text
Client 29.9.0 / Server 29.9.0

Mari kita telaah cara kerja kedua perintah di atas:

  1. {{.Server.Version}} — ekspresi template yang membaca field Version di dalam bagian Server; nama field mengikuti struktur output aslinya, sehingga {{.Client.Version}} membaca versi sisi klien.
  2. Tanda kutip tunggal — shell tidak boleh memakan kurung kurawal template, jadi seluruh argumen format kita bungkus dengan kutip tunggal.
  3. Contoh pemakaian kedua — teks bebas seperti Client dan / dicetak apa adanya, dan hanya bagian dalam {{ }} yang diganti nilainya; pola serupa akan kita pakai lagi untuk docker ps pada Chapter Melihat Container.

Potret Sistem dengan docker info #

Jika docker version adalah kartu identitas komponen, docker info adalah potret menyeluruh kondisi mesin: berapa container yang hidup, bagaimana daemon menyimpan image, driver apa yang tersedia, sampai versi kernel host. Output berikut dipotong di bagian informasi host agar fokus pada baris yang kita bahas:

bash
$ docker info

Output yang Dihasilkan:

text
Client: Docker Engine - Community
 Version:    29.9.0
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.28.0
  compose: Docker Compose (Docker Inc.)
    Version:  v5.6.0

Server:
 Containers: 2
  Running: 0
  Paused: 0
  Stopped: 2
 Images: 2
 Server Version: 29.9.0
 Storage Driver: overlayfs
  driver-type: containerd.io
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 2
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 ...

Angka pada bagian Containers dan Images mencerminkan sisa latihan di mesin kita dan pasti berbeda di mesin pembaca. Mari kita telaah baris-baris kuncinya:

  1. Containers: 2 dengan rincian Stopped: 2 — potret jumlah container beserta statusnya dalam satu tempat; saat ini dua container latihan lama kita berada dalam keadaan berhenti dan tidak ada yang berjalan.
  2. Server Version: 29.9.0 — versi daemon, konsisten dengan hasil docker version di atas; dua perintah ini saling melengkapi, bukan saling menggantikan.
  3. Storage Driver: overlayfs dengan driver-type: containerd.io — sejak Docker Engine 29, instalasi baru memakai containerd image store sebagai penyimpanan image bawaan, dan overlayfs adalah driver snapshot yang menyusun layer-nya; instalasi lama masih menampilkan overlay2 sampai fitur containerd-snapshotter diaktifkan lewat daemon.json seperti yang kita bahas pada Chapter Konfigurasi Docker Engine.
  4. Logging Driver: json-file — driver log bawaan; hanya driver json-file dan local yang bisa dibaca kembali lewat docker logs, topik yang kita bedah pada Chapter Melihat Log Container.
  5. Plugins di bawah Server — daftar driver yang tersedia di daemon: driver volume local, tujuh driver jaringan dari bridge sampai overlay, dan sepuluh driver log; daftar inilah yang menentukan nilai apa saja yang sah saat kita memakai flag --network atau --log-driver.

Dua panel instrumen ini menyimpan satu baris kecil yang sampai sekarang baru kita lewati begitu saja: Context: default. Baris tersebut muncul di output docker version, di output docker info, dan di pesan galat ketika daemon mati — selalu menunjuk satu kata yang sama. Kata itu adalah nama context: mekanisme Docker untuk menjawab pertanyaan “daemon mana yang sedang saya bicarakan?”. Chapter berikutnya, Memahami Docker Context, membuka mekanisme tersebut mulai dari masalah satu CLI yang harus mengurus banyak daemon sekaligus.

Referensi #

  • docker version — referensi resmi perintah version beserta opsi --format.
  • docker info — referensi resmi perintah info dan arti tiap bidangnya.
  • Use the Docker CLI — pola perintah, flag global, dan cara membaca bantuan CLI.