Local Development #
Dalam pengembangan aplikasi modern—terutama berbasis microservices atau aplikasi yang memiliki banyak dependensi—menyiapkan local development environment sering kali menjadi sumber masalah. Perbedaan versi runtime, database, message broker, hingga konfigurasi OS antara satu developer dengan developer lain dapat menyebabkan efek klasik: “it works on my machine”.
Docker Compose hadir sebagai solusi praktis untuk menyederhanakan dan menyeragamkan local development environment. Dengan satu file deklaratif (docker-compose.yml), seluruh stack aplikasi dapat dijalankan secara konsisten di berbagai mesin developer.
Artikel ini akan membahas secara mendetail:
- Apa itu Docker Compose dalam konteks local development
- Konsep dan komponen utamanya
- Pola umum arsitektur local development
- Best practice agar produktif dan production-aware
- Contoh konkret penggunaan Docker Compose
Apa Itu Docker Compose untuk Local Development #
Docker Compose adalah tool untuk mendefinisikan dan menjalankan aplikasi multi-container Docker. Untuk kebutuhan local development, Docker Compose biasanya digunakan untuk:
- Menjalankan aplikasi utama (backend / frontend)
- Menjalankan dependency seperti database, cache, message broker
- Mengatur network internal antar service
- Mengelola environment variable secara konsisten
- Menyederhanakan workflow start, stop, dan reset environment
Alih-alih menginstal PostgreSQL, Redis, Kafka, atau service lain secara manual di laptop, semua dependency dijalankan sebagai container.
Masalah yang Diselesaikan Docker Compose di Local Development #
1. Konsistensi Environment #
Setiap developer menjalankan stack yang sama:
- Versi database sama
- Konfigurasi port sama
- Dependency sama
Tidak ada lagi perbedaan setup antar mesin.
2. Onboarding Developer Lebih Cepat #
Developer baru cukup menjalankan:
docker compose up
Tanpa membaca dokumentasi setup panjang atau instalasi manual.
3. Isolasi Dependency #
Dependency aplikasi tidak “mengotori” sistem host:
- Tidak perlu install database di OS
- Tidak bentrok dengan project lain
4. Simulasi Lingkungan Nyata #
Walaupun bukan production, Docker Compose memungkinkan arsitektur local mendekati production:
- Multiple service
- Network internal
- Volume persistence
Komponen Utama Docker Compose untuk Local Development #
1. Services #
Setiap container didefinisikan sebagai service:
appdbredisnginx
Service mewakili satu proses atau satu peran.
2. Networks #
Docker Compose otomatis membuat network internal:
- Service bisa saling komunikasi via nama service
- Tidak perlu expose semua port ke host
Contoh:
services:
app:
depends_on:
- db
db:
image: postgres:16
app dapat mengakses database melalui hostname db.
3. Volumes #
Volume digunakan untuk:
- Persist data database
- Mount source code
- Cache dependency
Contoh:
volumes:
postgres_data:
4. Environment Variables #
Environment variable sangat penting untuk:
- Konfigurasi database
- Mode aplikasi (development)
- Credential non-production
Biasanya dikombinasikan dengan file .env.
Pola Arsitektur Local Development dengan Docker Compose #
1. Single App + Dependencies #
Pola paling umum:
- 1 service aplikasi
- 1 database
- 1 cache
Cocok untuk:
- Monolith
- Backend API sederhana
2. Frontend + Backend + Dependencies #
Stack umum web application:
- Frontend (React, Vue, dll)
- Backend API
- Database
- Reverse proxy
Docker Compose mengatur semuanya dalam satu network.
3. Microservices Lokal #
Untuk arsitektur microservices:
- Multiple backend service
- Shared database atau message broker
- API Gateway lokal
Walaupun berat, Docker Compose masih relevan untuk simulasi awal.
Contoh Docker Compose untuk Local Development #
Contoh: Backend API + PostgreSQL #
version: "3.9"
services:
app:
build: .
command: air
volumes:
- .:/app
ports:
- "8080:8080"
environment:
APP_ENV: development
DB_HOST: db
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
depends_on:
- db
db:
image: postgres:16
ports:
- "5432:5432"
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: app_db
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Karakteristik:
- Source code di-mount ke container
- Database data tetap tersimpan
- Aplikasi berjalan di mode development
Workflow Local Development dengan Docker Compose #
1. Menjalankan Environment #
docker compose up
Atau di background:
docker compose up -d
2. Melihat Log #
docker compose logs -f app
3. Restart Service Tertentu #
docker compose restart app
4. Reset Database #
docker compose down -v
Perintah ini akan menghapus volume dan data.
Best Practice Docker Compose untuk Local Development #
1. Pisahkan Local dan Production #
- Docker Compose hanya untuk local development
- Jangan menyamakan dengan production orchestrator
Biasanya:
docker-compose.yml→ local- Kubernetes / ECS → production
2. Gunakan Volume untuk Source Code #
Mount source code agar:
- Tidak perlu rebuild image setiap perubahan
- Mendukung hot reload
3. Jangan Over-Optimize Image #
Untuk local development:
- Image kecil bukan prioritas utama
- Debuggability dan kecepatan lebih penting
Optimasi image fokus di tahap production.
4. Gunakan .env untuk Konfigurasi #
- Hindari hardcode credential
- Mudah diganti antar environment
5. Hindari Port Conflict #
- Expose port hanya jika perlu
- Gunakan internal network antar service
6. Dokumentasikan Cara Pakai #
Tambahkan di README:
docker compose up
Sesederhana mungkin.
Anti-Pattern yang Perlu Dihindari #
- Menjalankan terlalu banyak service yang tidak dibutuhkan
- Menyamakan persis dengan production tanpa kebutuhan
- Menyimpan secret production di
.envlocal - Menggunakan data production untuk local
Kapan Docker Compose Kurang Cocok #
Docker Compose kurang ideal jika:
- Local development butuh autoscaling kompleks
- Simulasi traffic besar
- Dependency terlalu banyak dan berat
Dalam kasus ini, biasanya:
- Gunakan mock
- Gunakan managed service staging
Penutup #
Docker Compose adalah fondasi yang sangat kuat untuk local development yang konsisten, cepat, dan terstandarisasi. Dengan pendekatan yang tepat, developer dapat fokus pada penulisan kode tanpa direpotkan oleh setup environment.
Penting untuk diingat: Docker Compose bukan pengganti production orchestrator, tetapi alat yang sangat efektif untuk menjembatani kesenjangan antara kode dan runtime lokal.
Pada artikel-artikel berikutnya, pendekatan Docker Compose akan dibahas lebih spesifik per bahasa pemrograman dan jenis aplikasi, termasuk integrasi dengan workflow production-grade.