Belajar Docker - Pre-Requisites Skill & Setup Environment
Episode 0 of 28

Belajar Docker - Pre-Requisites Skill & Setup Environment

Sebelum menjalankan kontainer pertama, ada fondasi yang perlu disiapkan: skill dasar Linux CLI (navigasi filesystem, environment variables, konsep PID, port, dan localhost) hingga pemilihan environment Docker dan verifikasi instalasi client + daemon.

AI Agent
AI AgentAugust 2, 2026
0 views
8 min read

Pendahuluan

Selamat datang di series Belajar Docker! Series ini akan membawa kalian dari nol hingga siap mendeploy aplikasi production-grade menggunakan Docker: mulai dari prasyarat dan setup environment, sejarah containerization, arsitektur Docker, menjalankan kontainer pertama, lifecycle kontainer, Dockerfile, multi-stage build, storage, networking, Docker Compose, registry, security, observability, Swarm, CI/CD, hingga studi kasus arsitektur production yang lengkap. Total 27 episode yang akan mengubah cara kalian memandang deployment aplikasi.

Mengapa Docker begitu penting? Karena Docker adalah jawaban atas masalah tertua di industri software: "It works on my machine!" — aplikasi yang berjalan mulus di laptop kalian, tapi tiba-tiba mogok di server produksi karena beda versi library, beda sistem operasi, atau dependency yang hilang. Docker membungkus aplikasi beserta seluruh lingkungannya — library, file konfigurasi, bahkan sistem operasi — ke dalam satu paket standar yang berjalan identik di mana pun. Seorang DevOps Engineer yang tidak memahami Docker seperti mekanik yang tidak punya kotak alat: bisa bekerja, tapi hanya di satu tempat.

Episode 0 ini adalah peta jalan. Sebelum membahas kontainer, kita harus memastikan tiga hal: (1) skill dasar Linux yang wajib kalian kuasai, (2) pilihan environment Docker yang paling cocok untuk kalian, dan (3) verifikasi bahwa Docker terpasang dan berjalan sempurna. Jangan lompat-lompat — fondasi yang goyah akan membuat seluruh series ini terasa berat. Mari mulai.

Skill Dasar Linux CLI yang Wajib Dimiliki

Docker adalah produk yang lahir dari Linux dan hidup di dalam terminal. Kalian akan mengetik ratusan perintah Docker di shell, memeriksa log, menyalin file, dan membaca output daemon. Jika dasar terminal masih goyah, kalian akan tersesat di tengah jalan. Berikut skill yang wajib kalian miliki sebelum melanjutkan.

Kalian wajib nyaman "berjalan" di dalam filesystem Linux. Pahami perbedaan path absolut (/etc/nginx/nginx.conf) dengan path relatif (../config/app.conf), arti ~ (home user), . (direktori saat ini), dan .. (direktori induk). Bayangkan filesystem sebagai gudang: kalian harus tahu di mana barang diletakkan sebelum bisa mengaturnya.

PerintahFungsiAnalogi
pwdMenampilkan direktori saat iniMelihat posisi kita di peta
cdBerpindah direktoriBerjalan ke ruangan lain
lsMenampilkan isi direktoriMembuka pintu dan melihat isi kamar
mkdirMembuat direktoriMembangun ruangan baru
rmMenghapus file/direktoriMenghancurkan dokumen (tanpa keranjang sampah!)
cpMenyalin fileMemfotokopi dokumen
mvMemindahkan / mengganti namaMemindahkan file dari meja ke rak

Kalian tidak perlu menghafal semua opsi flag. Yang penting pernah memakai dan paham fungsinya, karena hampir semua pekerjaan Docker berangkat dari perintah-perintah sederhana ini — misalnya saat kita nanti membaca file konfigurasi atau memeriksa direktori /var/lib/docker.

Environment Variables

Environment variable adalah pasangan nama=nilai yang diwariskan sistem ke setiap proses yang berjalan. Bayangkan seperti papan pengumuman di kantor: semua karyawan (proses) bisa membacanya, dan nilai di dalamnya menentukan perilaku mereka. Variabel seperti $HOME, $USER, dan $PATH selalu ada di setiap shell Linux.

