Deploy aplikasi menggunakan Docker Compose memang membuat proses maintenance jauh lebih sederhana. Salah satu aktivitas yang paling sering dilakukan adalah melakukan upgrade aplikasi ketika image terbaru sudah tersedia di registry, baik Docker Hub maupun private registry.
Dulu saya sering melakukan update dengan cara menghentikan container terlebih dahulu, menghapus image lama, kemudian menjalankan compose kembali. Setelah memahami cara kerja Docker Compose, ternyata proses tersebut bisa dilakukan jauh lebih sederhana.
Kapan Perlu Melakukan Upgrade?
Biasanya upgrade dilakukan ketika:
- Tersedia versi aplikasi terbaru.
- Ada patch keamanan (security update).
- Ingin mendapatkan fitur baru.
- Melakukan update image yang dibangun melalui CI/CD.
Sebagai contoh, struktur project sederhana:
my-app/
├── docker-compose.yml
├── .env
└── data/
Misalnya docker-compose.yml berisi:
services:
app:
image: ghcr.io/example/my-app:latest
ports:
- "8080:8080"
restart: unless-stopped
Container tersebut berjalan menggunakan image latest.
Langkah 1 — Download Image Terbaru
Pertama, ambil image terbaru dari registry.
docker compose pull
Perintah ini hanya melakukan download image terbaru tanpa menghentikan container yang sedang berjalan.
Jika image ternyata belum berubah, Docker akan memberikan informasi bahwa image sudah up-to-date.
Contoh output:
Pulling app...
Status: Image is up to date
Jika memang ada versi baru:
Pulling app...
Downloaded newer image
Langkah 2 — Jalankan Ulang Container
Setelah image berhasil di-download, jalankan:
docker compose up -d
Docker Compose akan membandingkan konfigurasi yang ada.
Apabila image berubah, Compose akan:
- menghentikan container lama,
- membuat container baru menggunakan image terbaru,
- menjalankannya kembali,
- mempertahankan konfigurasi volume, network, environment, serta mapping port.
Yang menarik, image lama belum langsung dihapus sehingga masih bisa digunakan apabila sewaktu-waktu diperlukan rollback.
Mengapa Tidak Langsung docker compose up -d?
Sebenarnya bisa saja.
docker compose up -d
Namun perintah tersebut tidak selalu melakukan pull image terbaru.
Compose hanya menggunakan image yang sudah tersedia secara lokal.
Karena itu workflow yang saya gunakan adalah:
docker compose pull
docker compose up -d
Dengan begitu saya yakin container benar-benar menggunakan image terbaru yang tersedia di registry.
Melakukan Upgrade Service Tertentu
Jika Compose memiliki banyak service:
services:
app:
redis:
postgres:
Misalnya hanya ingin meng-update aplikasi tanpa menyentuh database.
Download image:
docker compose pull app
Kemudian restart hanya service tersebut.
docker compose up -d app
Cara ini jauh lebih aman dibanding menjalankan seluruh stack apabila memang hanya satu service yang berubah.
Verifikasi Image yang Digunakan
Setelah upgrade selesai, cek container yang sedang berjalan.
docker compose ps
Atau:
docker ps
Apabila ingin memastikan image yang digunakan:
docker inspect <container-name>
atau
docker images
Apakah Volume Akan Hilang?
Tidak.
Selama menggunakan Docker Volume atau bind mount, data tetap aman.
Misalnya:
volumes:
- ./data:/data
atau
volumes:
- postgres-data:/var/lib/postgresql/data
Container boleh berganti berkali-kali, tetapi data tetap berada pada volume tersebut.
Apakah Downtime Tetap Ada?
Ya.
Docker Compose akan menghentikan container lama sebelum membuat container baru.
Untuk sebagian besar aplikasi internal atau website pribadi, downtime biasanya hanya beberapa detik.
Jika membutuhkan zero downtime, solusi yang lebih tepat adalah menggunakan:
- Docker Swarm
- Kubernetes
- Reverse Proxy dengan rolling deployment
Workflow yang Saya Gunakan
Secara umum saya menggunakan workflow berikut ketika melakukan maintenance server.
cd /path/to/project
docker compose pull
docker compose up -d
docker compose ps
Setelah memastikan semuanya berjalan normal, barulah saya membersihkan image lama yang sudah tidak digunakan.
Penutup
Bagi saya, kombinasi docker compose pull dan docker compose up -d merupakan cara paling sederhana sekaligus paling aman untuk melakukan upgrade aplikasi berbasis Docker Compose.
Prosesnya cepat, konfigurasi tetap terjaga, data pada volume tidak ikut terhapus, dan image lama masih tersedia apabila sewaktu-waktu dibutuhkan untuk rollback.
Untuk maintenance rutin server, dua perintah tersebut sudah menjadi bagian dari workflow yang hampir selalu saya jalankan setiap kali ada update aplikasi.