Untuk mengganti versi container dengan yang baru tanpa mengganggu pengguna, gunakan strategi rolling update atau blue-green deployment. Berikut beberapa pendekatan yang aman dan sesuai best practice:
Rolling Update (Docker Compose)
Jika menggunakan Docker Compose, update container secara bertahap tanpa downtime:
Langkah-langkah:
1. Perbarui versi image di docker-compose.yml
version: '3'
services:
app:
image: my-app:v2 # Ganti versi image
ports:
- "8080:8080"
restart: always
2. Gunakan docker-compose up -d --no-deps --build untuk update tanpa henti layanan lain
docker-compose up -d --build app
- -d: Jalankan di background
- --no-deps: Hanya update layanan tertentu tanpa merestart yang lain
- --build: Pastikan menggunakan versi terbaru
- Jika lewat dowcker HUB
docker pull myusername/my-app:v2
3. Bersihkan container lama (opsional)
docker image prune -f
Blue-Green Deployment (Zero Downtime)
Pendekatan ini menjalankan dua versi aplikasi secara bersamaan, lalu mengalihkan trafik ke versi baru hanya jika sudah siap.
Langkah-langkah:
1. Jalankan versi baru tanpa menghentikan versi lama
docker run -d --name my-app-v2 -p 8081:8080 my-app:v2
2. Cek apakah versi baru sudah berjalan dengan baik
curl http://localhost:8081
3. Gunakan reverse proxy (Nginx/Varnish) untuk mengalihkan trafik ke versi baru
Contoh konfigurasi Nginx:
server {
listen 80;
location / {
proxy_pass http://localhost:8081; # Arahkan ke versi baru
}
}
4. Lalu reload:
nginx -s reload
5. Hentikan dan hapus versi lama setelah dipastikan aman
docker stop my-app-v1 && docker rm my-app-v1
Zero Downtime dengan Docker Swarm
Jika menggunakan Docker Swarm, cukup lakukan rolling update:
docker service update --image my-app:v2 --detach=false my_app_service
Ini akan memperbarui container satu per satu, sehingga layanan tetap berjalan tanpa downtime.
Kesimpulan
- Rolling Update → Aman dan cepat, cukup gunakan docker-compose up -d --build
- Blue-Green Deployment → Paling aman, bisa rollback jika ada masalah
- Docker Swarm → Cocok untuk sistem dengan banyak container