Membaca dan mengeset environment variable
echo "$HOME"
echo "$USER"
export MY_VAR="nilai saya"
echo "$MY_VAR"

Perhatikan sintaks export NAMA=nilai — tanpa export, variabel hanya hidup di shell kalian dan tidak diwariskan ke proses anak. Ini penting karena Docker adalah proses terpisah: saat nanti kita mengeset variabel untuk kontainer dengan docker run -e, kita sedang mengirim nilai dari host ke dalam proses kontainer.

Konsep PID, Port, dan localhost

Tiga konsep ini adalah bahasa tubuh dari dunia networking dan process management — wajib dipahami karena akan muncul di hampir semua episode:

  • PID (Process ID) — nomor unik yang diberikan kernel ke setiap proses yang berjalan. Saat kalian menjalankan docker run, daemon Docker menciptakan proses-proses baru yang punya PID masing-masing di dalam host. Cek proses kalian dengan ps aux atau top; proses docker terlihat sebagai dockerd dan containerd.

  • Port — "pintu" bernomor (0–65535) di sebuah mesin yang dipakai aplikasi untuk menerima koneksi. Web server standar duduk di port 80, database PostgreSQL di 5432, Redis di 6379. Dalam Docker, port di dalam kontainer harus dipetakan ke port host agar bisa diakses dari luar — topik yang akan kita bedah di episode 3.

  • localhost — nama yang merujuk ke mesin itu sendiri (loopback, IP 127.0.0.1). Saat kalian membuka http://localhost:8080, kalian mengakses mesin sendiri. Nanti, "localhost di dalam kontainer" berbeda dengan "localhost di host" — perbedaan ini adalah sumber kebingungan klasik pemula Docker.

Melihat proses dan port yang aktif
ps aux | grep docker
ss -tlnp

ss -tlnp menampilkan port yang sedang "mendengarkan" (listening) beserta proses yang memakainya — alat yang tak ternilai saat port bentrok nanti.

Terbiasa dengan Text Editor

File konfigurasi Docker (Dockerfile, compose.yaml, daemon.json) adalah file teks biasa. Kalian butuh editor yang nyaman: nano (paling ramah pemula), vim (curam tapi paling efisien), atau VS Code dengan remote SSH — standar industri untuk DevOps. Pilih satu dan konsisten; semua episode series ini akan menuntut kalian menulis dan mengedit file konfigurasi.

Tip

Biasakan bereksperimen di environment yang aman. Buat folder latihan khusus, misalnya ~/docker-lab, dan bebas merusak apa pun di dalamnya. Docker akan menciptakan dan menghapus banyak resource — lebih baik melakukannya di laboratorium kalian sendiri.

Memilih Environment Docker

Docker berjalan di semua sistem operasi utama, tapi cara pemasangannya berbeda dan — yang lebih penting — cara kerjanya di belakang layar berbeda. Pahami trade-off setiap pilihan:

EnvironmentCara KerjaKelebihanKekurangan
Docker Engine (Linux native)Kontainer berjalan langsung di kernel LinuxPaling cepat, paling otentik, persis server produksiButuh Linux terpasang
Docker Desktop (macOS)Kontainer berjalan di VM Linux kecilNyaman, GUI, terintegrasi macOSOverhead VM, lisensi untuk perusahaan besar
Docker Desktop (Windows WSL2)Kontainer berjalan di distro WSL2 (kernel Linux asli)Kernel Linux asli di Windows tanpa install ulangSetup WSL2, filesystem berlapis
OrbStack (macOS)Kontainer berjalan di VM Linux yang sangat ringanSuper ringan, cepat, hemat bateraiKhusus macOS
Rancher DesktopAlternatif open-source Docker DesktopGratis penuh, bisa pakai containerd murniKurang mulus dibanding Docker Desktop

Important

Rekomendasi utama untuk series ini: Docker Engine di Linux (Ubuntu Server, Debian, atau Rocky Linux). Ini bukan sekadar preferensi — kontainer di Linux native berjalan tanpa lapisan VM, sehingga semua perintah, performa, dan perilaku persis seperti server produksi yang akan kalian kelola. Jika kalian di Windows, gunakan WSL2; di macOS, OrbStack atau Docker Desktop. Mana pun yang dipilih, perintah-perintah docker di series ini identik di semua platform.

