tutorial, docker,

Docker untuk Development Environment: Setup Lokal yang Konsisten untuk Tim

Kiki/🎮🍉⌨️🍩💻 Kiki/🎮🍉⌨️🍩💻 Sep 04, 2026 · 6 mins read
Docker untuk Development Environment: Setup Lokal yang Konsisten untuk Tim
Share this

Salah satu use case paling berharga Docker bukan di production — melainkan di local development. Dengan Docker, seluruh tim bisa memiliki environment yang identik tanpa harus menginstal PostgreSQL, Redis, atau service lain langsung di mesin masing-masing. Tidak ada lagi “di komputer saya jalan” karena semua memang menggunakan environment yang sama persis.


Masalah yang Dipecahkan

Tanpa Docker, onboarding developer baru butuh:

  1. Install Node.js versi yang tepat
  2. Install PostgreSQL dan buat database
  3. Install Redis
  4. Konfigurasi environment variables
  5. Jalankan migrasi
  6. … dan seterusnya

Dengan Docker, cukup:

git clone repo
docker compose up

Semua service langsung berjalan, versi sudah dikunci, konfigurasi sudah tersedia.


Setup Development dengan Docker Compose

docker-compose.yml (untuk development):

version: '3.8'

services:
  # Aplikasi — jalankan dengan bind mount untuk hot reload
  api:
    build:
      context: .
      target: development     # gunakan stage development dari Dockerfile
    ports:
      - "3000:3000"
      - "9229:9229"           # port Node.js debugger
    environment:
      - NODE_ENV=development
      - DATABASE_URL=postgresql://dev:devpass@db:5432/devdb
      - REDIS_URL=redis://cache:6379
    volumes:
      - .:/app                # bind mount source code
      - /app/node_modules     # jangan override node_modules container
    command: npm run dev      # nodemon untuk hot reload
    depends_on:
      db:
        condition: service_healthy
      cache:
        condition: service_started

  # Database PostgreSQL
  db:
    image: postgres:16-alpine
    ports:
      - "5432:5432"           # expose ke host untuk koneksi dari tools (TablePlus, DBeaver)
    environment:
      POSTGRES_USER: dev
      POSTGRES_PASSWORD: devpass
      POSTGRES_DB: devdb
    volumes:
      - postgres_dev:/var/lib/postgresql/data
      - ./scripts/init.sql:/docker-entrypoint-initdb.d/init.sql   # seed awal
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U dev -d devdb"]
      interval: 5s
      timeout: 3s
      retries: 10

  # Redis
  cache:
    image: redis:7-alpine
    ports:
      - "6379:6379"

  # Redis GUI (opsional, berguna untuk debugging)
  redis-gui:
    image: redislabs/redisinsight:latest
    ports:
      - "8001:8001"
    profiles:
      - tools                 # hanya jalan jika eksplisit diaktifkan

  # Mailhog — email catcher untuk development
  mailhog:
    image: mailhog/mailhog
    ports:
      - "1025:1025"   # SMTP
      - "8025:8025"   # Web UI

volumes:
  postgres_dev:

Dockerfile dengan Multiple Stage

# Stage: base
FROM node:20-alpine AS base
WORKDIR /app
COPY package*.json ./

# Stage: development
FROM base AS development
RUN npm install          # install semua deps termasuk devDependencies
COPY . .
EXPOSE 3000 9229
CMD ["npm", "run", "dev"]

# Stage: builder
FROM base AS builder
RUN npm ci
COPY . .
RUN npm run build

# Stage: production
FROM node:20-alpine AS production
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY --from=builder /app/dist ./dist
EXPOSE 3000
CMD ["node", "dist/index.js"]

Workflow Harian Developer

# Pertama kali setup (sekali saja)
cp .env.example .env
docker compose up --build

# Setelah clone atau pull changes
docker compose up -d

# Saat bekerja — service sudah berjalan di background
# Edit code → hot reload otomatis via nodemon

# Jalankan perintah di dalam container
docker compose exec api npm test
docker compose exec api npx prisma migrate dev --name add_column
docker compose exec api npx prisma studio

# Akses database langsung
docker compose exec db psql -U dev devdb

# Lihat log
docker compose logs -f api

# Restart satu service (misalnya setelah ubah env)
docker compose restart api

# Reset total — hapus semua data dan mulai ulang
docker compose down -v
docker compose up --build

Makefile untuk Shortcut Perintah

Buat Makefile di root project agar perintah lebih pendek:

.PHONY: up down logs shell db migrate seed test

up:
	docker compose up -d

down:
	docker compose down

build:
	docker compose up -d --build

logs:
	docker compose logs -f api

shell:
	docker compose exec api sh

db:
	docker compose exec db psql -U dev devdb

migrate:
	docker compose exec api npx prisma migrate dev

seed:
	docker compose exec api npx prisma db seed

test:
	docker compose exec api npm test

reset:
	docker compose down -v && docker compose up -d --build

Penggunaan:

make up       # jalankan semua service
make shell    # masuk ke shell container api
make migrate  # jalankan migrasi
make reset    # reset total

Tips Performa Docker Desktop di Windows/macOS

Docker Desktop di Windows dan macOS menggunakan VM Linux di belakang layar. Bind mount ke folder host bisa lambat. Beberapa tips:

Gunakan WSL2 di Windows

Pastikan Docker Desktop menggunakan WSL2 backend dan simpan project di filesystem WSL2 (/home/user/), bukan di Windows (/mnt/c/).

Batasi Resource Docker Desktop

Di Docker Desktop Settings → Resources:

  • CPU: sesuaikan, jangan beri semua core
  • Memory: 4-8GB sudah cukup untuk kebanyakan proyek

.dockerignore yang Baik

File yang masuk ke build context mempengaruhi kecepatan build. Pastikan .dockerignore sudah mengecualikan semua yang tidak perlu:

node_modules
.git
.env*
*.log
dist
coverage
.nyc_output

Kesimpulan

Docker untuk development environment adalah investasi kecil yang memberikan manfaat besar: konsistensi antar mesin, onboarding yang cepat, dan tidak ada lagi konflik versi. Dengan docker-compose.yml yang baik dan Makefile untuk shortcut, developer bisa fokus menulis kode tanpa khawatir soal setup infrastruktur.

Di artikel berikutnya, kita bahas Docker Security — praktik keamanan yang harus diterapkan saat menggunakan Docker di production.

Kiki/🎮🍉⌨️🍩💻
Written by Kiki/🎮🍉⌨️🍩💻
hello I'm friend K.