Lewati ke konten

6. Docker Compose

Aplikasi sungguhan jarang terdiri dari satu container. Biasanya ada web server, aplikasi backend, database, dan lainnya. Mengetik docker run panjang untuk masing-masing itu melelahkan dan rawan salah. Docker Compose menuliskan semuanya dalam satu file, lalu menjalankannya dengan satu perintah.

services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- app
app:
image: gstnv/hello-app
environment:
APP_MESSAGE: Halo dari compose
ports:
- "3000:3000"

Setiap kunci di bawah services menjadi satu container. Opsinya sama dengan docker run: ports = -p, volumes = -v, environment = -e. depends_on mengatur urutan: app dinyalakan sebelum web.

Terminal window
docker compose up -d # buat & nyalakan semua service
docker compose ps # status service di project ini
docker compose logs app # log satu service
docker compose restart web
docker compose down # matikan & hapus container + network
docker compose up -d --build # build ulang image lalu nyalakan

Nama project diambil dari nama folder, jadi container di folder toko diberi nama toko-web-1 dan toko-app-1.

Semua layanan GSTNV-LAB punya compose.yaml sendiri di repository. Untuk men-deploy versi baru, cukup:

Terminal window
git pull
docker compose up -d --build
Lab: Satu perintah untuk semua: Compose
Misi 0/7
  1. Masuk ke folder toko dan baca isi compose.yaml.
    Petunjukcd toko lalu cat compose.yaml
  2. Nyalakan semua service sekaligus di background.
    Petunjukdocker compose up -d
  3. Lihat status service dalam project ini.
    Petunjukdocker compose ps
  4. Buka service web di port 8080.
    Petunjukcurl localhost:8080
  5. Buka service app di port 3000.
    Petunjukcurl localhost:3000
  6. Lihat log service app saja.
    Petunjukdocker compose logs app
  7. Matikan dan hapus semuanya dengan satu perintah.
    Petunjukdocker compose down

Kamu sudah bisa menjalankan aplikasi apa pun di container. Langkah berikutnya: membuat container itu bisa diakses dari internet dengan aman — lanjut ke Jaringan & WireGuard dan Nginx & Reverse Proxy.