Gaspol Bareng Docker Compose: Ngatur Aplikasi Multi-Kontainer Auto Gampang!

Docker Compose Tutorial: Kelola Aplikasi Multi-Kontainer Auto Gampang

PPLG

PPLG

Penulis

25 Aug 2026
78 x dilihat

Gaes, ngaku deh, siapa di sini yang udah nyaman banget sama Docker buat nge-container-in aplikasi single-nya? Mantap! Tapi pernah ngerasa ribet gak sih pas project-nya makin gede, butuh database, backend, frontend, bahkan microservice lain yang semuanya harus jalan barengan? Nah, di sinilah vibes ribet itu muncul. Mesti docker run satu-satu? Aduh, pegel cuy!

Tenang, gak perlu panik! Ada jagoan kita yang siap bikin hidup kalian auto tenang: Docker Compose! Yup, tools kece ini bakal jadi bestie kalian buat ngatur 'orkestra' aplikasi multi-kontainer biar jalan mulus kayak jalan tol. Skuy, kita spill tuntas gimana caranya!

Apa Itu Docker Compose dan Kenapa Kita Butuh Banget?

Intinya gini gaes, Docker Compose itu semacam 'komandan' yang ngasih instruksi ke Docker buat ngidupin beberapa kontainer sekaligus, ngatur gimana mereka saling ngobrol, dan nge-link satu sama lain. Semua config-nya kalian tulis dalam satu file YAML aja, namanya docker-compose.yml. Jadi, cukup satu command, semua aplikasi kalian langsung ngacir!

Kenapa penting banget? Bayangin deh, punya aplikasi web yang butuh database (misal: PostgreSQL) sama backend (misal: Python Flask). Kalo manual, kalian harus:

  1. docker run buat kontainer database.
  2. docker run lagi buat kontainer backend.
  3. Pastikan keduanya bisa saling komunikasi lewat network.
  4. Ngurusin port mapping, environment variable, dll. Pusing, kan? Nah, Compose ini nyatuin semua instruksi itu jadi satu script. Auto praktis, ngab! Ini solusi mantap buat development environment yang kompleks atau aplikasi produksi skala kecil-menengah.

docker-compose.yml: 'Kitab Suci' Orkestrasi Kita

Ini dia nih file paling penting di Docker Compose. Semua konfigurasi services (kontainer), network, volume, port, sampe environment variable, tumpah ruah di sini. Kalo diibaratkan, ini blueprint-nya gaes. Makanya, nulis file ini harus teliti ya.

Struktur dasar docker-compose.yml biasanya kayak gini:

version: '3.8' # Versi syntax Docker Compose

services: # Di sini tempat kita definisiin kontainer/service kita
  web: # Nama service pertama (misal: aplikasi backend)
    build: . # Atau image: nama_image
    ports:
      - "8000:8000"
    environment:
      VAR_INI: "nilai_ini"
    depends_on:
      - db # Service ini butuh 'db' buat jalan
    networks:
      - app-network

  db: # Nama service kedua (misal: database)
    image: postgres:13-alpine
    environment:
      POSTGRES_DB: nama_db
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - app-network

volumes: # Definisi volume buat persistent data
  db-data:

networks: # Definisi custom network biar kontainer bisa ngobrol
  app-network:
    driver: bridge

Langkah Demi Langkah Praktis: Aplikasi Flask + PostgreSQL

Skuy, langsung kita praktik biar makin ngena! Kita bakal bikin contoh aplikasi sederhana pake Flask (Python) yang konek ke database PostgreSQL.

Folder Project Kita: Buat folder baru, misal flask-compose-app, terus di dalamnya ada struktur gini:

flask-compose-app/
├── app.py
├── requirements.txt
├── Dockerfile
└── docker-compose.yml

Step 1: Persiapan Aplikasi Flask

Bikin file app.py yang isinya aplikasi Flask kita. Ini cuma aplikasi super simpel buat ngecek koneksi ke PostgreSQL.

app.py:

