Devops, Software, Tutorial

Belajar Docker Bagian 13

Eko Susilo Harjo October 6, 2024
Tutorial Docker Bagian 14
Tutorial Docker Bagian 14

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.

Polars adalah pustaka open-source untuk pemrosesan data yang ditulis dalam bahasa Rust, yang terkenal dengan efisiensi dan kecepatan. Polars dirancang untuk menangani analisis data secara paralel, memanfaatkan arsitektur modern komputer yang memiliki banyak inti CPU.

“Pelajari konsep Docker persistence dan teknik seperti Docker volumes, bind mounts, dan tmpfs untuk memastikan data tetap aman dan persisten dalam container. Dapatkan panduan lengkap di sini!”

AI dalam dunia fintech telah berkembang pesat, bukan sekadar teknologi baru yang tiba-tiba muncul. Teknologi ini telah lama digunakan untuk membantu pengambilan keputusan keuangan dan mendeteksi penipuan. Kini, AI dan subdomainnya, yaitu Machine Learning (ML), memberikan nilai tambah signifikan dalam berbagai aspek industri fintech. Apa saja manfaat utama teknologi ini bagi sektor keuangan dan perbankan? […]

Discover more from teknologi now

Subscribe now to keep reading and get access to the full archive.

Continue reading