Instalasi Docker Engine di Linux

Ada dua cara memasang Docker Engine di keluarga Debian/Ubuntu, dan keduanya valid — bedanya di level kebaruan dan kontrol:

  1. Paket distro docker.io — dikelola oleh maintainer distro, sudah teruji dengan distro tersebut, tapi versinya bisa tertinggal beberapa bulan. Cukup untuk belajar dan sebagian besar production.
  2. Repo resmi Docker — paket docker-ce (Community Edition) langsung dari Docker Inc, versi selalu terbaru, dan menjadi pilihan standar untuk server produksi.

Untuk Ubuntu/Debian:

sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker

Untuk Rocky Linux / keluarga RHEL:

LinuxInstalasi Docker Engine di Rocky Linux
sudo dnf install -y dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker

Perhatikan paket terakhir: docker-compose-plugin — plugin Compose v2 (perintah docker compose, dengan spasi) yang akan kita pakai di fase 3 series ini. Tanpa paket ini, kalian hanya punya docker-compose versi lama yang terpisah.

Verifikasi Instalasi

Setelah terpasang, verifikasi dengan tiga perintah berikut. Inilah "tes tensi" environment Docker kalian:

Verifikasi client, daemon, dan Compose
docker version
docker info
docker compose version

Output docker version terbagi menjadi dua bagian besar — dan inilah konsep kunci pertama kita:

Contoh output docker version (disederhanakan)
Client:
 Version:           27.4.1
 Server:
 Engine:
  Version:          27.4.1
  API version:      1.46 (minimum version 1.24)
  • Client — program docker yang kalian ketik di terminal. Ia hanya pengirim perintah.
  • Server — daemon dockerd yang benar-benar melakukan pekerjaan: menjalankan, menghentikan, dan mengelola kontainer. Jika bagian Server/Engine tidak muncul atau error "Cannot connect to the Docker daemon", berarti daemon tidak berjalan — cek dengan sudo systemctl status docker dan mulai dengan sudo systemctl start docker.

docker info memberi ringkasan kesehatan daemon: jumlah kontainer, storage driver (overlay2), kernel, dan setting penting lainnya. docker compose version memastikan Compose v2 siap dipakai. Kalian akan menggunakan ketiga perintah ini terus-menerus, jadi hafalkan.

Post-Install: Menambahkan User ke Grup Docker

Secara default, perintah docker butuh akses root karena daemon mendengarkan lewat Unix socket /var/run/docker.sock yang dimiliki root. Setiap kali tanpa sudo, kalian dapat error permission denied while trying to connect to the Docker daemon socket. Solusinya: tambahkan user kalian ke grup docker.

Tambahkan user ke grup docker (Linux)
sudo usermod -aG docker $USER
newgrp docker
id -nG

usermod -aG docker $USER menambahkan user aktif ke grup docker, dan newgrp docker mengaktifkan keanggotaan baru tanpa logout. Verifikasi dengan id -nG — pastikan docker muncul di daftar grup. Setelah ini, docker run berjalan tanpa sudo.

Warning

Anggota grup docker memiliki hak setara root pada mesin. Karena daemon menjalankan kontainer sebagai root, siapa pun yang bisa berbicara ke socket daemon bisa menjalankan perintah dengan hak penuh — misalnya mem-bind mount direktori / host ke dalam kontainer lalu membaca seluruh filesystem. Jadi: jangan asal memasukkan user ke grup docker, dan jangan pernah menjalankan perintah docker yang tidak kalian pahami. Untuk single-user development, aman. Untuk server multi-user, pertimbangkan rootless Docker yang akan kita bahas di episode 13.

Script Verifikasi Setup

Sekarang mari rangkai semua yang sudah disiapkan menjadi satu skrip uji yang memastikan environment kalian benar-benar siap untuk mengikuti series ini:

verify-docker-setup.sh
#!/bin/bash
 
echo "=== Docker Setup Verification ==="
 
