Docker Compose: Panduan Lengkap + Daftar Command Wajib
Menjalankan banyak container dengan docker run satu per satu itu gampang berantakan, belum lagi kalau harus atur network sendiri, atau satu container mati dan bikin seluruh aplikasi ikut error. Solusinya? Docker Compose. Apa itu?
Dengan Compose, kamu bisa mengatur aplikasi, database, network, dan storage sekaligus, tanpa menulis command manual satu per satu. Yuk, simak selengkapnya cara kerja, struktur file, sampai daftar command Docker Compose yang wajib kamu tahu di bawah ini.
Apa Itu Docker Compose?
Docker Compose adalah tool untuk mendefinisikan dan menjalankan aplikasi yang terdiri dari beberapa container menggunakan satu file YAML, yang secara modern umumnya disebut compose.yaml.
Kalau menggunakan docker run, kamu perlu menentukan konfigurasi setiap container secara manual. Ketika aplikasi sudah memiliki API, database, Redis, dan service lain, pendekatan ini mudah membuat konfigurasi berantakan.
Compose menggunakan pendekatan deklaratif. Kamu cukup mendeskripsikan kondisi aplikasi yang diinginkan dalam file YAML, lalu Docker Compose menangani proses pembuatan network, volume, image, hingga container.
Baca Juga: Kenapa VPS Lebih Cocok untuk Running Docker? Ini Jawabannya!
Ada tiga komponen utama yang perlu kamu pahami:
- Services: container yang membentuk aplikasi, misalnya Node.js, PostgreSQL, atau Redis.
- Networks: jalur komunikasi antarservice. Container dalam network Compose dapat saling menemukan berdasarkan nama service.
- Volumes: tempat menyimpan data persisten agar data tidak ikut hilang ketika container dibuat ulang.
Saat menjalankan docker compose up, Compose membaca konfigurasi tersebut, mengambil atau membangun image, membuat network dan volume, kemudian menjalankan service. Sebaliknya, docker compose down digunakan untuk menghentikan dan membongkar resource yang dibuat Compose.
Satu hal penting untuk tutorial Docker terbaru: command yang digunakan sekarang adalah docker compose dengan spasi, bukan docker-compose dengan tanda hubung. Sintaks dengan tanda hubung merupakan command legacy dari Docker Compose versi lama.
Baca Juga: Trik Ampuh Unblock Reddit dengan Blockaway: Aman dan Gratis!
Docker Compose vs Docker Run: Bedanya Apa?

