**Docker** ialah platform sumber terbuka yang membolehkan pembangun membungkus aplikasi bersama semua kebergantungan (dependencies) ke dalam satu unit yang dipanggil **container**.
### 🌟 Kelebihan Docker:
- 🚀 **Cepat & Ringan** – Lebih pantas berbanding VM (Virtual Machine) dan guna sumber lebih sedikit.
- 🔄 **Konsisten** – "It works on my machine" tidak lagi jadi masalah.
- 🧪 **Mudah untuk Ujian** – Boleh bina & uji aplikasi dalam persekitaran yang terpencil.
---
## 📦 Konsep Asas Docker
### 1. 🧊 Image
- Imej ialah **template read-only** yang mengandungi segala yang diperlukan untuk menjalankan aplikasi: kod, runtime, pustaka, dan dependencies.
- Contoh: `node:16-alpine`, `mysql:latest`
### 2. 📦 Container
- Container ialah **instance** aktif daripada image.
- Ia adalah persekitaran yang terpencil dan ringan untuk menjalankan aplikasi.
### 3. 💾 Volume
- Volume digunakan untuk **menyimpan data** secara berterusan di luar container.
- Ini penting untuk data seperti pangkalan data yang anda tidak mahu hilang apabila container dimusnahkan.
### 4. 📝 Dockerfile
- Fail konfigurasi yang digunakan untuk **bina image**.
- Mengandungi arahan seperti `FROM`, `COPY`, `RUN`, `EXPOSE`, dan `CMD`.
### 5. 🔗 Docker Compose
- Alat untuk **urus berbilang container** dalam satu fail YAML (`docker-compose.yml`).
- Memudahkan deploy aplikasi yang ada frontend, backend, dan pangkalan data sekaligus.
- Contoh perintah:
```bash
docker-compose up -d--build
```
---
# 🚀 LATIHAN AMALI: Docker untuk Aplikasi React + Spring Boot