Skip to content

Pindah ke docker compose v2: perbaikan yang telat tiga tahun

Adityo Guni Waluyo

Skrip dev saya masih manggil docker-compose di sebelas tempat. Compose v1 ternyata udah EOL sejak Juni 2023, yang jalan di laptop cuma symlink ke v2.

Ringkasan

Skrip dev kantor masih manggil docker-compose gaya lama, padahal Compose v1 udah nggak didukung sejak 2023. Laptop aman cuma karena symlink kompatibilitas Docker Desktop, tapi di CI bersih perintah itu bisa langsung mati. Fix-nya gampang banget: ganti strip jadi spasi jadi docker compose, selesai satu commit.

Terminal kebuka, prompt-nya masih di folder situs kantor. ./dev.sh jalan normal, kontainer naik, halaman muncul. Terus saya iseng buka isinya. Di cmd_up dan sepuluh fungsi lain, perintah yang dipanggil masih docker-compose, pakai tanda strip, gaya 2016.

Dugaan pertama saya: nggak usah diurus. Toh skripnya jalan terus sampai sekarang, masa iya docker-composenya mati. Ternyata dugaan itu salah. Compose v1 udah nggak didukung sejak Juni 2023 [1]. Dan yang bikin skrip itu tetap jalan di laptop saya bukan v1 asli, melainkan symlink kompatibilitas yang mengarah ke v2. Jadi bukan skrip saya yang masih sehat; dia cuma kebetulan ditopang jembatan yang orang lain bangun.

Symlink itu bukan kebetulan, emang sengaja didesain. Docker Desktop punya opsi buat jadikan Compose V2 default, dan blog resmi Docker nyebut efeknya: aktifasi opsi itu bikin symlink supaya skrip lama yang masih manggil docker-compose tetap kehandle versi baru [2]. Nyaman. Tapi efek sampingnya jelas: skrip kayak dev.sh bisa tidur nyenyak bertahun-tahun tanpa pernah dikoreksi, padahal fondasinya udah lama ganti.

Isi perbaikannya persis kayak gini, contoh dua fungsi di dev.sh:

# sebelum
cmd_up() {
  docker-compose up --build
}

# sesudah
cmd_up() {
  docker compose up --build
}

Pola yang sama diulang di cmd_start, cmd_logs, cmd_shell yang tadinya ngecek kontainer pakai docker-compose ps --status running, sampai cmd_clean. Sebelas call site, satu commit, selesai. Nggak ada satu baris logika pun yang berubah.

Yang bikin jenis masalah ini licik: dia nggak kelihatan di satu mesin tapi bisa meledak di mesin lain. Laptop saya kebetulan Docker Desktop, jadi symlink kompatibilitasnya menyelamatkan skrip lama. Di CI runner bersih yang cuma dipasangi Docker Engine plus plugin compose, perintah docker-compose nggak ada sama sekali. Artinya skrip yang hari ini kelihatan sehat bisa tiba-tiba mati bukan karena ada yang diubah, tapi karena lingkungan tempat dia jalan beda. Dari sini migrasi kecil jadi murah banget kalau dibanding jam debuging di pipeline yang mati sendiri.

Kenapa perintahnya berubah jadi dua kata

Compose v2 diumumkan 2020, ditulis ulang pakai Go, dan bentuknya bukan lagi program terpisah melainkan plugin CLI resmi di dalam docker itu sendiri [1]. Karena itu perintahnya docker compose: dua kata, sub-perintah milik Docker CLI. Nggak ada binary docker-compose baru yang perlu di-install.

Format filenya juga beda perlakuan. Compose v2 mengabaikan elemen version di bagian atas compose.yaml dan tunduk pada Compose Specification [1]. Jadi peringatan "version is obsolete" itu wajar, bukan bug. File lama yang masih punya blok version: 3.8 tetap kebaca, cuma elemen itu sendiri yang diabaikan.

Ironi nama paketnya

Bagian paling lucu: kalau instal di Linux, paketnya malah tetap docker-compose-plugin [3]. Strip yang dulu hilang dari perintahnya, mendarat di nama paketnya. Jadi jangan heran kalau dokumentasi menyarankan apt-get install docker-compose-plugin padahal perintah harian kita docker compose.

Habis instal, dokumen resminya nyuruh verifikasi dengan docker compose version [3]. Kebiasaan kecil ini enak dibawa buat ngecek skrip lama: kalau perintah dua kata itu jawab dengan nomor versi, berarti yang jalan v2 ke atas, bukan py-Compose v1 yang udah lama dipensiunkan. Buat ngesain repo sendiri, sepuluh detik juga cukup: grep -rn "docker-compose" --include="*.sh" . dari root proyek. Kalau muncul, jangan panik; tinggal ganti strip jadi spasi.

Versi berikutnya udah nggak pindah rumah lagi

Standar ini udah stabil. Compose v5 yang dirilis 2025 fungsional identik dengan v2 dan perintahnya tetap docker compose [1]. Berarti skrip yang saya rapikan hari ini nggak akan perlu migrasi lagi ke depannya. Compose V1 sendiri sudah lama ditinggalkan: dukungan resminya berakhir setelah Juni 2023 [2] dan sejak itu dihapus dari Docker Desktop.

Kalau di repo kamu masih ada docker-compose di skrip dev, itu bukan alarm. Tapi tiga tahun tanpa dukungan itu juga bukan kondisi yang enak ditidurin. Satu commit kecil, nggak ada drama.

Sources

[1] https://docs.docker.com/compose/intro/history
[2] https://www.docker.com/blog/new-docker-compose-v2-and-v1-deprecation
[3] https://docs.docker.com/compose/install/linux

Artikel terkait