---
title: "Docker Compose adalah: Pengertian, Contoh, dan Perintah Dasar"
url: "https://helipod.io/blog/docker-compose-adalah"
date: "2026-10-02"
updated: "2026-10-02"
author: "Tim Helipod"
tags: ["docker compose adalah", "docker compose", "docker", "compose.yaml", "container"]
excerpt: "Docker Compose adalah tool untuk menjalankan beberapa container sekaligus dari satu file. Pelajari contoh compose.yaml, perintah dasar, dan cara ke production."
---

# Docker Compose adalah: Pengertian, Contoh, dan Perintah Dasar

**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](/blog/kubernetes-adalah)

---

## 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:

```yaml
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:

```bash
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](/vps-murah) dan panduan [cara akses VPS Linux](/blog/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](/blog/dockerfile-custom-helipod).
2. **PostgreSQL**: pakai managed Postgres di [/database](/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](/pricing).
