BIAYABLOG

Docker Compose adalah: Pengertian, Contoh, dan Perintah Dasar

Tim Helipod
Diterbitkan 6 menit baca

Docker Compose adalah tool untuk mendefinisikan dan menjalankan aplikasi yang terdiri dari beberapa container sekaligus, cukup dari satu file YAML. Misalnya aplikasi web yang butuh database PostgreSQL dan cache Redis: daripada menjalankan tiga perintah docker run panjang, kamu menulis semuanya di compose.yaml lalu menjalankan satu perintah.

Compose sangat populer untuk development lokal karena semua anggota tim bisa menyalakan lingkungan yang sama persis dengan satu perintah. Compose juga sering dipakai untuk menjalankan aplikasi kecil di satu VPS.

Artikel ini membahas pengertian Docker Compose, bedanya dengan Dockerfile, contoh compose.yaml yang realistis, perintah dasar, volume dan network, serta cara membawa aplikasi ke production.

Baca juga: Kubernetes adalah: Pengertian dan Komponennya


Docker Compose adalah Apa dan Bedanya dengan Dockerfile#

Dua istilah ini sering tertukar, padahal fungsinya berbeda:

Aspek Dockerfile Docker Compose
Fungsi Resep untuk membangun satu image Mengatur beberapa container yang berjalan bersama
Nama file Dockerfile compose.yaml (atau docker-compose.yml)
Isi Base image, install dependency, copy kode, perintah start Daftar service, port, volume, network, environment
Perintah docker build docker compose up

Jadi keduanya saling melengkapi. Dockerfile membangun image aplikasimu, lalu Compose menjalankan image itu bersama container lain seperti database dan Redis.

Catatan versi: dulu Compose adalah program terpisah bernama docker-compose (dengan tanda hubung). Sekarang Compose v2 menjadi plugin Docker dan dipanggil dengan docker compose (dengan spasi). Nama file yang direkomendasikan juga compose.yaml, walaupun docker-compose.yml tetap dikenali.


Contoh compose.yaml: App, PostgreSQL, dan Redis#

Misalkan kamu punya aplikasi Node.js dengan Dockerfile di folder yang sama. Berikut compose.yaml yang menjalankan aplikasi, PostgreSQL, dan Redis:

services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgres://app:rahasia@db:5432/appdb
      REDIS_URL: redis://cache:6379
    depends_on:
      db:
        condition: service_healthy
      cache:
        condition: service_started
    restart: unless-stopped

  db:
    image: postgres:16
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: rahasia
      POSTGRES_DB: appdb
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app -d appdb"]
      interval: 5s
      retries: 10

  cache:
    image: redis:7-alpine

volumes:
  pgdata:

Penjelasan:

  • services berisi tiga container: app, db, dan cache.
  • build: . artinya image app dibangun dari Dockerfile di folder saat ini. Service db dan cache memakai image jadi dari Docker Hub.
  • ports memetakan port 3000 di container ke port 3000 di komputermu. Database dan Redis tidak diberi ports, jadi tidak terbuka ke luar.
  • environment mengisi environment variables. Perhatikan host di DATABASE_URL adalah db, yaitu nama service.
  • depends_on dengan service_healthy membuat app menunggu sampai PostgreSQL benar-benar siap menerima koneksi.
  • volumes menyimpan data PostgreSQL di named volume pgdata, sehingga data tidak hilang saat container dihapus.

Perintah Dasar Docker Compose#

Perintah Fungsi
docker compose up -d Membangun (kalau perlu) dan menjalankan semua service di background
docker compose ps Melihat status container
docker compose logs -f app Mengikuti log service app
docker compose build Membangun ulang image
docker compose up -d --build Build ulang lalu jalankan versi terbaru
docker compose exec app sh Masuk ke shell di container app
docker compose down Menghentikan dan menghapus container serta network
docker compose down -v Sama seperti di atas, plus menghapus volume (data ikut hilang)

Hati-hati dengan down -v: perintah ini menghapus volume database.


Volume, Network, dan Environment#

Volume#

Container bersifat sementara. Data yang perlu bertahan (database, file upload) harus disimpan di volume. Ada dua jenis yang umum: named volume seperti pgdata yang dikelola Docker, dan bind mount seperti ./src:/app/src yang memetakan folder di komputermu, berguna untuk hot reload saat development.

