Docker container yang running di M1 Mac ternyata lebih lambat 30% ini penyebabnya

Fakta mengejutkan: beberapa workflow bisa melambat hingga 30% saat dijalankan di lingkungan Apple Silicon. Angka ini membuat developer kehilangan waktu berjam-jam setiap minggu.
Di sini kita akan mengurai penyebabnya dengan bahasa yang mudah. Kamu akan memahami perbedaan arsitektur CPU dan efeknya pada proses emulasi dan virtualisasi. Kami juga menjelaskan masalah image non-native, emulasi amd64, serta bottleneck pada file sharing antara host dan VM.
Tenang saja: artikel ini memberi langkah praktis untuk mengatasi masalah tanpa mengorbankan produktivitas. Dalam bagian selanjutnya, kamu akan menemukan panduan konfigurasi, pilihan arsitektur yang tepat, dan checklist cepat untuk mendapatkan quick wins pada setup lokalmu.
Pendahuluan: Mengapa performa kontainer di Apple Silicon bisa menurun
Kita mulai dengan gambaran singkat tentang arsitektur CPU dan dampaknya pada workflow sehari-hari.
Apple Silicon memakai arsitektur ARM64. Banyak ekosistem developer masih dominan pada x86_64/amd64. Saat image atau dependensi hanya tersedia untuk arsitektur lama, sistem harus menambah lapisan emulasi atau virtualisasi. Lapisan ini menimbulkan overhead dan menurunkan kecepatan.
Rosetta 2 membantu menjalankan biner Intel, tetapi ia punya batas. Virtual machine yang dipakai oleh docker desktop tetap membutuhkan terjemahan atau kompatibilitas tambahan. Hasilnya, operasi I/O dan build sering terasa lambat.
- Images yang hanya untuk amd64 memicu emulasi berat saat dipakai di ARM64.
- Akses file dari host ke VM menambah latensi pada operasi sehari-hari.
- Kesesuaian arsitektur juga memengaruhi efektivitas cache build dan kestabilan aplikasi.
| Aspek | ARM64 (Apple Silicon) | x86_64/amd64 |
|---|---|---|
| Native execution | Lebih cepat untuk binary ARM | Perlu emulasi pada ARM |
| Images umum | Butuh images ARM64 atau multi-arch | Mayoritas images tersedia |
| I/O host-VM | Latensi saat sharing file | Langsung pada host Linux |
Secara default banyak developer menarik images amd64 tanpa sadar. Memilih arsitektur yang tepat sejak awal bisa mencegah degradasi performa dan mengurangi friksi pada build serta runtime applications.
Docker Container M1 Mac: penyebab utama performa turun hingga 30%
Sekarang kita fokus ke sumber-sumber overhead yang nyata saat menjalankan workflow lokal. Banyak faktor teknis berkumpul dan memperlambat build serta runtime.
Emulasi amd64 di atas ARM64 dan batasan virtualisasi
Emulasi menerjemahkan instruksi runtime. Proses CPU-bound seperti kompilasi jadi lebih lambat saat berjalan bukan secara native. Rosetta membantu, tapi punya keterbatasan untuk aplikasi virtual machine dan tidak menggantikan native execution sepenuhnya.
Images non-native, layer besar, dan perintah build yang kurang optimal
Menarik images yang hanya untuk x86_64 memaksa lapisan emulasi aktif. Setiap command pada tahap build bisa berjalan lambat dan cache sering miss antar arsitektur.
Layer yang tebal dan perintah yang menggabungkan banyak langkah memperpanjang waktu ekstraksi dan transfer di dalam VM.
I/O file sharing, jaringan, dan ketersediaan paket lintas arsitektur
Sinkronisasi file antara host dan VM menambah latensi. Operasi kecil seperti npm install atau build asset menjadi sangat mahal.
Beberapa library pra-bangun hanya tersedia untuk x86_64, sehingga harus dikompilasi ulang atau digantikan, menambah waktu dan risiko inkonsistensi pada system.
| Masalah | Dampak | Solusi singkat |
|---|---|---|
| Emulasi amd64 | Performa CPU turun pada tugas berat | Pilih image ARM64 native atau multi-arch |
| Layer besar di image | Waktu build dan transfer meningkat | Optimasi Dockerfile, pecah tahap |
| I/O host–VM | Operasi file kecil lambat | Minimalkan sharing, gunakan volume native |
Dukungan sistem: versi macOS yang didukung Docker Desktop saat ini

