Instalasi yang selesai tanpa pesan galat belum tentu instalasi yang sehat — daemon bisa menyala namun gagal memanggil runtime, plugin bisa absen diam-diam, dan akses tanpa sudo bisa gagal tanpa kita sadari sampai hari pertama kerja sungguhan. Dunia Docker menjawab keraguan semacam ini dengan ritual verifikasi yang sudah menjadi tradisi: satu perintah versi, satu ringkasan keadaan daemon, dan segelas air bernama hello-world. Ritual ini hanya butuh dua menit, dan kebiasaan menjalankannya setelah setiap pemasangan maupun pembaruan akan menghemat berjam-jam diagnosa di kemudian hari. Chapter ini menjalankan seluruh ritual tersebut di mesin Budi dan membaca setiap baris hasilnya.
Peta Pemeriksaan #
Enam pemeriksaan berikut menutup seluruh rantai dari CLI sampai runtime. Tabel ini juga layak disalin ke dalam runbook tim sebagai checklist standar setelah instalasi Docker di mesin baru:
| Komponen yang diuji | Perintah | Hasil yang diharapkan |
|---|---|---|
| Daemon merespons klien | docker version | Bagian Client dan Server sama-sama tampil, versi Engine 29.9.0 |
| Keadaan daemon dan konfigurasi aktif | docker info | Server Version tampil, Storage Driver terbaca |
| Runtime container bekerja end-to-end | docker run hello-world | Pesan Hello from Docker! tercetak |
| Plugin Compose terpasang | docker compose version | Docker Compose version v5.6.0 |
| Plugin buildx terpasang | docker buildx version | buildx v0.28.0 |
| Akses tanpa sudo berfungsi | docker ps | Header tabel container tampil tanpa galat izin |
docker version #
Perintah pertama bertanya kepada kedua pihak sekaligus: CLI memperkenalkan dirinya, lalu bertanya kepada daemon yang sama. Keluaran lengkapnya sudah kita bedah komponen per komponen pada Chapter Arsitektur Docker; kali ini kita membacanya sebagai pemeriksa kesehatan:
$ docker versionOutput yang Dihasilkan:
Client: Docker Engine - Community
Version: 29.9.0
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
OS/Arch: linux/amd64
containerd:
Version: 2.1.4
runc:
Version: 1.3.2Baris-baris Path milik tiap plugin serta Git commit dan waktu build daemon dipotong karena tidak relevan bagi pemeriksaan. Mari kita telaah hasil yang sehat dari keluaran di atas:
- Bagian Client tampil lengkap dengan dua plugin — CLI terpasang benar di jalur perintah, dan kedua plugin inti — buildx v0.28.0 serta Compose v5.6.0 — ikut terdaftar; absennya salah satu berarti pemasangan paket plugin tidak tuntas.
- Bagian Server tampil sama sekali — inilah tanda terpenting: CLI berhasil menghubungi daemon dan daemon menjawab. Bila daemon mati, bagian Server hilang digantikan galat koneksi — pola yang akan sering kita jumpai pada Chapter Troubleshooting Instalasi.
- Engine 29.9.0 dengan API 1.52 — daemon menjalankan versi yang kita harapkan; klien dan daemon tidak harus sepersis versi karena REST API dirancang kompatibel turun-naik, tetapi keduanya tidak boleh berjarak generasi.
- containerd 2.1.4 dan runc 1.3.2 — dua runtime di bawah daemon ikut melapor sehat; baris ini sekaligus membuktikan paket
containerd.ioterpasang benar dari repositori resmi.
docker info #
docker version memastikan semua pihak hidup; docker info membedah isi kepala daemon. Perintah ini menarik seluruh keadaan daemon — jumlah container, driver penyimpanan, konfigurasi jaringan, plugin yang tersedia — menjadi satu ringkasan panjang. Berikut potongan yang paling penting bagi verifikasi:
$ docker infoOutput yang Dihasilkan:
Client:
Context: default
Debug Mode: false
Server:
Containers: 0
Running: 0
Images: 0
Server Version: 29.9.0
Storage Driver: overlayfs
driver-type: containerd
Logging Driver: json-file
...
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf json-file local splunk syslogSebagian besar keluaran dipotong agar ringkas; ... menyembunyikan pengaturan cgroup, batas keamanan default, dan alamat registry. Mari kita telaah potongan yang tersisa:
Server Version: 29.9.0— konfirmasi kedua bahwa daemon yang sedang berjalan memakai versi yang benar.Storage Driver: overlayfsdengandriver-type: containerd— penyimpanan image berbasis containerd aktif, sesuai perilaku bawaan Engine 29 pada instalasi baru yang kita kenal pada Chapter Konfigurasi Docker Engine.Logging Driver: json-file— driver log yang sedang dipakai; bila rotasi log sudah dikonfigurasi lewatdaemon.json, nilai inilah yang menunjukkan driver-nya aktif.Plugins: Volume, Network, Log— daftar driver yang tersedia untuk volume, jaringan, dan log; bridge, host, dan overlay pada baris Network adalah fondasi yang kita pakai nanti di Section Jaringan Container.
docker run hello-world #
Inilah ujung tombak verifikasi: satu container sungguhan ditarik, dihidupkan, dan menyelesaikan tugasnya dari ujung ke ujung. Image hello-world adalah program terkecil yang layak disebut container — hanya 13.3kB — dan programnya memang ditulis untuk menyapa kita:
$ docker run hello-worldOutput yang Dihasilkan:
Unable to find image 'hello-world:latest' locally
docker.io/library/hello-world:latest
...
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/Baris ... di tengah menyembunyikan laporan unduhan layer yang singkat — sesuai janji Docker, semua berjalan otomatis tanpa kita diminta apa pun. Pesan asli dari image ini kebetulan menjelaskan langkah-langkah yang baru saja terjadi, dan keempat langkahnya persis alur arsitektur dari Section Pengantar Docker:
- Klien menghubungi daemon — perintah
docker rundi terminal hanyalah pembuka; CLI meneruskan permintaan ke dockerd melalui REST API di atas socket unix. - Daemon menarik image dari Docker Hub — image tidak ada di simpanan lokal — perhatikan baris pertama keluaran — sehingga daemon mengunduhnya dari registry; baris kedua menampilkan nama lengkap dengan namespacenya,
docker.io/library/hello-world. - Daemon menghidupkan container — dari image yang baru tiba, daemon — bersama containerd dan runc — menciptakan container dan menjalankan program di dalamnya; program inilah yang mencetak sapaan tersebut.
- Keluaran dialirkan kembali — teks dari dalam container mengalir dari daemon ke CLI lalu ke terminal kita; program selesai, container berhenti, dan terminal kembali siap — siklus hidup lengkap dalam hitungan detik.
Plugin Compose dan buildx #
Dua pemeriksaan terakhir memastikan kedua plugin CLI benar-benar dapat dipanggil sebagai subperintah docker — bukan sekadar terdaftar pada docker version:
$ docker compose version
$ docker buildx versionOutput yang Dihasilkan:
Docker Compose version v5.6.0
github.com/docker/buildx v0.28.0 4c9b1a7Kedua baris di atas menutup checklist: Compose v5.6.0 siap mengelola stack multi-container lewat berkas compose.yaml, dan buildx v0.28.0 siap membangun image di atas BuildKit — angka acak di ujungnya adalah penanda commit kode sumber buildx. Perlu diingat kembali bahwa perintahnya ditulis docker compose dengan spasi, bentuk modern yang menjadi standar sepanjang Course ini.
Dengan enam baris checklist hijau semua, instalasi Docker di mesin Budi dinyatakan sehat dari CLI sampai runtime. Namun ritual verifikasi ini menyingkap satu wilayah yang selama ini kita lewati begitu saja: kenapa Budi boleh memanggil daemon tanpa sudo, siapa saja yang sebaiknya diberi izin serupa, dan kenapa jawabannya tidak sesederhana menambah semua orang ke grup docker. Socket /var/run/docker.sock adalah kunci kerajaan di balik semua ini. Chapter Mengatur Akses Docker membedah izin socket, grup docker, dan jalur koneksi remote yang aman.
Referensi #
- hello-world di Docker Hub — halaman image resmi yang menyapa kita beserta Dockerfile-nya yang mungil.
- docker version — referensi resmi perintah pemeriksaan versi klien dan daemon.
- docker info — referensi resmi ringkasan keadaan sistem Docker.