Apa Itu Docker Compose? #
Dalam pengembangan aplikasi modern, sangat jarang sebuah aplikasi hanya terdiri dari satu komponen saja. Umumnya, sebuah aplikasi web membutuhkan backend service, database, cache, message broker, hingga reverse proxy. Mengelola semua container tersebut satu per satu dengan perintah docker run akan cepat menjadi rumit, sulit direproduksi, dan rawan kesalahan.
Di sinilah Docker Compose hadir.
Docker Compose adalah tool resmi dari Docker yang digunakan untuk mendefinisikan, mengonfigurasi, dan menjalankan aplikasi multi-container menggunakan sebuah file deklaratif bernama docker-compose.yml.
Dengan Docker Compose, kita bisa:
- Menjalankan banyak container dengan satu perintah
- Mendefinisikan relasi antar service secara jelas
- Menyamakan environment development, testing, hingga staging
- Mengurangi kompleksitas operasional saat development
Apa Itu Docker Compose Secara Konsep #
Docker Compose bekerja dengan pendekatan Infrastructure as Code (IaC) versi ringan untuk container.
Alih-alih menulis perintah panjang seperti:
docker run backenddocker run postgresdocker run redis
Docker Compose memungkinkan kita menuliskan semuanya dalam satu file YAML, lalu menjalankannya sekaligus.
Sederhananya:
- Dockerfile → cara membangun satu image
- Docker Compose → cara menjalankan banyak container sekaligus
Komponen Utama Docker Compose #
File docker-compose.yml
#
Ini adalah jantung dari Docker Compose. Di sinilah seluruh definisi aplikasi berada.
Di dalamnya biasanya berisi:
- Daftar service (container)
- Image atau build context
- Port mapping
- Environment variable
- Volume
- Network
- Dependency antar service
Service #
Service merepresentasikan satu container atau sekumpulan container identik.
Contoh service:
app→ backend APIdb→ PostgreSQL / MySQLcache→ Redis
Setiap service:
- Berjalan di container terpisah
- Bisa saling berkomunikasi melalui network internal Docker
Network #
Secara default, Docker Compose akan membuat network bridge khusus untuk project tersebut.
Keuntungannya:
- Service bisa saling mengakses menggunakan nama service sebagai hostname
- Isolasi antar project terjaga
Contoh:
- Backend bisa mengakses database melalui
db:5432
Volume #
Volume digunakan untuk persistensi data.
Tanpa volume:
- Data database akan hilang saat container dihapus
Dengan volume:
- Data tetap aman walaupun container restart atau rebuild
Contoh Sederhana Docker Compose #
Bayangkan aplikasi sederhana:
- Backend (Node.js / Go / Python)
- Database PostgreSQL
version: "3.9"
services:
app:
build: .
ports:
- "8080:8080"
environment:
- DB_HOST=db
- DB_PORT=5432
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_USER: appuser
POSTGRES_PASSWORD: secret
POSTGRES_DB: appdb
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Dengan konfigurasi ini:
- Dua container dijalankan sekaligus
- Backend otomatis bisa mengakses database
- Data database persisten
Menjalankannya cukup dengan:
docker compose up
Perintah Dasar Docker Compose #
Beberapa perintah yang paling sering digunakan:
Menjalankan aplikasi:
docker compose upMenjalankan di background:
docker compose up -dMenghentikan dan menghapus container:
docker compose downMelihat status service:
docker compose psMelihat log:
docker compose logs -fRebuild image:
docker compose build
Docker Compose vs docker run
#
| Aspek | docker run | Docker Compose |
|---|---|---|
| Jumlah container | Satu per satu | Multi-container |
| Reproducible | Sulit | Sangat mudah |
| Dokumentasi setup | Minim | Jelas & deklaratif |
| Cocok untuk | Eksperimen | Development & testing |
Docker Compose bukan pengganti Dockerfile, tetapi pelengkap.
Kapan Docker Compose Digunakan #
Docker Compose sangat ideal untuk:
- Local development
- Integration testing
- Proof of concept
- Demo aplikasi
- Staging environment sederhana
Namun, Docker Compose bukan orchestrator skala besar.
Untuk production skala besar biasanya digunakan:
- Kubernetes
- Docker Swarm
- Cloud managed service (ECS, GKE, AKS)
Meski begitu, banyak tim tetap memakai Docker Compose di production untuk aplikasi kecil atau internal.
Best Practice #
Beberapa praktik terbaik:
Pisahkan concern
- Satu service = satu tanggung jawab
Gunakan
.envfile- Hindari hardcode credential
Gunakan version terbaru
- Umumnya
3.9
- Umumnya
Gunakan
depends_ondengan bijak- Ingat: ini tidak menunggu service benar-benar siap
Gunakan volume named
- Lebih aman dan mudah dikelola
Bedakan compose untuk environment berbeda
docker-compose.dev.ymldocker-compose.prod.yml
Penutup #
Docker Compose adalah alat yang sangat powerful untuk menyederhanakan pengelolaan aplikasi multi-container.
Dengan pendekatan deklaratif:
- Setup menjadi konsisten
- Developer onboarding lebih cepat
- Error akibat konfigurasi manual berkurang drastis
Jika Dockerfile adalah fondasi sebuah container, maka Docker Compose adalah arsitek yang menyusun seluruh sistem agar berjalan bersama dengan rapi dan terstruktur.