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