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.moddango.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 Dockerfileports→ expose API ke hostvolumes→ sinkronisasi source code lokalenv_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.