Advertisement

Menjalankan Aplikasi Multi-Container dengan Docker Compose – Docker Tanpa Ribet!

 File:Docker (container engine) logo.svg


“Aplikasi multi-container? Kenapa nggak cukup satu?” – Orang yang belum kenal Docker Compose.

Pernah nggak kamu butuh lebih dari satu container untuk menjalankan aplikasi? Misalnya, kamu punya aplikasi Node.js yang butuh database MySQL atau Redis. Kalau pakai docker run satu per satu, bisa bawa-bawa ribet!

Disinilah Docker Compose datang dengan keajaibannya. Dengan Docker Compose, kamu bisa mengatur aplikasi multi-container dalam satu file, dan jalankan semua dengan satu perintah.

Di artikel ini, kita bakal bahas:
  Apa itu Docker Compose dan kenapa kamu perlu pakai itu
  Cara menulis file docker-compose.yml
  Menjalankan aplikasi multi-container dengan Docker Compose
  Tips dan trik untuk mengelola aplikasi multi-container
  Troubleshooting umum dan cara mengatasinya

Siap? Ayo mulai!

1. Apa Itu Docker Compose?

 Docker Compose adalah alat untuk mendefinisikan dan menjalankan aplikasi multi-container. Jadi, kalau aplikasi kamu melibatkan lebih dari satu layanan (misalnya: web, database, cache), Docker Compose bikin hidupmu lebih mudah dengan mengatur semua itu dalam satu file docker-compose.yml.

Dengan Docker Compose, kamu cukup menjalankan satu perintah untuk memulai semua container yang diperlukan. Gimana keren kan?

2. Struktur Dasar Docker Compose

Docker Compose bekerja dengan file YAML bernama docker-compose.yml. Di file ini, kamu mendefinisikan layanan (service) yang diperlukan, seperti aplikasi web, database, cache, dan lain-lain.

Contoh struktur dasar file docker-compose.yml:

version: '3'
services:
  web:
    image: node:14
    container_name: web-container
    ports:
      - "3000:3000"
    volumes:
      - .:/app
    networks:
      - app-network

  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  db-data:

 Penjelasan:

  • version: '3' → Versi Docker Compose yang digunakan.
  • services: → Layanan yang dibutuhkan aplikasi, seperti web dan db.
  • image: → Gambar Docker untuk layanan tersebut.
  • ports: → Pemetaan port antara host dan container.
  • volumes: → Menyimpan data yang persisten (misalnya, untuk database).
  • networks: → Menghubungkan container dalam jaringan yang sama.

3. Menjalankan Aplikasi Multi-Container dengan Docker Compose

Sekarang kita akan coba menjalankan aplikasi Node.js yang terhubung ke MySQL menggunakan Docker Compose.

 Langkah 1: Buat Dockerfile untuk Aplikasi Node.js

Misalkan kita punya aplikasi Node.js sederhana. Buat Dockerfile berikut:

FROM node:14

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3000

CMD ["npm", "start"]

 Langkah 2: Buat file docker-compose.yml

Selanjutnya, buat file docker-compose.yml seperti ini:

version: '3'
services:
  web:
    build: .
    container_name: web-container
    ports:
      - "3000:3000"
    depends_on:
      - db
    networks:
      - app-network

  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  db-data:

 Penjelasan:

  • build: . berarti Docker Compose akan membangun image dari Dockerfile di direktori yang sama.
  • depends_on memastikan container web hanya akan dijalankan setelah container db siap.
  • db menjalankan image MySQL dengan password secret.
  • networks memungkinkan web dan db berkomunikasi dalam jaringan yang sama.

 Langkah 3: Jalankan Docker Compose

Sekarang kita bisa jalankan aplikasi ini dengan satu perintah:

docker-compose up

 Tada! Docker Compose akan mendownload image yang dibutuhkan, membangun container, dan menjalankan aplikasi.

4. Mengelola Layanan dengan Docker Compose

Setelah aplikasi berjalan, ada beberapa perintah yang bisa kamu gunakan untuk mengelola layanan:

 Melihat status container

docker-compose ps

 Menjalankan ulang (restart) container

docker-compose restart

 Menjalankan container di background

docker-compose up -d

 Menghentikan dan menghapus container

docker-compose down

Dengan perintah-perintah ini, kamu bisa dengan mudah mengelola seluruh aplikasi yang berjalan dalam banyak container!

5. Tips dan Trik untuk Docker Compose yang Lebih Mudah

 Gunakan .env untuk konfigurasi sensitif
Jangan langsung letakkan konfigurasi seperti password di dalam file docker-compose.yml. Buat file .env untuk menghindari kebocoran data.
Contoh .env:

MYSQL_ROOT_PASSWORD=secret

Lalu di dalam docker-compose.yml kamu bisa referensikan variabel ini seperti:

environment:
  MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

 Gunakan docker-compose.override.yml untuk konfigurasi berbeda
Misalnya, untuk development dan production yang memiliki konfigurasi berbeda. Kamu bisa membuat file override untuk mengubah service hanya di satu environment.

6. Troubleshooting: Mengatasi Masalah Umum Docker Compose

 Masalah: “Container gagal start”
  Cek logs dengan docker-compose logs. Jika ada error di file docker-compose.yml, pastikan semua service terdefinisi dengan benar.

 Masalah: “Service tidak bisa connect ke database”
  Pastikan kamu menggunakan depends_on dengan benar dan pastikan container yang diperlukan sudah siap sebelum yang lainnya dijalankan.

 Masalah: “Image tidak ditemukan”
  Pastikan Docker Compose dapat mengakses image dari Docker Hub atau pastikan kamu sudah membangun image dengan benar dengan docker-compose build.

7. Kesimpulan: Docker Compose Itu Keren!

 Docker Compose membuat hidup kamu lebih mudah dengan mengatur aplikasi multi-container hanya dengan satu file docker-compose.yml.
  Tidak perlu lagi menjalankan container satu per satu. Cukup jalankan docker-compose up, dan semua service akan berjalan otomatis.
  Cukup satu perintah untuk mengelola semuanya, mulai dari memulai container, menghentikan, sampai melihat logs.

Sekarang giliran kamu!
Coba buat aplikasi multi-container dengan Docker Compose dan rasakan kemudahannya!

Post a Comment

0 Comments