“Kok di laptop dia jalan, di laptop gue error?”
Ini masalah klasik saat kerja bareng tim atau coba tutorial dari internet.
Nah, Docker hadir buat ngilangin drama seperti ini.
Pernah nggak, kamu nemu project keren di GitHub, semangat clone repo-nya, terus...
npm install → jalan.
npm run dev→ ❌ Error.
Padahal di README udah ditulis step-nya. Tapi entah kenapa, environment kamu selalu beda: versi Node beda, dependency error, database gak konek, atau config yang nggak ke-share.
Kalau kamu kerja bareng tim, masalah makin ribet. Tim kamu pakai macOS, kamu pakai Windows. Dia pakai PostgreSQL, kamu belum install.
Semua ini bikin waktu kamu habis buat "nyeting", bukan coding.
Nah, di sinilah Docker jadi penyelamat.
Docker itu kayak kotak ajaib yang bisa bawa semua isi project—termasuk versi dependensi, sistem operasi, bahkan database—dan bisa dijalankan di mana aja, tanpa ribet setting ulang.
Jadi, alih-alih ribet install satu-satu, kamu cukup jalankan satu perintah:
docker compose updan semuanya langsung siap.
Di artikel ini, kita bakal bahas gimana sih cara kerja Docker, istilah-istilah dasarnya, dan kenapa kamu harus banget kenal Docker kalau mau kerja efisien—baik sendiri maupun bareng tim.
Apa Itu Docker?

“Docker itu kayak koper digital. Kamu bisa bawa aplikasi beserta isinya ke mana pun tanpa ribet setting ulang.”
Apa Itu Docker, Sebenarnya?
Docker adalah platform open-source yang membantu developer untuk membuat, mengemas, dna menjalankan aplikasi dalam satu unit terisolasi yang disebut container.
Container ini berisi semua yang dibutuhkan aplikasi agar bisa berjalan—mulai dari kode, library, tools, sampai konfigurasi sistem.
Analogi Sederhana: Koper vs Rumah
Bayangkan kamu mau traveling dan butuh bawa semua kebutuhan: baju, sabun, charger, buku, dll.
Kalau kamu bawa satu per satu? Ribet. Tapi kalau kamu punya koper? Semuanya bisa dibawa sekaligus dan lansung dipakai di mana saja.
Docker berperan seperti koper untuk aplikasi.
Sementara itu, Virtual Machine (VM) itu kayak rumah lengkap, tapi besar dan berat.
Docker lebih seperti apartemen: ringkas, efisien, dan bisa disusun banyak dalam satu gedung.
Sedikit Sejarah: Dari DotCloud ke Docker
Docker pertama kali diperkenalkan pada tahun 2013 oleh perusahaan dotCloud, yang kemudian berubah nama menjadi Docker Inc.
Sebelum Docker populer, para developer mengandalkan Virtual Machine (VM) untuk membuat lingkungan terisolasi. Sayangnya, VM boros resource dan lambat.
Docker muncul dengan pendekatan baru: menggunakan teknologi container Linux (seperti LXC), tatapi dengan kemasan yang jauh lebih mudah digunakan dan diintegrasikan.
Kenapa Docker Jadi Penting?
Docker cepat mendapat perhatian dunia karena:
- ✅ Portabel → Bisa dijalankan di mana saja (laptop, server, cloud).
- ✅ Konsisten → Lingkungan dev dan production identik, gak ada lagi “jalan di laptop gue”.
- ✅ Ringan → Gak perlu OS terpisah seperti VM.
- ✅ Scalable → Cocok untuk arsitektur microservices dan CI/CD.
Apa Manfaat Docker Buat Kamu?
Docker sangat berguna kalau kamu:
- 🔧 Sering setup project orang dan suka error,
- 👥 Kerja bareng tim beda-beda OS,
- ☁️ Mau deploy ke VPS/cloud dengan mudah,
- 🧪 Pengen testing environment yang stabil dan cepat.
Cara Kerja Docker: “Koper Pintar untuk Aplikasi”