Sebelum meng-upgrade, penting tahu versi sistem operasi mana yang masih didukung oleh tooling pengembangan.
Kebijakan dukungan mengikuti pola sederhana: versi mayor saat ini plus dua rilis mayor sebelumnya. Saat ada rilis mayor baru yang tersedia untuk umum, dukungan untuk versi tertua otomatis dicabut.
Kenapa ini penting?
Memastikan OS berada dalam rentang dukungan resmi memastikan Docker Desktop mendapat update performa, perbaikan bug, dan patch keamanan secara rutin.
- Rencana upgrade perlu dibuat supaya tooling pengembangan tetap kompatibel setelah Apple merilis versi baru.
- Docker Desktop yang usang dapat menimbulkan masalah pada kernel, network, dan file sharing yang berdampak pada applications lokal.
- Images yang kamu tarik kadang butuh fitur runtime spesifik; versi terbaru membantu menjaga kompatibilitas OCI dan API.
| Aspek | Rekomendasi | Risiko jika tidak |
|---|---|---|
| Versi OS | Gunakan rilis saat ini atau dua rilis sebelumnya | Hilangnya update keamanan dan perbaikan |
| Proses update | Buat snapshot, simpan compose & env, uji di proyek sampel | Downtime tak terencana dan masalah reproducibility |
| Dokumentasi tim | Catat versi OS & Docker Desktop yang dipakai | Perbedaan lingkungan antar developer |
Praktik aman: jadwalkan window maintenance untuk upgrade, uji pada proyek kecil, dan dokumentasikan versi agar tim di Indonesia tetap konsisten dan produktif.
Cara mempercepat: praktik terbaik menjalankan dan membangun containers di Apple Silicon
![]()
Berikut langkah praktis yang langsung bisa dipakai untuk memangkas waktu build dan runtime di Apple Silicon.
Pilih images multi-arch atau ARM64 native sebagai default. Ini mencegah emulasi yang memperlambat CPU. Banyak image resmi sudah menyediakan manifest multi-arch; pastikan tag yang kamu pilih menyertakan ARM64.
Gunakan buildx dan flag platform dengan bijak
Aktifkan docker buildx untuk menentukan target architecture. Gunakan –platform linux/arm64 untuk performa lokal, atau –platform linux/amd64 hanya saat dependensi belum tersedia. Contoh: docker buildx build –platform linux/amd64 -t image-name .
Optimasi perintah, layers, dan cache
Pecah Dockerfile menjadi multi-stage. Taruh dependensi yang jarang berubah di awal agar cache lebih efektif.
Pin versi paket dan mount cache saat build untuk mengurangi perintah berbiaya tinggi seperti install.
Minimalkan I/O host–VM
Letakkan direktori I/O-intensif di volume yang dikelola engine atau gunakan bind mount secukupnya. Hindari menyinkronkan node_modules secara terus-menerus.
- Build matrix: bangun image ARM64 untuk pengembangan lokal dan amd64 untuk CI, lalu gabungkan sebagai manifest list.
- Jika ketemu error binary prebuilt, targetkan platform yang tepat atau pilih dependensi yang menyediakan release ARM64.
- Kurangi layanan pendamping saat development untuk mengurangi beban engine.
| Praktik | Manfaat | Aksi cepat |
|---|---|---|
| Pilih image multi-arch/ARM64 | Hindari emulasi, CPU lebih cepat | Gunakan tag yang menyertakan ARM64 |
| Gunakan buildx | Kendalikan target architecture | –platform linux/arm64 atau linux/amd64 |
| Optimasi Dockerfile & cache | Rebuild lebih cepat | Multi-stage, pin versi, mount cache |
Ingin panduan konfigurasi cepat untuk tim? Lihat panduan konfigurasi cepat yang bisa disesuaikan dengan workflow lokalmu.
Alternatif Docker Desktop di M1: Colima dan Lima untuk skenario khusus
Colima dan Lima memberi jalur ringan untuk menjalankan containers di Apple Silicon tanpa bergantung penuh pada docker desktop. Keduanya cocok saat kamu butuh kontrol arsitektur atau beberapa instance terpisah.
Colima: pasang cepat dan gunakan command sehari-hari
Instal via Homebrew: brew install colima. Mulai layanan dengan colima start –arch x86_64 atau –arch aarch64. Tanpa flag, Colima pakai default yang direkomendasikan.
Setelah start, kamu bisa langsung use docker commands seperti biasa. Stop dengan colima stop dan reset dengan colima delete.
Jika tool seperti Dive bermasalah, perbaiki socket setelah start: sudo ln -sf ~/.colima/docker.sock /var/run/docker.sock.
Memilih architecture di Colima
Pilih –arch aarch64 untuk performa native ARM64. Gunakan –arch x86_64 hanya saat images yang diperlukan belum tersedia untuk ARM.
Untuk error binary (mis. esbuild Exec format error), pakai build lintas arsitektur: docker buildx build –platform linux/amd64.
Lima: containerd, nerdctl, dan binfmt
Pasang dengan brew install lima. Jalankan instance dengan limactl start dan aktifkan containerd: sudo systemctl start containerd.
Pasang binfmt agar guest OS bisa eksekusi biner non-native: sudo nerdctl run –privileged –rm tonistiigi/binfmt –install all. Untuk kenyamanan, alias: alias docker=’lima nerdctl’.
Kompromi kinerja dan file sharing
Lima menyediakan port forwarding otomatis dan multi-instance. Namun direktori home host bersifat read-only secara default; write support masih eksperimental.
Emulasi x86 di ARM tetap membawa penalti saat kompilasi. Prioritaskan membangun images ARM64 ketika memungkinkan.
| Fitur | Colima | Lima | Docker Desktop |
|---|---|---|---|
| Instalasi | brew install colima | brew install lima | Instal resmi dari vendor |
| Engine | docker/nerdctl via Lima backend | containerd + nerdctl | containerd/docker engine terintegrasi |
| Arch control | –arch aarch64 / x86_64 | ubah instans ke x86_64 | tergantung setting default |
| File sharing | lebih baik untuk dev lokal | home read-only default, write experimental | terintegrasi, mudah writable |
Untuk diskusi teknis tentang menjalankan images x86 dan ARM di Apple Silicon, lihat panduan komunitas terkait kompatibilitas arsitektur.
Kesimpulan
Ringkasnya: perlambatan pada beberapa containers di Apple Silicon umumnya disebabkan oleh mismatch arsitektur dan overhead VM. Cara tercepat untuk mengurangi dampak ini adalah memilih images ARM64, memakai buildx dengan tepat, dan menata ulang Dockerfile agar cache bekerja optimal.
docker desktop tetap nyaman untuk banyak workflow, namun pahami batasan I/O dan jaringan agar strategi pengembangan lebih efisien. Untuk opsi ringan atau lebih fleksibel, pertimbangkan Colima atau Lima sebagai alternative way yang masih mendukung perintah sehari-hari.
Pastikan lingkungan dan tools selalu terdukung oleh versi sistem. Untuk eksplorasi lanjutan tentang menjalankan Kubernetes lokal atau lingkungan Ubuntu ala WSL, baca panduan Minikube lokal dan cara install Ubuntu seperti WSL.
➡️ Baca Juga: RTX 4090 punya hidden mode buat mining crypto lagi Nvidia gak pernah blokir total ternyata
➡️ Baca Juga: Kampanye Nasional Edukasi Publik tentang Politik Diluncurkan




