"Tapi di laptop saya jalan kok..."
Kalimat itu udah jadi legenda di ruang standup tiap kali staging atau production ngambek. Untungnya, Docker datang bawa solusi: bungkus aplikasi ke dalam container biar lingkungannya sama di mana pun.
Tapi ada satu hal yang bikin repot. Kalau aplikasi kalian butuh web server (FastAPI), database (PostgreSQL), cache (Redis), dan queue (RabbitMQ), masa iya kalian harus ngejalanin docker run satu-satu buat tiap container?
Nah, di sinilah Docker Compose masuk jadi pahlawan. 😎
Poin Penting
- Dockerfile cuma ngurus satu container, padahal aplikasi nyata biasanya butuh database, cache, dan message broker sekaligus.
- Docker Compose ngebungkus web server, database, dan cache dalam satu file deklaratif
docker-compose.ymlyang tinggal dijalankan dengan satu perintah. - Network isolation dan persistent volume diatur otomatis lewat Compose, jadi data database tetap aman walau container-nya dimatiin.
- Onboarding anggota tim baru jadi mulus karena cukup
git clonelaludocker compose up -d, tanpa nginstal apa pun manual.
Kenapa Dockerfile aja belum cukup?
Dockerfile itu ibarat resep buat bikin satu container. Misalnya resep khusus buat aplikasi FastAPI kalian.
Dalam praktik nyata, aplikasi jarang berdiri sendiri. Kalian butuh database, butuh Redis, dan mungkin butuh RabbitMQ juga.
Kalau cuma modal Dockerfile biasa:
- Harus build dan run container aplikasinya.
- Harus run container PostgreSQL dengan environment variable tersendiri.
- Harus run container Redis.
- Harus nyambungin ketiganya manual dalam satu Docker Network.
Belum lagi kalau ada anggota tim baru yang wajib ngulang semua langkah itu dari nol. Capek banget, kan? 😅
Docker Compose hadir buat ngorganisir banyak container (multi-container) cuma dari satu file konfigurasi.
Satu file buat semua service
Dengan Docker Compose, kalian cukup bikin satu file bernama docker-compose.yml yang isinya rancangan seluruh service aplikasi.
Setelah file-nya siap, tinggal jalanin satu perintah:
docker compose up -d
Semua service (web, database, redis) nyala otomatis dan saling terhubung dalam satu jaringan.
Anatomi file docker-compose.yml
Berikut contoh sederhana konfigurasi docker-compose.yml yang nyambungin web server dengan PostgreSQL:
services:
web:
build: .
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://user:password@db:5432/mydatabase
depends_on:
db:
condition: service_healthy
db:
image: postgres:15-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydatabase
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user -d mydatabase"]
interval: 5s
timeout: 5s
retries: 5
volumes:
postgres_data:
Penjelasan singkatnya:
services: daftar container yang mau dijalankan (webdandb).build: .: instruksi buat build container dari Dockerfile lokal.depends_ondengancondition: service_healthy: nunggu containerdbbenar-benar siap nerima koneksi, bukan cuma sekadar nyala.volumes: nyimpen data database biar nggak hilang pas container-nya dimatiin.
Oh iya, kalian mungkin bakal nemu contoh lawas yang nulis version: '3.8' di baris paling atas. Field itu udah nggak dibutuhin lagi di Compose versi baru—kalau dipasang, Docker malah ngasih peringatan obsolete.
Perintah penting yang sering dipakai
Beberapa perintah yang bakal sering kalian ketik sehari-hari:
docker compose up -d— nyalain semua service di belakang layar.docker compose ps— ngintip status service yang lagi jalan.docker compose logs -f web— ngikutin log aplikasi secara real-time.docker compose down— matiin seluruh container dan jaringannya.
Satu perintah, bebas drama
Buang jauh-jauh drama "di laptop saya jalan kok..." dari tim kalian. Pakai docker-compose.yml, seluruh konfigurasi stack aplikasi—mulai dari web server, database PostgreSQL, Redis cache, sampai message broker—terdokumentasi rapi sebagai kode deklaratif yang konsisten.
Cukup satu perintah docker compose up -d, dan lingkungan kerja lokal kalian siap nerima request dalam hitungan detik. Anggota tim baru tinggal git clone, jalanin satu perintah, terus langsung ngoding. Nggak ada lagi sesi debugging dua jam gara-gara versi PostgreSQL beda tipis. 🎉
Selamat ber-Compose ria, dan semoga docker compose up kalian nggak pernah gagal di hari pertama kerja! 👋