Belajar Docker dari Nol, Panduan Lengkap untuk Pemula
Pernah gak sih kamu ngalamin momen klasik ini? Kamu coding aplikasi di laptop, semuanya jalan lancar jaya. Tapi pas kamu kasih kodenya ke temen atau deploy ke server, tiba-tiba error semua. Muncul alasan legendaris: “Padahal di laptop saya jalan kok!” (It works on my machine).
Di artikel ini, kita membahas Docker dasar secara praktis agar kamu paham konteks dan penerapannya.
Frustrasi banget, kan? Masalahnya seringkali bukan di kode kamu, tapi di lingkungan (environment) yang beda. Mungkin versi Node.js-nya beda, databasenya beda config, atau OS-nya beda distro.
Nah, Docker hadir buat nyelesain masalah drama environment ini sekali dan selamanya. Kalo kamu berkecimpung di dunia IT, entah sebagai Sysadmin atau Developer, skill Docker ini sekarang udah kayak skill wajib dan bukan lagi nilai plus, tapi kebutuhan dasar.
Yuk, kita pelajari bareng apa itu Docker, kenapa dia begitu populer, dan gimana cara pakenya, step by step, dengan fokus teknis yang jelas.
Apa itu Docker sebenarnya?
Simpelnya gini: Docker adalah tupperware buat aplikasi kamu.
Bayangin kamu mau ngirim makanan (aplikasi) ke rumah temen (server). Kalo kamu cuma taruh makanannya di piring terbuka dan naik motor, sampe sana makanannya mungkin udah tumpah atau kemasukan debu.
Tapi kalo kamu masukin makanan itu ke dalam tupperware (container), mau kamu bawa pake motor, mobil, atau pesawat, makanannya bakal tetep aman, bentuknya sama, dan rasanya gak berubah sampe tujuan.
Di dunia teknis, Docker “membungkus” aplikasi kamu beserta semua hal yang dia butuhin (library, config, dependencies) jadi satu paket rapi yang disebut Container.
Bedanya sama virtual machine (vm)?
Mungkin kamu mikir, “Lho, bukannya VM (kayak VirtualBox/VMware) juga gitu?”
Mirip, tapi beda cara kerjanya.
- Virtual Machine (VM): Berat. Setiap VM butuh install OS lengkap (Guest OS). Jadi kalo kamu punya 3 aplikasi, kamu butuh 3 Windows/Linux full. Boros RAM dan CPU.
- Docker Container: Ringan. Container numpang di kernel OS host-nya. Gak perlu install OS baru di dalemnya, cuma perlu library aplikasinya aja. Bootingnya hitungan detik, bukan menit.

Cara kerja Docker (ringkas tapi teknis)
Docker berjalan di atas dua konsep inti Linux:
- Namespaces: mengisolasi proses, network, filesystem, dan user sehingga container terasa seperti “VM mini”.
- Cgroups: membatasi resource (CPU, RAM, I/O) agar container tidak rakus.
Selain itu, image Docker tersusun dari layer. Setiap instruksi di Dockerfile membuat layer baru. Ini yang membuat build jadi cepat karena cache bisa dipakai ulang.
Komponen utama:
- Docker Engine: daemon
dockerdyang mengelola image, network, volume. - Container runtime: menjalankan container (OCI runtime seperti
runc). - Registry: tempat menyimpan image (
Docker Hub, registry private).
Install Docker
Docker jalan di mana aja. Linux, Mac, Windows.
- Linux (Ubuntu):
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh - Windows/Mac: Download Docker Desktop dari website resminya. Tinggal next next aja.
Cek instalasi:
docker --version
Container pertamamu
Mari kita coba jalankan web server Nginx. Gak perlu install Nginx di laptop kamu, cukup panggil Docker.
docker run -d -p 8080:80 nginx
Penjelasan mantra di atas:
docker run: Perintah buat jalanin container.-d(detached): Jalan di background (gak menuhin terminal).-p 8080:80: Port mapping. Port 8080 di laptop kamu nyambung ke port 80 di dalem container.nginx: Nama image yang mau dipake.
Sekarang buka browser dan akses http://localhost:8080.
Boom! Welcome to nginx!. Kamu baru aja menjalankan web server tanpa mengotori sistem operasi kamu.
Konsep penting: image vs container
Banyak pemula ketuker di sini.
- Image: Ini adalah “master cetakan” atau file mentahannya. Sifatnya Read Only. (Contoh: Installer Windows.iso)
- Container: Ini adalah benda nyata yang jalan dari Image tersebut. Sifatnya Read Write sementara. (Contoh: Laptop yang udah diinstall Windows).
Perintah dasar yang wajib kamu hafal:
- Download image:
docker pull ubuntu - Liat image yang kamu punya:
docker images - Liat container yang lagi jalan:
docker ps - Matiin container:
docker stop <CONTAINER_ID>