“Docker itu seperti koper yang nggak cuma menyimpan barang, tapi juga bisa langsung dipakai di mana saja tanpa perlu bongkar ulang.”
Bayangkan Kamu Punya Aplikasi...
Sebuah aplikasi biasanya butuh banyak hal untuk bisa berjalan:
- Kode program,
- Library atau framework tertentu,
- Versi runtime spesifik (misal Node.js 18, bukan 20),
- Database lokal,
- Variabel lingkungan atau config tertentu.
Kalau kamu coba jalankan aplikasi ini di laptop temanmu atau di server, dan salah satu komponen itu gak cocok... boom! Error.
Nah, Docker menyelesaikan masalah ini dengan cara membungkus semua itu ke dalam satu unit portable bernama container.
Bagaimana Docker Bekerja?
Proses kerja Docker secara umum bisa dibagi menjadi 4 tahapan:
[Dockerfile] → [Image] → [Container] → [Running App]
Mari kita bedah satu per satu:
1. Dockerfile (Blueprint / Resep)
Dockerfile adalah file teks yang berisi instruksi step-by-step untuk membangun image.
Ibarat resep masakan: bahan apa yang dipakai, proses masaknya gimana, dan urutannya bagaimana.
Contoh isi Dockerfile:
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]
2. Image (Cetakan Siap Pakai)
Image adalah hasil jadi dari Dockerfile.
Ibaratnya, ini makanan yang sudah dibekukan dan siap dikirim ke mana saja.
Image sifatnya read-only dan bisa dibagikan ke siapa saja via registry seperti Docker Hub.
3. Container (Image yang Dijalankan)
Container adalah image yang sedang berjalan.
Saat kamu menjalankan image, Docker membuat instance baru dalam bentuk container.
Satu image bisa digunakan untuk membuat banyak container.
4. Running App (Aplikasi Aktif)
Di tahap ini, aplikasi kamu benar-benar aktif dan bisa diakses.
Semua dependensi sudah ikut masuk di dalam container, jadi kamu gak perlu install manual.
Tinggal jalankan:
docker run my-app-image
Dan... aplikasi langsung hidup, tanpa setup ribet.
Perbandingan Docker vs Virtual Machine
Agar kamu makin paham keunggulan Docker, berikut ini perbandingannya dengan Virtual Machine (VM):
- Startup Time (Waktu Menyala):
- VM: Lambat, bisa butuh beberapa menit.
- Docker: Sangat cepat, hanya butuh beberapa detik.
- Resource Usage (Penggunaan Resource):
- VM: Berat, karena setiap VM membutuhkan sistem operasi lengkap.
- Docker: Ringan, karena menggunakan OS yang sama dengan host-nya.
- Portabilitas:
- VM: Kurang fleksibel. Butuh software tambahan dan konfigurasi manual.
- Docker: Sangat portabel. Bisa dipindah dan dijalankan di mana saja tanpa perubahan.
- Isolasi Aplikasi:
- VM: Sangat terisolasi, tapi boros resource.
- Docker: Isolasi cukup kuat, dengan performa lebih ringan dan efisien.
Jadi, kalau kamu ingin efisiensi, kecepatan, dan kemudahan dalam membangun aplikasi, Docker adalah pilihan yang lebih praktis dibandingkan VM.
Real Case: Install Docker & Jalankan Proyek Next.js 15 dengan Bun

Dalam artikel ini, kita akan menggunakan dua file berbeda:
- 🏗️
Dockerfile→ untuk membangun image production - 🏗️
Dockerfile.dev→ untuk membangun image development - 🛠️
docker-compose.pord.yml→ untuk mengelola environment saat production - 🛠️
docker-compose.dev.yml→ untuk mengelola environment saat development
Alasannya Kenapa Dipisah:
- 🔁 Workflow berbeda Development butuh hot reload, sedangkan production butuh stabil dan siap deploy.
- ⚡ Efisiensi build Production image tidak memuat tools development, sehingga lebih ringan dan cepat dipakai di server.
- 🧪 Kenyamanan coding Docker Compose memudahkan setup development: auto-reload, volume sinkron, hingga multi-service seperti database atau Redis.
- 🧩 Fleksibel Kamu bisa build sekali untuk production, dan jalankan image-nya di mana saja tanpa perlu konfigurasi ulang.
1. Install Docker (1x Setup, Bisa Digunakan Selamanya)
- Download Docker Desktop:
- Buka: https://www.docker.com/products/docker-desktop/
- Pilih sesuai OS: Windows, macOS, atau Linux.
- Install dan Jalankan Docker Desktop:
- Ikuti petunjuk installer.
- Setelah selesai, pastikan Docker berjalan. Cek lewat terminal:
docker --version

