Sepanjang Course ini kita mengetik ratusan perintah Docker — dari hello-world pertama di section pengantar sampai stack Swarm di section orchestration. Kenyataan pekerjaan sehari-hari jauh lebih ramping: mayoritas waktu hanya berputar pada hitungan puluhan perintah inti untuk menjalankan container, membaca log, membangun image, dan membersihkan disk. Chapter ini memadatkan seluruh perintah tersebar dari dua puluh section menjadi satu lembar contekan sembilan blok yang bisa dipindai dalam hitungan detik. Setiap baris perintah disertai komentar singkat berbahasa Indonesia yang menjelaskan fungsinya, dan seluruh flag yang pernah kita bedah — dari --target dan --secret sampai down -v — hadir kembali di blok yang tepat. Perintah yang jarang terpakai sengaja tidak diundang: tujuan lembar ini bukan menggantikan dokumentasi resmi, melainkan membuat pekerjaan paling sering selesai tanpa membuka dokumentasi sama sekali.

Cara memakainya sederhana: cari blok sesuai pekerjaan yang sedang dihadapi, salin perintahnya, lalu sesuaikan nama, tag, dan path dengan project kita sendiri. Blok disusun mengikuti urutan hidup alami — instalasi, siklus container, inspeksi, image, volume, network, Compose, build, dan bersih-bersih — sehingga membaca dari atas ke bawah sekali pun tetap masuk akal. Ganti nama web dan tag myapp:dev pada contoh dengan resource milik kita, dan anggap komentar di ujung kanan tiap baris sebagai pengingat satu detik untuk flag yang dulunya butuh satu chapter penuh.

Instalasi dan Info #

Delapan perintah ini menjawab pertanyaan paling awal sebelum menyentuh container mana pun: versi apa yang terpasang, daemon hidup atau tidak, dan ke daemon mana CLI ini sedang bicara. Dua perintah terakhir adalah andalan saat semuanya mendadak diam.

bash
docker version                       # versi klien dan daemon sekaligus
docker info                          # ringkasan daemon: storage driver, network, jumlah container
docker help                          # daftar seluruh command group dan perintah
docker run --help                    # bantuan flag untuk satu perintah spesifik
docker context ls                    # daftar context: daemon mana yang sedang dipakai
docker context use <nama>            # pindah ke context lain (mis. remote via SSH)
systemctl status docker              # status layanan daemon di Linux
journalctl -u docker -n 50           # 50 baris log terakhir daemon saat bermasalah

Siklus Hidup Container #

Blok paling sering dipakai: membuat container baru, melihat yang berjalan, lalu menghentikan dan menghapusnya kembali. docker run membawa tiga kebiasaan baik sekaligus — nama eksplisit, pemetaan port, dan tag image yang ditulis penuh.

bash
docker run -d --name web -p 8080:80 nginx:1.29-alpine   # jalankan container baru di background
docker run --rm -it alpine:3.20 sh                      # sesi shell sementara, hapus saat keluar
docker ps                            # container yang sedang berjalan
docker ps -a                         # semua container termasuk yang sudah berhenti
docker stop web                      # kirim SIGTERM, 10 detik kemudian SIGKILL
docker start web                     # nyalakan ulang container yang berhenti
docker restart web                   # stop lalu start kembali
docker rm web                        # hapus container yang sudah berhenti
docker rm -f web                     # hapus paksa walau container masih berjalan
docker update --restart unless-stopped web   # ubah restart policy container yang sudah ada

Inspeksi dan Debug #

Ketika container berperilaku aneh, rantai perintah berikut adalah urutan diagnosis yang selalu sama sepanjang section observability: lihat log dulu, bedah metadata, lalu turun ke dalam proses. Perhatikan pola --format pada inspect — satu field yang tepat mengalahkan keluaran JSON beratus-ratus baris.

bash
docker logs -f web                   # ikuti log container secara realtime
docker logs --tail 100 web           # 100 baris log terakhir saja
docker inspect web                   # seluruh metadata container dalam JSON
docker inspect --format '{{.State.Status}}' web   # ambil satu field saja
docker stats                         # CPU, memori, dan I/O seluruh container berjalan
docker top web                       # proses yang berjalan di dalam container
docker exec -it web sh               # shell interaktif di dalam container berjalan
docker events --since 10m            # event daemon pada 10 menit terakhir
docker port web                      # pemetaan port host ke port container

Image #

Empat pekerjaan image yang berulang setiap hari: melihat, menarik, menandai, dan mendorong.

bash
docker images                        # daftar image lokal beserta ukurannya
docker pull nginx:1.29-alpine        # tarik image dengan tag eksplisit, jangan andalkan latest
docker tag myapp:dev budi/myapp:1.0.0    # beri alias tag baru pada image yang sama
docker push budi/myapp:1.0.0         # dorong image ke registry
docker rmi myapp:dev                 # hapus image lokal
docker image history myapp:dev       # lapisan image beserta instruksi dan ukurannya
docker image prune -a                # hapus semua image yang tidak dipakai container mana pun