Network#

Compose otomatis membuat satu network untuk semua service di file yang sama. Setiap service bisa dipanggil memakai namanya sebagai hostname, jadi app cukup terhubung ke db:5432 tanpa tahu IP-nya.

Environment dan File .env#

Daripada menulis password langsung di compose.yaml, simpan di file .env di folder yang sama:

POSTGRES_PASSWORD=ganti-dengan-password-kuat

Lalu panggil di compose dengan ${POSTGRES_PASSWORD}. Jangan commit file .env ke Git.


Kapan Docker Compose Sudah Cukup#

Compose cocok untuk:

  • Development lokal: seluruh tim punya stack yang sama dengan satu perintah.
  • Aplikasi kecil di satu VPS: misalnya aplikasi internal, landing page dengan backend, atau side project.
  • Testing di CI: menyalakan database sementara untuk integration test.

Keterbatasannya mulai terasa ketika aplikasi butuh berjalan di lebih dari satu server, autoscaling, atau rilis tanpa downtime. Compose memang tidak dirancang untuk mengatur container di banyak mesin. Untuk itu orang biasanya beralih ke orchestrator seperti Kubernetes.


Membawa Aplikasi Compose ke Production#

Opsi 1: VPS dengan Docker Compose#

Cara paling langsung: sewa VPS, install Docker, salin proyek, lalu jalankan docker compose up -d. Kamu mendapat kontrol penuh, tapi juga tanggung jawab penuh: update sistem, backup database, firewall, reverse proxy, dan SSL. VPS Linux Helipod di Jakarta dan Singapura mulai Rp 64.900 per bulan (VPS S, 2 vCPU, 2 GB RAM), dan VPS S - EU di Jerman Rp 27.900 per bulan. Harga bisa berubah, cek halaman harga untuk angka terbaru. Lihat pilihannya di VPS murah dan panduan cara akses VPS Linux.

Opsi 2: Service Terpisah di Helipod#

Helipod tidak mengimpor file compose.yaml. Yang dilakukan adalah memecah stack menjadi service terpisah di dalam satu project:

  1. App: deploy dari repository GitHub/GitLab memakai Dockerfile yang sama dengan yang dipakai Compose, atau biarkan Helipack membuatnya otomatis. Lihat Dockerfile custom di Helipod.
  2. PostgreSQL: pakai managed Postgres di /database, yang punya paket gratis 1 GB storage dan 100 compute hours per bulan.
  3. Redis: deploy sebagai service lain dari image redis di project yang sama.
  4. Koneksi: service dalam satu project terhubung lewat internal network, mirip network Compose.
  5. Konfigurasi: isi DATABASE_URL, REDIS_URL, dan secret lain di environment variables.

Isi environment di compose.yaml kamu bisa langsung jadi daftar environment variables di Helipod.


FAQ#

Docker Compose adalah bagian dari Docker?#

Ya. Compose v2 sudah menjadi plugin resmi Docker dan terpasang bersama Docker Desktop. Di Linux, biasanya dipasang lewat paket docker-compose-plugin.

Apa beda docker-compose dan docker compose?#

docker-compose adalah versi lama (v1) yang terpisah. docker compose adalah versi v2 yang sekarang direkomendasikan.

Apakah Docker Compose bisa untuk production?#

Bisa, untuk aplikasi yang cukup berjalan di satu server. Untuk banyak server dan autoscaling, orchestrator seperti Kubernetes lebih cocok.

Apakah Helipod bisa membaca file compose.yaml?#

Tidak. Di Helipod, setiap container di compose dijadikan service terpisah dalam satu project, dideploy dari Dockerfile, repository, atau Docker image.

Kenapa app saya error "connection refused" ke database saat compose up?#

Biasanya karena app menyala sebelum database siap. Tambahkan healthcheck di service database dan depends_on dengan condition: service_healthy.


Dari Laptop ke Production#

Docker Compose adalah cara terbaik untuk menyatukan stack di laptop. Saat siap online, pilih VPS kalau ingin kontrol penuh, atau deploy servicenya di Helipod. Bandingkan biayanya di halaman harga.

Artikel terkait

Lihat semua

Siap coba Helipod?

Deploy aplikasi kamu sekarang. Gratis, tanpa kartu kredit.

Mulai Gratis →
WhatsApp