Layer dan cache: kenapa urutan dockerfile penting
Dockerfile bukan sekadar daftar perintah, tapi strategi build.
Contoh urutan yang efisien:
- copy
package.jsonterlebih dulu - install dependency
- baru copy source code
Dengan begini, kalau kamu hanya ubah kode aplikasi, Docker tidak perlu download ulang dependency.
Perintah berguna:
docker build --no-cache .: build tanpa cache (debug build).docker history <image>: lihat layer dan ukurannya.
Bikin custom image (dockerfile)
Oke, pake image orang lain (Nginx) emang gampang. Tapi gimana cara bungkus aplikasi buatan kamu sendiri? Caranya pake file bernama Dockerfile.
Misal kamu punya aplikasi Node.js simpel (app.js). Buat file bernama Dockerfile (tanpa ekstensi) di folder yang sama:
# 1. Mulai dari base image (OS dasar + Node.js)
FROM node:18-alpine
# 2. Tentukan folder kerja di dalem container
WORKDIR /app
# 3. Copy file package.json kamu
COPY package.json .
# 4. Install dependencies
RUN npm install
# 5. Copy sisa kode aplikasi
COPY . .
# 6. Kasih tau port mana yang bakal dipake
EXPOSE 3000
# 7. Perintah buat ngejalanin aplikasi pas container start
CMD ["node", "app.js"]
Sekarang kita “masak” resep ini jadi Image:
docker build -t aplikasi-saya:v1 .
-t: Kasih nama tag (aplikasi saya versi 1)..: Lokasi Dockerfile (titik artinya folder sekarang).
Jalanin image buatanmu:
docker run -p 3000:3000 aplikasi-saya:v1
Masalah data hilang (Docker volumes)
Secara default, kalo container dihapus, semua data di dalemnya ilang. Bayangin kamu jalanin database MySQL di container. Kamu isi datanya seharian. Terus containernya kamu hapus. Pas kamu jalanin lagi, databasenya kosong melompong. Nangis kan?
Solusinya: Volumes. Volume itu kayak flashdisk yang nancep ke container. Walaupun containernya hancur, data di volume tetep aman di laptop kamu.
Cara pake volume:
docker run -v data_mysql:/var/lib/mysql mysql
Sekarang data MySQL bakal disimpen di volume bernama data_mysql yang dikelola Docker. Aman.
Bind mount vs volume: mana yang dipakai?
Ada dua cara menyimpan data:
- Volume: dikelola Docker, stabil, cocok production.
- Bind mount: map folder host ke container, cocok development.
Contoh bind mount:
docker run -v $(pwd):/app node:18-alpine
Aturan praktis:
- Development: bind mount.
- Production: volume atau storage eksternal.
Networking: port, bridge, dan debug koneksi
Secara default, container masuk ke jaringan bridge dan dapat IP internal.
Perintah penting:
docker network ls: lihat jaringan.docker network inspect <name>: lihat detail container di network.docker port <container>: cek port mapping.
Mode network:
bridge: default, aman.host: container pakai network host (cepat tapi lebih riskan).none: benar-benar tanpa jaringan.
Docker compose: mengatur banyak container
Aplikasi modern jarang berdiri sendiri. Biasanya ada Web App + Database + Redis.
Jalanin mereka satu-satu pake docker run itu capek dan ribet ngapalin perintahnya.
Kenalan sama Docker Compose. Kita bisa definisikan semua container dalam satu file docker-compose.yml.
Contoh docker-compose.yml buat WordPress + MySQL:
version: "3.8"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: rahasia_banget
MYSQL_DATABASE: wordpress
wordpress:
image: wordpress:latest
ports:
- "8000:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: rahasia_banget
depends_on:
- db
volumes:
db_data:
Cara jalaninnya cuma satu perintah:
docker-compose up -d
Docker bakal otomatis download image, bikin network biar WordPress bisa ngobrol sama MySQL, dan jalanin semuanya. Simpel, elegan.

