Gin + Docker Compose untuk Local Development
2 min read

Gin + Docker Compose untuk Local Development

Dalam pengembangan backend menggunakan Golang + Gin, salah satu tantangan klasik adalah menyiapkan environment lokal yang konsisten untuk semua engineer.

Tanpa containerisasi, biasanya muncul masalah seperti:

  • Versi Go berbeda antar mesin
  • Dependency database tidak sama
  • Konfigurasi environment yang tidak sinkron
  • Masalah klasik: works on my machine

Docker Compose adalah solusi yang sederhana, eksplisit, dan mudah diskalakan untuk local development.


Kenapa Docker Compose untuk Local Development?

Docker Compose memungkinkan kita:

  • Menjalankan API + dependency (DB, cache, dll) dengan satu perintah
  • Menyamakan environment semua developer
  • Memisahkan konfigurasi local vs production dengan jelas
  • Menghindari setup manual berulang di mesin baru

Dengan Docker Compose, onboarding engineer baru jadi jauh lebih cepat.


Contoh Struktur Proyek

Struktur sederhana project Gin dengan Docker Compose:

.
├── docker-compose.yml
├── Dockerfile
├── .env
├── go.mod
├── go.sum
├── main.go
└── internal/
    ├── handler
    ├── service
    └── repository

Dockerfile untuk Aplikasi Gin

Dockerfile berikut cukup untuk local development:

FROM golang:1.21

WORKDIR /app

COPY go.mod go.sum ./
RUN go mod download

COPY . .

RUN go build -o app

EXPOSE 8080

CMD ["./app"]

Catatan:

  • Base image memakai official Go image
  • Dependency di-cache lewat go.mod dan go.sum
  • Build binary dilakukan di container

Untuk production, biasanya Dockerfile ini akan dimodifikasi (multi-stage build).


docker-compose.yml untuk Local Development

Contoh Docker Compose sederhana:

version: '3.9'

services:
  api:
    build: .
    container_name: gin-api
    ports:
      - "8080:8080"
    volumes:
      - .:/app
    env_file:
      - .env
    command: ./app

Penjelasan:

  • build → build image dari Dockerfile
  • ports → expose API ke host
  • volumes → sinkronisasi source code lokal
  • env_file → load environment variable

Volume sangat penting agar perubahan kode langsung terlihat di container.


Menjalankan Aplikasi

Untuk menjalankan aplikasi:

docker compose up --build

Atau jika image sudah ada:

docker compose up

API akan tersedia di:

http://localhost:8080

Hot Reload (Opsional tapi Sangat Direkomendasikan)

Untuk local development, rebuild manual setiap perubahan kode sangat tidak efisien.

Gunakan tool seperti air:

go install github.com/air-verse/air@latest

Ubah command di Docker Compose:

command: air

Dengan ini:

  • File berubah → server restart otomatis
  • Workflow development jauh lebih cepat

Contoh Menambahkan Database (PostgreSQL)

services:
  api:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - db
    env_file:
      - .env

  db:
    image: postgres:16
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: app_db
    ports:
      - "5432:5432"

Dengan Compose, menambah dependency hanya soal menambah service.


Best Practice untuk Local Development

  • Gunakan Docker Compose hanya untuk local
  • Pisahkan file untuk production
  • Jangan commit file .env
  • Gunakan volume agar tidak rebuild terus
  • Jangan over-optimasi Dockerfile untuk dev

Local development harus cepat dan nyaman, bukan sempurna.


Kesimpulan

Docker Compose adalah alat yang sangat efektif untuk local development Gin:

  • Environment konsisten
  • Setup cepat
  • Mudah dikembangkan
  • Onboarding engineer lebih singkat

Jika tujuanmu adalah produktivitas dan stabilitas tim, Docker Compose adalah pilihan yang tepat.