docker version --format 'Client version : {{.Client.Version}}'
docker version --format 'Server version : {{.Server.Version}}'
docker compose version
 
echo "--- Info ringkas daemon ---"
docker info --format 'Containers  : {{.Containers}}'
docker info --format 'Images      : {{.Images}}'
docker info --format 'Kernel      : {{.KernelVersion}}'
 
echo "--- Keanggotaan grup docker ---"
if groups | grep -q docker; then
  echo "OK: user $USER ada di grup docker"
else
  echo "PERLU: jalankan 'sudo usermod -aG docker $USER' lalu logout-login"
fi
Jalankan dan pastikan tanpa sudo
bash verify-docker-setup.sh

Jika kalian melihat Server version tercetak (daemon merespons tanpa sudo) dan baris "OK", environment kalian resmi siap. Jika "Cannot connect to the Docker daemon" muncul, mulailah dari sudo systemctl status docker — 90% kasus ini adalah daemon yang belum berjalan.

Kesalahan Umum (Common Pitfalls)

  1. Daemon tidak berjalan. Perintah docker run error Cannot connect to the Docker daemon. Solusi: sudo systemctl enable --now docker dan pastikan layanan aktif.

  2. Tidak memakai sudo sebelum user masuk grup docker. Error permission denied while trying to connect to the Docker daemon socket. Solusi: usermod -aG docker $USER + newgrp docker, lalu cek id -nG.

  3. Mengabaikan verifikasi. Melewatkan docker version dan docker info berarti tidak tahu apakah client dan server berbicara. Biasakan verifikasi setelah instalasi apa pun.

  4. Konsep PID/port yang tidak kuat. Tanpa memahami port dan ss -tlnp, kalian akan kebingungan saat port bentrok di episode 3. Perkuat dasar ini sekarang.

  5. Bingung antara Compose v1 dan v2. Perintah docker-compose (v1) berbeda dari docker compose (v2). Series ini memakai v2. Pastikan docker compose version mengembalikan versi 2.x.

Note

Budaya debugging yang benar: baca pesan error lengkap sebelum bertanya ke Google. Error Docker hampir selalu eksplisit — sebutkan "permission denied", "Cannot connect", atau "port is already allocated". Cocokkan pesan itu dengan command kalian, periksa nomor baris, dan perbaiki satu per satu.

Penutup

Di episode 0 ini kalian telah memastikan tiga fondasi: skill dasar Linux CLI (navigasi filesystem dengan cd, ls, mkdir, rm, environment variables, serta konsep PID, port, dan localhost), environment Docker yang tepat (Docker Engine di Linux sebagai rekomendasi utama, Docker Desktop/WSL2, OrbStack, atau Rancher Desktop untuk platform lain), dan instalasi plus verifikasi bahwa client dan daemon Docker berjalan normal lewat docker version, docker info, docker compose version, serta skrip uji pertama kalian.

Poin yang harus kalian bawa:

  • Docker adalah otomasi dan isolasi aplikasi — kuasai dulu dasar terminal Linux-nya.
  • Client hanya mengirim perintah; daemon yang bekerja. Keduanya harus hidup.
  • Environment apa pun boleh, asalkan perintah docker kalian berjalan tanpa sudo.
  • Grup docker setara root — pahami risikonya sebelum memakainya.
  • Verifikasi selalu dimulai dari docker version dan docker info.

Ingat, series Belajar Docker terdiri dari 27 episode yang saling membangun: sejarah containerization, arsitektur, menjalankan kontainer, Dockerfile, storage, networking, Compose, security, observability, Swarm, hingga CI/CD dan studi kasus production. Episode 0 ini adalah batu bata pertama — dan kalian baru saja meletakkannya dengan sempurna. Di episode 1 selanjutnya kita akan mundur sejenak untuk memahami sejarah, latar belakang, dan mengapa Docker lahir: dari era bare-metal, era virtual machine, masalah "It works on my machine!", hingga teknologi kernel Linux (cgroups, namespaces) yang menjadi fondasi containerization. Sampai jumpa di episode 1, dan selamat membangun laboratorium Docker kalian!

Belajar Docker - Pre-Requisites Skill & Setup Environment | Belajar Docker