Docker Compose untuk Pemula: Deploy 3 Service Sekaligus
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.