Docker Compose untuk Pemula: Deploy 3 Service Sekaligus

· Setup

Kenapa Compose, Bukan docker run?

Dengan docker run, setiap service butuh perintah panjang sendiri. Kalau ada 5 service, kamu copy-paste 5 perintah panjang setiap kali deploy ulang.

Compose membuat semua itu jadi satu file: sekali tulis, bisa dipakai berulang.

# ini yang ribet
docker run -d --name web -p 8080:80 -v /data/html:/usr/share/nginx/html nginx

# ini yang ringkas
docker compose up -d

Persiapan

Pastikan Docker sudah terpasang:

docker --version
docker compose version

Buat folder khusus project:

mkdir -p ~/project && cd ~/project

File Compose Pertama

Buat file docker-compose.yml:

services:
  web:
    image: nginx:alpine
    container_name: web-nginx
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro

  api:
    image: python:3-alpine
    container_name: web-api
    restart: unless-stopped
    command: python -m http.server 8000
    depends_on:
      - web

Buat halaman statis sederhana:

mkdir html
echo "<h1>Halo dari Compose</h1>" > html/index.html

Menjalankan

docker compose up -d      # start semua, detached
docker compose ps         # lihat status
docker compose logs -f    # ikuti log

Cek hasilnya:

curl http://localhost:8080

Menghentikan dan Menghapus

docker compose stop       # stop, data tetap ada
docker compose down       # hapus container, volume TIDAK terhapus
docker compose down -v    # hapus termasuk volume (hati-hati, data hilang)

Tips Penting

Restart policy itu wajib. Tanpa restart: unless-stopped, container mati kalau server reboot. Semua service di Compose wajib punya ini.

Gunakan volume dengan mode :ro untuk file config dan aset statis yang tidak perlu ditulis container. Mencegah container merusak file kamu.

Healthcheck-biaya sedikit tapi berguna saat container sudah 5+:

healthcheck:
  test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1/"]
  interval: 30s
  timeout: 5s
  retries: 3

Kesimpulan

Setelah paham 3 konsep ini (service, volume, restart policy), Compose jadi ringan. File yang sama bisa dipakai di Raspberry Pi maupun server production tanpa perubahan.

Langkah selanjutnya adalah setup reverse proxy agar semua service bisa diakses lewat satu domain dengan HTTPS otomatis.