“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 containerweb
hanya akan dijalankan setelah containerdb
siap.db
menjalankan image MySQL dengan passwordsecret
.networks
memungkinkanweb
dandb
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!
0 Comments