Lalu, untuk apa Docker Compose kalau sudah ada docker run?
Perbedaan utamanya ada pada cara mengelola container. docker run bersifat imperatif: kamu memberikan instruksi satu per satu. Docker Compose bersifat deklaratif: kamu mendefinisikan kondisi aplikasi dalam YAML.
| Aspek | Docker Run | Docker Compose |
| Paradigma | Imperatif | Deklaratif |
| Scope | Satu container per command | Multi-container application |
| Networking | Perlu diatur manual | Otomatis melalui network Compose |
| Reproducibility | Script atau konfigurasi manual | YAML yang dapat disimpan di version control |
| Teardown | Container dihapus satu per satu | docker compose down |
Untuk menjalankan container sederhana atau mencoba sebuah image secara cepat, docker run masih sangat berguna.
Namun, ketika aplikasi mulai bergantung pada beberapa service, Compose membuat pengelolaannya jauh lebih praktis. Developer lain cukup mendapatkan repository dan menjalankan docker compose up tanpa harus menebak-nebak command apa saja yang perlu dijalankan.
Bagaimana Cara Kerja Docker Compose?
Alur kerja Docker Compose sebenarnya cukup sederhana:
- Tulis file Compose
Definisikan service, image atau build context, environment variable, network, volume, dan dependency. - Jalankan
docker compose up
Compose membaca file YAML, mengambil atau membangun image, membuat network, menyiapkan volume, lalu menjalankan container. - Kembangkan aplikasi
Saat konfigurasi berubah, Compose dapat menggunakan cache dan hanya membuat ulang bagian yang memang membutuhkan perubahan. - Hentikan dengan
docker compose down
Container dan network yang dibuat Compose akan dihentikan dan dibersihkan.
Compose juga bisa mengatur urutan startup menggunakan depends_on. Namun, ada jebakan yang cukup sering ditemui: depends_on dalam bentuk sederhana hanya memastikan container dependency sudah dimulai, bukan berarti service tersebut sudah siap menerima koneksi.
Misalnya, aplikasi Node.js langsung mencoba terhubung ke PostgreSQL ketika PostgreSQL baru saja menyala. Kondisi ini bisa menyebabkan aplikasi gagal startup.
Solusinya adalah menggunakan healthcheck dan condition: service_healthy. Dengan begitu, service aplikasi dapat menunggu database benar-benar dinyatakan sehat sebelum dijalankan.
Contoh Struktur compose.yaml
Berikut contoh sederhana aplikasi Node.js dengan PostgreSQL:
services:
api:
build: ./api
ports:
- "3000:3000"
environment:
DATABASE_URL: postgres://app:secret@db:5432/mydb
depends_on:
db:
condition: service_healthy
db:
image: postgres:16.3
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
POSTGRES_DB: mydb
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app -d mydb"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
volumes:
db-data:
Pada contoh tersebut, api merupakan service aplikasi yang dibangun dari folder lokal ./api. Sementara itu, db menggunakan image PostgreSQL.
Perhatikan juga DATABASE_URL. Host database menggunakan nama db, bukan IP address. Compose menyediakan DNS internal sehingga service dapat berkomunikasi berdasarkan nama servicenya.
Bagian volumes digunakan agar data PostgreSQL tetap tersimpan meskipun container dihentikan atau dibuat ulang.
Struktur dan Contoh File docker-compose.yml
Dalam banyak tutorial lama, kamu mungkin lebih sering menemukan nama docker-compose.yml. File tersebut masih umum dijumpai, meskipun Compose modern juga menggunakan compose.yaml.
Struktur dasarnya terdiri dari beberapa key penting:
services: mendefinisikan container aplikasi.environment: mengatur environment variable.volumes: menyimpan data persisten.networks: mengatur komunikasi dan isolasi antarservice.depends_on: menentukan dependency antarservice.healthcheck: menentukan apakah service sudah siap digunakan.
Compose secara default dapat membuat network untuk service yang didefinisikan di dalam project. Kamu juga dapat membuat network khusus jika membutuhkan kontrol komunikasi yang lebih spesifik.
Untuk volume, konsepnya penting terutama ketika kamu menjalankan database. Tanpa storage persisten, data yang tersimpan di filesystem container bisa ikut hilang ketika container tersebut dihapus.
Catatan untuk file baru: jangan lagi menambahkan key version: hanya karena mengikuti tutorial lama. Brief ini menggunakan Compose Specification modern yang tidak membutuhkan version field tersebut.
Manfaat Menggunakan Docker Compose
Development Environment Lebih Portable
Salah satu manfaat terbesar Compose adalah membuat environment development lebih mudah direplikasi.
Daripada setiap developer memasang database, Redis, dan dependency lain secara manual, konfigurasi dapat disimpan dalam repository. Setelah Docker tersedia, stack aplikasi bisa dijalankan melalui satu command.
Ini juga membantu mengurangi masalah klasik seperti “works on my machine”.
Testing Lebih Terisolasi
Compose dapat digunakan untuk membuat environment testing sementara.
Misalnya:
docker compose up -d
./run_tests
docker compose down
Test integration atau E2E bisa berjalan menggunakan service sungguhan seperti PostgreSQL dan Redis, bukan sekadar mock. Setelah testing selesai, environment dapat dibongkar kembali.
Multi-Service Lebih Mudah Dikelola
Mengatur networking, health check, restart policy, dependency, dan storage secara manual akan semakin merepotkan ketika jumlah container bertambah.
Compose menggabungkan konfigurasi tersebut dalam satu tempat. Karena itu, Compose sering menjadi langkah praktis sebelum kamu masuk ke kebutuhan container orchestration yang jauh lebih kompleks.
Daftar Command Docker Compose yang Wajib Diketahui