2. Siapkan Proyek Next.js 15 dengan Bun
Misalkan kamu sudah punya project Next.js 15 yang menggunakan Bun, misalnya seperti ini:
bunx create0-next-app@latest bwa-next15
cd bwa-next15
Kamu juga bisa clone project dari GitHub kalau sudah tersedia:
git clone <https://github.com/cakfan/bwa-next-seo.git> bwa-next15
cd bwa-next15

3. Struktur Project Ideal
my-next15-app/
├── Dockerfile # untuk production
├── Dockerfile.dev # untuk development
├── docker-compose.dev.yml # untuk development
├── docker-compose.prod.yml # untuk production
├── .dockerignore
├── package.json
├── bun.lock
└── src/
4. Tambahkan Dockerfile
Buat file bernama Dockerfile di root project:
# Gunakan image Bun yang sudah siap pakai
FROM oven/bun
# Tentukan direktori kerja di dalam container
WORKDIR /app
# Copy semua file ke dalam container
COPY . .
# Install dependency
RUN bun install
# Jalankan aplikasi Next.js
CMD ["bun", "run", "start"]
Penjelasan:
FROM oven/bun: pakai image resmi Bun yang sudah ada Node.js.COPY . .: semua file proyek dimasukkan ke container.RUN bun install: install semua dependensi.CMD: perintah default saat container dijalankan.
5. Tambahkan docker-compose.prod.yml
Buat file docker-compose.prod.yml
services:
web:
container_name: next15-prod
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
- NODE_ENV=production
restart: unless-stopped
Tmambahkan kode ini di file package.json
// package.json
"scripts": {
"dev:docker": "docker compose -f docker-compose.dev.yml up --build",
"prod:docker": "docker compose -f docker-compose.prod.yml up --build -d"
}
Membuat alias, agar bisa dijalankan dengan mudah.
6. Tambahkan .dockerignore
Buat file .dockerignore agar file yang tidak perlu (seperti node_modules) tidak masuk ke image:
node_modules
.dockerignore
Dockerfile
.git
.gitignore
bun.lock
Ini membantu image lebih ringan dan proses build lebih cepat.
7. Build Docker Image
Jalankan perintah berikut di root folder proyek:
bun run prod:docker
Penjelasan:
t my-next15-app: memberi nama pada image..artinya build berdasarkan Dockerfile di direktori ini.


8. Tambah DockerFile.dev
📄 Isi file: DockerFile.dev
# Gunakan image Bun yang sudah siap pakai
FROM oven/bun
# Tentukan direktori kerja di dalam container
WORKDIR /app
# Copy semua file ke dalam container
COPY . .
# Install dependency
RUN bun install
# Jalankan aplikasi Next.js
CMD ["bun", "run", "dev"]
9. Development dengan docker-compose.dev.yml
📄 Isi file: docker-compose.yml
services:
web:
container_name: next15-dev
build:
context: .
dockerfile: Dockerfile.dev
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
command: bun run dev
environment:
- NODE_ENV=development
10. Jalankan untuk development:
bun run dev:docker

11. Share ke GitHub
- Inisialisasi Git (jika belum):
git init git remote add origin <https://github.com/username/my-next15-app.git> - Tambahkan semua file:
git add . git commit -m "init: dockerized next.js 15" - Push ke GitHub:
git branch -M main git push -u origin main

