Jika Anda sudah memahami konsep dasar Docker, langkah selanjutnya adalah menguasai Docker Compose. Compose memungkinkan Anda menjalankan multi-container applications dengan satu file konfigurasi.
Instalasi Docker Compose
Docker Compose sudah termasuk dalam Docker Desktop. Untuk Linux server, install Docker Engine terlebih dahulu:
# Install Docker
curl -fsSL https://get.docker.com | sh
# Tambahkan user ke docker group
sudo usermod -aG docker $USER
# Logout dan login lagi, lalu verifikasi
docker compose version
Struktur File docker-compose.yml
Setiap proyek Docker Compose punya satu file YAML yang mendefinisikan semua service:
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
restart: unless-stopped
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: myapp
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
restart: unless-stopped
volumes:
pgdata:
Networking di Docker Compose
Secara default, semua service dalam satu compose file berada di network yang sama. Container bisa saling akses menggunakan nama service sebagai hostname:
# Dalam aplikasi Python/Node.js
# Host: db (nama service)
# Port: 5432 (port default PostgreSQL)
DATABASE_URL=postgresql://admin:secret@db:5432/myapp
Managing Volume
Volume memastikan data persist meski container dihapus:
# Lihat semua volume
docker volume ls
# Backup volume
docker run --rm -v pgdata:/data -v $(pwd):/backup alpine tar czf /backup/pgdata-backup.tar.gz /data
# Restore volume
docker run --rm -v pgdata:/data -v $(pwd):/backup alpine tar xzf /backup/pgdata-backup.tar.gz -C /
Production Tips
- Gunakan
restart: unless-stoppedagar container otomatis restart - Gunakan
.envfile untuk environment variables sensitif - Setup Caddy sebagai reverse proxy di depan container
- Monitor resource usage dengan
docker stats
Contoh Full Stack App
Berikut contoh compose untuk aplikasi full-stack dengan Caddy, Node.js, dan PostgreSQL. Lihat juga panduan self-hosting lengkap untuk konteks yang lebih luas.