Volume dan Mount #

Data yang harus selamat dari penghapusan container hidup di volume; dua bentuk sintaks mount di bawah sama-sama sering muncul.

bash
docker volume ls                     # daftar seluruh volume
docker volume create data-app        # buat volume bernama secara eksplisit
docker volume inspect data-app       # mountpoint host dan opsi volume
docker volume rm data-app            # hapus satu volume
docker volume prune                  # hapus volume yang tidak terpakai
docker run -v data-app:/var/lib/data myapp:dev         # mount volume bernama
docker run -v $(pwd)/src:/app myapp:dev                # bind mount folder host (baca-tulis)
docker run --mount type=bind,src=$(pwd)/src,dst=/app,readonly myapp:dev   # bentuk --mount eksplisit

Network #

DNS antar container hanya bekerja di user-defined network, jadi blok ini adalah kunci seluruh stack multi-container. Urutannya selalu sama: buat network, jalankan container di dalamnya, lalu periksa keanggotaannya lewat inspect.

bash
docker network ls                    # daftar network dengan driver dan scopenya
docker network create net-aplikasi   # buat user-defined bridge network
docker network inspect net-aplikasi  # subnet dan container mana saja yang tergabung
docker network connect net-aplikasi web   # sambungkan container yang sedang berjalan
docker network rm net-aplikasi       # hapus network yang sudah kosong
docker network prune                 # hapus network yang tidak terpakai
docker run --network net-aplikasi myapp:dev   # jalankan container langsung di network bernama

Docker Compose #

Sebelas perintah harian Compose — selalu dengan spasi, karena Compose sekarang adalah plugin resmi docker compose.

bash
docker compose up -d                 # jalankan seluruh stack di background
docker compose up -d --build         # bangun ulang image lalu jalankan stack
docker compose ps                    # status service pada project aktif
docker compose logs -f web           # ikuti log satu service
docker compose exec web sh           # shell ke service yang sedang berjalan
docker compose run --rm debug sh     # container sekali jalan untuk service tertentu
docker compose watch                 # aktifkan aturan develop.watch
docker compose config                # validasi file dan tampilkan hasil interpolasi
docker compose stop                  # hentikan service tanpa menghapusnya
docker compose down                  # hentikan dan hapus container serta network project
docker compose down -v               # WARNING: sekalian menghapus volume bernama project

Build #

Blok build memuat seluruh flag yang pernah kita bedah di section image dan optimisasi — dari pemilihan stage sampai penyuntikan secret. Sebelum memakai --no-cache atau --pull, pastikan alasannya memang kuat: keduanya membuang penghematan terbesar dari BuildKit.

bash
docker build -t myapp:dev .                          # build dengan Dockerfile di context .
docker build -f docker/Dockerfile -t myapp:dev .     # Dockerfile berada di lokasi lain
docker build --target builder -t myapp:builder .     # berhenti di stage bernama untuk debug
docker build --no-cache -t myapp:dev .               # abaikan seluruh cache, bangun dari nol
docker build --pull -t myapp:dev .                   # tarik ulang base image sebelum build
docker build --build-arg VERSION=1.0.0 -t myapp:dev .    # isi ARG saat build berjalan
docker build --platform linux/amd64 -t myapp:dev .   # build untuk platform tertentu
docker build --secret id=npm,src=.npmrc -t myapp:dev .   # suntik berkas rahasia tanpa masuk layer
docker buildx ls                    # daftar builder beserta platform yang didukung
docker buildx prune                 # bersihkan cache BuildKit yang menumpuk

Bersih-bersih #

Disk yang sehat bukan kebetulan: ukur dulu dengan docker system df, baru bersihkan sesuai angkanya.

bash
docker system df                    # ringkasan pemakaian disk: image, container, volume, cache
docker system prune                 # hapus container berhenti, network kosong, image dangling
docker system prune -a --volumes    # bersih total: semua image tak terpakai dan volume anonim
docker builder prune                # hapus cache BuildKit saja
docker container prune              # hapus seluruh container berstatus exited

Lembar contekan ini menuntaskan sisi perintah, tetapi separuh pekerjaan Docker sesungguhnya hidup di dua berkas lain: Dockerfile yang mendefinisikan image dan compose.yaml yang mendefinisikan stack. Keduanya punya pola berulang yang jauh lebih layak dihafal daripada daftar flag — urutan instruksi yang ramah cache, template multi-stage, susunan service dengan healthcheck, sampai profil untuk alat debug. Pola-pola itu juga yang paling sering disalin dari project lama ke project baru, sehingga menyimpannya dalam bentuk template teruji menghemat waktu berlipat ganda. Chapter berikutnya mengumpulkan pola-pola itu menjadi Cheat Sheet Dockerfile berisi tiga template siap salin untuk aplikasi Node, Go, dan Python.

Referensi #