import os
from flask import Flask
import psycopg2

app = Flask(__name__)

# Konfigurasi koneksi database dari environment variable
DB_HOST = os.getenv('DB_HOST', 'db') # Nama service database di docker-compose.yml
DB_NAME = os.getenv('DB_NAME', 'mydatabase')
DB_USER = os.getenv('DB_USER', 'myuser')
DB_PASSWORD = os.getenv('DB_PASSWORD', 'mypassword')

@app.route('/')
def hello():
    try:
        # Coba konek ke PostgreSQL
        conn = psycopg2.connect(host=DB_HOST, database=DB_NAME, user=DB_USER, password=DB_PASSWORD)
        cur = conn.cursor()
        cur.execute('SELECT version();') # Query buat dapetin versi DB
        db_version = cur.fetchone()[0]
        cur.close()
        conn.close()
        return f"<h1>Hello from Flask!</h1><p>Connected to PostgreSQL successfully! Database version: {db_version}</p>"
    except Exception as e:
        return f"<h1>Hello from Flask!</h1><p>Failed to connect to PostgreSQL: {e}</p>", 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000) # Aplikasi jalan di port 5000

Selanjutnya, kita perlu requirements.txt buat dependensi Python-nya.

requirements.txt:

Flask
psycopg2-binary

Step 2: Bikin Dockerfile untuk Aplikasi Flask

Dockerfile ini buat nge-build image Docker dari aplikasi Flask kita.

Dockerfile:

# Pake base image Python yang ringan
FROM python:3.9-slim-buster

# Bikin direktori kerja di dalam kontainer
WORKDIR /app

# Copy requirements.txt dan install dependensi
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Copy semua file aplikasi ke direktori kerja
COPY . .

# Set environment variable buat Flask
ENV FLASK_APP=app.py
# Command buat ngejalanin aplikasi Flask
CMD ["flask", "run", "--host=0.0.0.0", "--port=5000"]

Step 3: Nge-config docker-compose.yml

Nah, ini dia intinya! Kita akan definisiin dua service: web (aplikasi Flask) dan db (PostgreSQL).

docker-compose.yml:

version: '3.8' # Pake versi Compose yang paling baru

services:
  web:
    build: . # Suruh Docker Compose nge-build image dari Dockerfile di direktori saat ini
    ports:
      - "5000:5000" # Map port 5000 host ke port 5000 kontainer Flask
    environment: # Environment variable buat aplikasi Flask
      DB_HOST: db # Host database adalah nama service 'db'
      DB_NAME: mydatabase
      DB_USER: myuser
      DB_PASSWORD: mypassword
    depends_on:
      - db # Service 'web' akan jalan SETELAH service 'db' siap
    networks:
      - app-network # Ikut jaringan 'app-network'

  db:
    image: postgres:13-alpine # Pake image PostgreSQL versi 13 yang ringan
    environment: # Environment variable buat konfigurasi PostgreSQL
      POSTGRES_DB: mydatabase
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
    volumes:
      - db-data:/var/lib/postgresql/data # Mount volume buat data PostgreSQL biar persistent
    networks:
      - app-network # Ikut jaringan 'app-network'

volumes: # Definisi named volume
  db-data: # Volume ini buat nyimpan data PostgreSQL

networks: # Definisi custom bridge network
  app-network:
    driver: bridge # Jenis jaringan bridge

Step 4: Skuy, Jalankan Aplikasinya!

Udah siap semua file-nya? Gaspol! Buka terminal di folder flask-compose-app, terus jalanin command ini:

docker compose up -d

Penjelasan:

  • docker compose up: Ini perintah buat bikin dan jalanin semua service yang ada di docker-compose.yml.
  • -d (detach): Biar kontainer jalan di background dan terminal kalian gak ketahan.

Kalo semuanya lancar, kalian bakal liat proses build image dan launching kontainer web sama db.

Buat ngecek status kontainer yang jalan:

docker compose ps

Output-nya bakal nunjukkin kalo service web dan db kalian lagi Up.

Buat liat log dari service tertentu (misal 'web'):

docker compose logs web

Ini berguna banget buat debugging!

Step 5: Test Aplikasi Kita!

Buka browser kalian terus akses http://localhost:5000. Kalo berhasil, kalian bakal liat tulisan kayak gini:

Hello from Flask!
Connected to PostgreSQL successfully! Database version: PostgreSQL 13.x...

Mantap! Berarti aplikasi Flask kalian udah sukses konek ke database PostgreSQL di kontainer yang berbeda, semua berkat Docker Compose!

Pas udah selesai, buat matiin dan ngehapus kontainer (beserta network dan volume anonymous):

docker compose down

Kalo kalian pengen ngehapus juga named volume (db-data kita), tambahin flag -v:

docker compose down -v

Peringatan: Hati-hati pake -v di production karena bakal ngehapus semua data di volume!

Tips Praktis & Best Practices dari Ngab Senior

  1. Volume buat Persistent Data: Penting banget pake volumes (kayak db-data di contoh kita) buat nyimpan data yang gak boleh hilang tiap kontainer di-stop atau dihapus. Tanpa volume, data di database kalian bakal hilang tiap kali kontainer DB di-down.
  2. Network itu Kunci Komunikasi: Docker Compose auto bikin default network buat semua service di file yang sama. Tapi, kayak di contoh kita, bikin networks secara eksplisit itu best practice. Ini bikin komunikasi antar service lebih rapi dan aman.
  3. Lingkungan Fleksibel pake Environment Variables: Selalu pake environment di docker-compose.yml buat konfigurasi aplikasi (kayak kredensial DB) daripada hardcode di dalam kode. Ini bikin aplikasi kalian fleksibel dan gampang diubah config-nya tanpa harus nge-build ulang image.
  4. depends_on untuk Urutan Startup: Gunakan depends_on buat ngasih tahu Docker Compose urutan start-up service. Contohnya, web kita depends_on db, jadi db pasti nyala duluan. Tapi inget, ini cuma ngatur urutan start-up, bukan memastikan service-nya benar-benar siap diakses. Untuk itu, kalian bisa implementasi health checks di aplikasi.
  5. restart Policies: Di docker-compose.yml, kalian bisa tambahin restart: always atau restart: on-failure di service biar kontainer auto nyala lagi kalo mati mendadak atau ada error.
  6. Compose untuk Dev vs. Prod: Docker Compose ini jagoan buat development environment karena gampang banget ngatur multi-service. Untuk production skala besar, biasanya orang pake Docker Swarm atau Kubernetes karena punya fitur orkestrasi yang lebih advance (auto-scaling, load balancing, high availability). Tapi buat project kecil, Compose juga oke di production!
  7. Debugging Kontainer: Kalo mau masuk ke dalam kontainer buat debugging (misal ngecek file atau jalanin command), pake docker compose exec [nama_service] bash (atau sh). Contoh: docker compose exec web bash.

Kesimpulan

Gimana, gaes? Auto kebuka kan pencerahannya tentang Docker Compose? Dari yang tadinya mungkin pusing ngurusin banyak kontainer, sekarang jadi gampang banget cuma pake satu file YAML doang. Vibes coding jadi lebih asik, kan?

Docker Compose ini bener-bener game-changer buat kalian yang sering ngembangin aplikasi multi-kontainer. Dengan tools ini, kalian bisa fokus ke ngoding aplikasi tanpa harus pusing mikirin infrastruktur yang ruwet. Nah, sekarang giliran kalian buat gaspol nge-explore lebih jauh lagi. Coba bikin aplikasi yang lebih kompleks, mainin network config-nya, atau eksplor fitur lain yang ada di Docker Compose. Ini cuma permulaan, perjalanan kalian masih panjang! Keep ngoding, ngab!

0.0

Berikan Rating

Komentar (0)

Silakan login untuk memberikan komentar.

Login Sekarang

Belum ada komentar. Jadilah yang pertama!

Menyukai Artikel (1)