Hasil Akhir
Sekarang kamu sudah punya:
- Aplikasi Next.js 15 yang berjalan dengan Bun.
- Proyek yang bisa dijalankan siapa saja, cukup dengan
docker run. - Image portable yang bisa di-deploy ke server, VPS, atau cloud service seperti Vercel, Railway, atau Render.
Istilah-Istilah Dasar yang Wajib Dikenal
Docker punya beberapa istilah penting yang sering muncul. Supaya gak bingung, yuk kita pelajari dengan analogi dan contoh sederhana:
1. Image
Blueprint / resep masakan
- Penjelasan: Image adalah cetakan statis berisi aplikasi dan semua komponennya. Ini seperti resep masakan lengkap yang bisa kamu salin dan jalankan kapan saja.
- Contoh:
node:18,oven/bun,nginx:alpine, ataumy-next-app:latest. - Analogi: Seperti kamu punya resep rendang. Kamu belum masak, tapi udah tau semua bahan dan langkahnya.
2. Container
Makanan jadi dari resep
- Penjelasan: Container adalah versi yang sedang berjalan dari image. Setiap container unik, bisa start/stop, dan bekerja terisolasi.
- Contoh:
docker run -p 3000:3000 my-next-appakan menjalankan container dari imagemy-next-app. - Analogi: Seperti kamu masak rendang dari resep tadi, sekarang rendangnya udah bisa dimakan.
3. Dockerfile
Buku resep / instruksi untuk bikin image
- Penjelasan: File konfigurasi berisi langkah-langkah membangun image Docker.
- Contoh: File bernama
Dockerfile:FROM oven/bun WORKDIR /app COPY . . RUN bun install CMD ["bun", "run", "start"] - Analogi: Kamu tulis langkah: “panaskan oven, masukkan adonan, panggang 20 menit” → inilah Dockerfile.
4. Volume
Laci penyimpanan data di luar koper
- Penjelasan: Tempat menyimpan data agar tidak hilang meski container dihapus. Sangat berguna untuk menyimpan database, file konfigurasi, dll.
- Contoh:
volumes: - ./data:/var/lib/postgresql/data - Analogi: Kamu bawa koper (container) ke hotel. Laci (volume) tetap ada di kamar. Meski kamu ganti koper, laci tetap berisi baju kamu.
5. Port Mapping
Jendela supaya dunia luar bisa lihat ke dalam container
- Penjelasan: Menghubungkan port di dalam container ke port di komputer host.
- Contoh:
docker run -p 3000:3000 my-next-app - Analogi: Bayangkan container itu kamar tertutup. Port mapping membuka jendela supaya orang bisa ngobrol dari luar.
6. Docker Hub
Tokopedia-nya image Docker
- Penjelasan: Registry tempat publik menyimpan dan mengambil Docker image.
- Contoh:
docker pull nginx docker push username/my-next-app - Analogi: Kamu bisa cari image orang lain seperti cari barang di Tokopedia: tinggal cari, klik, pakai.
Bonus Tips
Kamu gak perlu hafal semua dulu. Cukup tahu:
- Image = resep
- Container = masakan jadi
- Dockerfile = buku resep
- Volume = penyimpanan data
- Port = jendela akses
- Docker Hub = marketplace-nya
Kapan dan Kenapa Docker Dipakai di Proyek Nyata?
Docker bukan cuma tools keren, tapi solusi nyata untuk banyak masalah dalam pengembangan dan deployment aplikasi. Yuk kita bahas kapan dan kenapa Docker dipakai dalam proyek sungguhan, lengkap dengan contoh kasarnya!
1. Dev Lokal vs Server
“Di laptop aman, tapi di server error?!”
- Docker bikin environment kamu konsisten dari laptop ke staging sampai production.
- Contoh: kamu develop pakai Bun + PostgreSQL versi tertentu → server tinggal pakai image yang sama, gak perlu setup ulang.
2. Kolaborasi Tim
“Waktu onboarding, harus install apa aja nih?”
- Setiap anggota tim cukup jalankan
docker compose up→ semua environment langsung siap. - Gak ada lagi drama: “Oh kamu belum install Redis ya?” atau “Versi Node-mu beda sih…”
3. CI/CD Pipelines
“Build dan deploy otomatis setiap push ke GitHub”
- Docker memudahkan otomatisasi proses:
- Build image
- Jalankan unit test
- Deploy ke server
- Tools seperti GitHub Actions, GitLab CI, dan CircleCI sangat cocok dipadukan dengan Docker.
4. Testing Multi-Environment
“Coba test pake MySQL 5, MySQL 8, PostgreSQL 15, Redis 7…”
- Tanpa Docker: ribet install semuanya manual.
- Dengan Docker: cukup ubah versi di
docker-compose.yml, dan langsung jalankan service yang kamu mau.
5. Microservices Architecture
“Aplikasi dibagi jadi banyak bagian kecil, gimana jalaninnya bareng?”
- Setiap service bisa dijalankan dalam container masing-masing:
auth-service,product-service,payment-service, dll.
- Semuanya bisa jalan bareng, terisolasi, dan saling terhubung dengan jaringan internal Docker.
Bonus Kasus Nyata: Docker vs Tanpa Docker
- Onboarding Developer Baru
- ❌ Tanpa Docker: butuh waktu 1–2 hari setup
- ✅ Dengan Docker: cukup
docker compose up, selesai dalam 5 menit
- Ganti Versi Node.js
- ❌ Tanpa Docker: harus uninstall, reinstall, dan bisa konflik
- ✅ Dengan Docker: cukup ubah 1 baris
FROM node:18diDockerfile
- Testing Fitur dengan PostgreSQL
- ❌ Tanpa Docker: harus install database, setup manual
- ✅ Dengan Docker: tinggal tambahkan service di
docker-compose.yml
- Deploy ke Server
- ❌ Tanpa Docker: manual setup, SCP, konfigurasi ulang
- ✅ Dengan Docker: push image ke registry, jalankan container — siap pakai
Kesimpulan
Docker bukan sekadar “mainan DevOps”. Ini alat praktis yang:
- Menghemat waktu
- Mengurangi error
- Mempercepat kolaborasi
- Menyatukan dev, test, dan deploy jadi satu alur yang solid
Kalau kamu ingin proyek kamu scalable dan gampang dibagi ke tim, Docker adalah salah satu investasi awal terbaik.
Kesalahan Umum Pemula Saat Pakai Docker
Belajar Docker itu seru, tapi juga penuh jebakan kecil—terutama buat yang baru mulai. Berikut beberapa kesalahan paling umum dan cara menghindarinya:
1. Struktur Dockerfile Tidak Efisien
“Image-nya jadi 1GB padahal cuma Next.js doang?”
- Masalah: Menulis
COPY . .di awal laluRUN bun install, bikin semua file lokal (termasuk cache,.git, dannode_modules) ikut masuk ke image. - Solusi:
- Gunakan urutan yang benar: install dependency dulu sebelum copy semua file.
- Contoh optimal:
COPY package.json bun.lockb ./ RUN bun install COPY . .
2. Lupa Pakai .dockerignore
“Kok build-nya lama banget?”
- Masalah: Tanpa
.dockerignore, Docker akan meng-copy semua file di direktori—termasuk:.git/node_modules/- file temp, log, backup, dsb.
- Solusi: Buat file
.dockerignoreseperti:node_modules .git .env .next *.log
3. Volume Tidak Diatur dengan Benar
“Lho kok datanya hilang waktu container dimatikan?”
- Masalah: Menyimpan data di dalam container langsung tanpa volume → saat container dihapus, datanya ikut hilang.
- Solusi: Gunakan volume saat menjalankan container, contoh:
docker run -v bun-next-data:/app/data my-app
4. Tidak Memahami Cache Layer Docker
“Kenapa setiap build butuh 2 menit padahal cuma ubah satu baris JS?”
- Masalah: Docker membuild ulang semua layer karena urutan perintah tidak dioptimalkan.
- Solusi:
- Tempatkan perintah yang jarang berubah (install dependencies) di awal.
- Ubah hanya file yang memang perlu di-copy ulang.
- Gunakan layer caching dengan urutan
COPY package.json→RUN bun install→COPY . .
5. Bocor Environment File .env
“Loh, kenapa token API ada di Docker Hub?”
- Masalah:
.envtidak di-ignore atau malah di-commit ke repo/image. - Solusi:
- Masukkan
.envke dalam.dockerignore. - Gunakan bind mount atau secret management tool untuk inject
.envsaat runtime, bukan di image build.
- Masukkan
Penutup
Dengan ngerti cara kerja Docker, kamu sekarang udah punya bekal penting buat naik level — entah itu biar kerja tim makin rapi, setup lokal gak drama, atau siapin aplikasi kamu buat production. Awalnya mungkin terasa ribet, banyak istilah baru… tapi makin lama, kamu bakal sadar:
“Oh, ternyata Docker bikin hidup developer jauh lebih ringan ya.”
Anggap aja hari ini kamu lagi belajar nyetir motor. Di awal mungkin kagok main gas-rem, tapi nanti kamu bisa naik motor ke mana aja — cepat, fleksibel, dan gak takut nyasar.
Dan kalau kamu pengen terus upgrade skill coding kamu, belajar langsung bareng mentor expert di BuildWithAngga bisa jadi pilihan yang pas banget. Gak cuma dapet akses belajar selamanya, tapi juga bisa bangun portofolio keren, ngobrol langsung sama mentor, dan dapet arahan biar kamu bisa tembus dunia kerja atau proyek impian kamu.
Yuk, jangan cuma jadi penonton — saatnya ikut petualangan coding yang sesungguhnya bareng BuildWithAngga. 🚀