Debugging container: kebiasaan wajib
Perintah debug yang sering menyelamatkan:
docker logs <container>: lihat log aplikasi.docker exec -it <container> sh: masuk ke container.docker inspect <container>: lihat konfigurasi lengkap.docker stats: pantau resource realtime.
Jika aplikasi tiba-tiba mati, cek exit code:
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.ExitCode}}"
Kesalahan umum pemula
- Lupa Expose Port: Udah jalanin container tapi gak bisa diakses di browser? Seringkali lupa nambahin
-p 8080:80. Container itu terisolasi, kamu harus “bolongin” dindingnya biar bisa masuk. - Mounting Code di Production: Pas development, kita sering pake bind mount (
-v ./code:/app) biar gak perlu rebuild tiap ganti kode. Tapi buat production, jangan lakukan ini. Copy kode ke dalem image biar konsisten. - Layer Caching: Di Dockerfile, urutan itu penting. Selalu copy
package.jsondannpm installDULUAN sebelum copy kode aplikasi (COPY . .). Biar kalo cuma ganti kode, Docker gak perlu install ulang npm dari awal (manfaatin cache). - Jalanin Container Sebagai Root: Lebih aman buat user non-root di Dockerfile (
USER nodemisalnya). - Gak Atur Limit Resource: Di production, set
--memorydan--cpusagar satu container tidak menghabisi server.
Penasaran gimana error-error ini bisa bikin kacau di production? Baca studi kasus troubleshooting Docker yang saya tulis berdasarkan pengalaman nyata menangani container yang terus restart.
Apa selanjutnya?
Selamat! Kamu udah paham dasar-dasar Docker. Dari sini, dunia DevOps makin luas. Langkah selanjutnya coba pelajari:
- Cara deploy Docker ke VPS (DigitalOcean/AWS).
- Belajar CI/CD (biar pas push ke GitHub, otomatis build docker image).
- Kalo container kamu udah ratusan, pelajari Kubernetes (tapi ini nanti aja, jangan buru-buru).
Ingat, error itu temen belajar. Kalau bingung, docker logs <container_id> adalah sahabat terbaik kamu. Selamat mencoba!
Semoga pembahasan Docker dasar ini membantu kamu mengambil keputusan yang lebih tepat di lapangan.
Checklist Implementasi
- Uji langkah di lab terlebih dulu sebelum produksi.
- Dokumentasikan konfigurasi, versi, dan langkah rollback.
- Aktifkan monitoring + alert untuk komponen yang diubah.
- Audit akses dan terapkan prinsip least privilege.
Referensi Resmi
Butuh Bantuan?
Jika ingin implementasi aman di produksi, saya bisa bantu assessment, eksekusi, dan hardening.
Hubungi SayaTentang Penulis
Kamandanu Wijaya
IT Infrastructure & Network Administrator
Administrator infrastruktur & jaringan dengan pengalaman enterprise 14+ tahun, fokus stabilitas, keamanan, dan automasi.
Sertifikasi: Google IT Support, Cisco Networking Academy, DevOps.
Lihat ProfilButuh Solusi IT?
Tim DoWithSudo siap membantu setup server, VPS, dan sistem keamanan lo.
Hubungi Kami