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:

  • app
  • db
  • redis
  • nginx

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 .env local
  • 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.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact