Belajar Docker Bagian 13
Eko Susilo Harjo October 6, 2024

Docker Compose adalah alat yang sangat membantu dalam pengembangan dan pengelolaan aplikasi berbasis container yang melibatkan banyak layanan. Pada artikel ini, kita akan membahas studi kasus lengkap tentang membangun aplikasi multi-service, melakukan deployment di production, serta langkah-langkah optimasi dan troubleshooting dalam menggunakan Docker Compose.
Membangun Aplikasi Multi-Service dengan Docker Compose
Dalam proyek ini, kita akan membangun aplikasi yang terdiri dari tiga layanan utama: Nginx sebagai web server, PostgreSQL sebagai database, dan Node.js sebagai backend service. Docker Compose memungkinkan kita untuk menjalankan semua layanan ini dalam satu file konfigurasi sederhana.
1. Menulis File docker-compose.yml
File docker-compose.yml
adalah pusat dari konfigurasi. Berikut adalah contoh konfigurasi untuk proyek multi-service ini:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx:/etc/nginx/conf.d
depends_on:
- app
app:
image: node:14
volumes:
- ./app:/usr/src/app
working_dir: /usr/src/app
command: npm start
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
Dalam contoh di atas:
- Nginx berfungsi sebagai server yang mendistribusikan trafik ke backend.
- Node.js menjalankan aplikasi yang akan mengakses database.
- PostgreSQL menyimpan data aplikasi.
Kita menggunakan depends_on
untuk memastikan bahwa layanan database dimulai terlebih dahulu sebelum aplikasi dan web server berjalan.
2. Membangun dan Menjalankan Aplikasi
Setelah menulis file docker-compose.yml
, kita dapat menjalankan perintah berikut untuk membangun dan menjalankan aplikasi:
docker-compose up -d
Dengan menggunakan flag -d
, semua layanan akan berjalan di background. Anda bisa memverifikasi apakah semuanya berjalan dengan benar menggunakan:
docker-compose ps
Ini akan menampilkan daftar container yang sedang berjalan beserta statusnya.
Deployment dengan Docker Compose di Production
Setelah aplikasi berjalan dengan baik di lingkungan pengembangan, tahap berikutnya adalah melakukan deployment di production. Di production, ada beberapa hal penting yang perlu diperhatikan.
1. Menggunakan Docker Compose untuk Production
Di production, Anda mungkin memerlukan pengaturan yang lebih spesifik, seperti menggunakan docker-compose.prod.yml
untuk konfigurasi environment production. Berikut adalah contoh file docker-compose.prod.yml
:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx:/etc/nginx/conf.d
restart: always
depends_on:
- app
app:
image: node:14
environment:
NODE_ENV: production
volumes:
- ./app:/usr/src/app
working_dir: /usr/src/app
command: npm start
restart: always
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
volumes:
- pgdata:/var/lib/postgresql/data
restart: always
volumes:
pgdata:
Beberapa poin penting di sini:
- restart: always memastikan container di-restart secara otomatis jika terjadi kegagalan.
- NODE_ENV: production untuk memastikan aplikasi berjalan dalam mode produksi.
2. Menggunakan Docker Secrets untuk Data Sensitif
Di production, jangan gunakan environment variables biasa untuk data sensitif seperti password. Gunakan Docker Secrets untuk menjaga keamanan data Anda.
echo "password" | docker secret create db_password -
Kemudian di docker-compose.prod.yml
:
db:
secrets:
- db_password
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
Optimasi Aplikasi dengan Docker Compose
Setelah deployment, penting untuk mengoptimalkan performa dan stabilitas aplikasi.
1. Scaling Layanan dengan Docker Compose
Untuk menangani lebih banyak trafik, Anda bisa men-scale layanan tertentu, seperti backend service (Node.js). Misalnya, untuk menambah instance app
, Anda dapat menjalankan perintah:
docker-compose up --scale app=3
Ini akan membuat 3 instance container untuk service app
, yang dapat membantu dalam meningkatkan kinerja aplikasi ketika beban kerja meningkat.
2. Memantau Resource Usage
Anda dapat memonitor penggunaan resource seperti CPU dan memori dengan Docker Compose. Untuk melakukannya, tambahkan batasan resource pada file docker-compose.yml
:
services:
app:
deploy:
resources:
limits:
cpus: "0.5"
memory: "512M"
Ini akan membatasi penggunaan CPU dan memori, menjaga agar container tidak menggunakan terlalu banyak resource dan menjaga kestabilan server.
3. Load Balancing dengan Nginx
Dengan scaling, Anda mungkin memerlukan load balancer untuk mendistribusikan trafik ke beberapa instance app
. Dalam kasus ini, Nginx bisa digunakan sebagai load balancer.
Berikut contoh konfigurasi Nginx untuk load balancing:
upstream app_servers {
server app:3000;
server app_1:3000;
server app_2:3000;
}
server {
listen 80;
location / {
proxy_pass http://app_servers;
}
}
Troubleshooting dalam Docker Compose
Selama proses deployment, ada kalanya masalah teknis terjadi. Beberapa langkah troubleshooting yang bisa dilakukan:
1. Cek Logs
Gunakan perintah berikut untuk melihat log dari setiap servic
docker-compose logs app
Ini membantu Anda melihat pesan error atau warning yang mungkin terjadi selama runtime.
2. Menggunakan Docker Exec untuk Debugging
Jika ada masalah pada salah satu container, Anda bisa masuk ke dalam container menggunakan perintah docker exec
:
docker exec -it app_container_name bash
Dari sini, Anda bisa menjalankan perintah yang dibutuhkan untuk mendiagnosis masalah.
Kesimpulan
Dengan menggunakan Docker Compose, Anda dapat membangun, mendistribusikan, dan mengelola aplikasi multi-service dengan lebih mudah. Pada proyek ini, kita telah membahas langkah-langkah membangun aplikasi, melakukan deployment di production, serta optimasi dan troubleshooting. Menggunakan Docker Compose memungkinkan Anda untuk mengelola aplikasi secara efisien, bahkan pada skala besar.
Discover more from teknologi now
Subscribe to get the latest posts sent to your email.