Berikut beberapa command Docker Compose yang paling berguna untuk development maupun deployment.
Start dan Stop Service
| Command | Fungsi |
docker compose up -d | Menjalankan seluruh service di background |
docker compose up -d --build | Build image lalu menjalankan service |
docker compose up -d --wait | Menunggu service mencapai status healthy |
docker compose down | Menghentikan dan menghapus container serta network |
docker compose down -v | Sama seperti down, sekaligus menghapus named volume |
Hati-hati menggunakan docker compose down -v, terutama jika stack menyimpan database. Named volume akan ikut dihapus sehingga data di dalamnya bisa hilang.
Monitoring dan Debugging
| Command | Fungsi |
docker compose ps | Melihat container yang sedang berjalan |
docker compose ps -a | Melihat semua container, termasuk yang berhenti |
docker compose logs -f | Memantau log semua service secara real-time |
docker compose logs -f <service> | Memantau log service tertentu |
docker compose logs --tail=100 | Menampilkan 100 baris log terakhir |
Ketika aplikasi tiba-tiba tidak bisa diakses, docker compose ps dan docker compose logs biasanya menjadi dua command pertama yang layak dicek.
Interaksi dengan Container
| Command | Fungsi |
docker compose exec <service> sh | Membuka shell di container yang berjalan |
docker compose exec -T <service> <command> | Menjalankan command non-interaktif |
docker compose run --rm <service> <command> | Menjalankan container sementara dan menghapusnya setelah selesai |
Command exec sangat berguna ketika kamu perlu mengecek filesystem, environment, atau menjalankan command tertentu langsung di dalam container.
Build dan Development
| Command | Fungsi |
docker compose build | Build ulang image service |
docker compose build --no-cache | Build tanpa menggunakan cache |
docker compose watch | Memantau perubahan dan melakukan sinkronisasi untuk development |
Validasi Konfigurasi
Sebelum deployment, kamu juga bisa menjalankan:
docker compose config
Command ini membantu melihat hasil akhir konfigurasi YAML setelah variable dan konfigurasi terkait digabungkan. Dengan begitu, error konfigurasi bisa diketahui sebelum stack benar-benar dijalankan.
Untuk kebutuhan lanjutan, Compose juga menyediakan scaling sederhana:
docker compose up --scale <service>=3
Command tersebut menjalankan beberapa instance dari service yang sama.
Kesimpulan
Docker Compose memudahkan pengelolaan aplikasi yang terdiri dari banyak container tanpa harus menjalankan dan mengonfigurasi semuanya secara manual. Dengan satu file YAML, kamu bisa mendefinisikan service, network, volume, dependency, hingga health check dalam konfigurasi yang lebih mudah direproduksi.
Kalau kebutuhanmu sebatas development, testing, atau deployment aplikasi multi-container, Compose sudah menjadi tool yang praktis untuk memulai. Ketika stack tersebut akan dijalankan di server, kamu juga membutuhkan infrastruktur yang mampu menjalankan Docker secara stabil.
Untuk kebutuhan tersebut, VPS Murah dari IDwebhost bisa menjadi salah satu opsi yang relevan untuk menempatkan aplikasi Docker di server. Kamu dapat menyesuaikan resource VPS dengan kebutuhan container, database, dan service lain yang digunakan aplikasi.
Dengan begitu, konfigurasi yang sudah kamu buat menggunakan Docker Compose bisa dibawa dari local environment menuju server dengan perubahan seminimal mungkin.