JANCOK, temen gue berantem soal Docker.
Hari ini, gw nguping dua temen kantor gw yang lagi berdebat soal Docker. Percakapannya gini:
"Bro, yang kemaren docker error itu gimana ya kok bisa solve? alasannya apa?"
"Iyaa, kemaren gw nge-solve nya gw bikin docker imagenya sesuai arsitektur os nya"
"Ha? Maksudnya arsitektur os?"
"Jadi tuh kayaknya ada perbedaan os antara mac sama linux jadi harus gw convert ke linux"
"Ha? Docker masih harus bergantung sama os? Kok gitu si? Kalo penjelasannya gitu malah menyalahi filosofi docker dong."
"Waduh iya juga yaa"
"Atau mungkin Docker Engine nya beda mungkin masih masuk akal"
"Oh iya iya"
Gw denger percakapan itu pengen berkomentar pedas tapi gw sadar klo skill computer science gw masih cupu. Akhirnya gw diem aja. Tapi pas itu, gw mikir kayaknya gak gitu jawabannya. Bukan berarti Docker menyalahi filosofinya sendiri. Pasti ada alasan kenapa kita masih perlu nge-convert docker image kita menyesuaikan OS, katanya.
Therefore, gw nyoba baca-baca lagi dokumentasi dan nanya Claude. Berdasarkan dokumentasinya dibilang bahwa
But containerization by itself only solves part of the problem. Containers share the host kernel, which means that the code that's running inside the container must be compatible with the host's architecture.
Berdasarkan Claude, Docker itu nge-abstract away beberapa part seperti:
- Operating system distributions (Ubuntu vs CentOS vs Alpine)
- System libraries and dependencies
- Environment configurations
- Runtime environments
Dan beberapa part yang gak bisa di abstract away oleh Docker seperti:
- An x86-64 binary simply cannot execute natively on an ARM processor
- Machine code instructions are fundamentally different between architectures
- This is a hardware-level constraint, not a software packaging issue
Intinya, komputer punya CPU atau otak yang beda-beda. In general, ada dua tipe otak yaitu AMD64 (Linux os yang sering dipake di cloud) dan ARM64 seperti M1 nya Apple. AMD64 sama ARM64 itu gak 1:1 kompatibel, perlu ada adapter untuk menghubungkan docker image dengan arsitektur AMD64 ke ARM64 dan begitu pula sebaliknya.
Analoginya kayak lo bikin resep dalam bahasa Inggris dan satu lagi bahasa Spanyol. Walaupun masakan yang dibuat sama, tapi orang Inggris gak bisa pake resep Spanyol dan begitupun sebaliknya, orang Spanyol gak bisa pake resep Inggris walaupun masakannya sama persis.
Akhir kata, ini bukan masalah Docker menyalahi filosofinya sendiri atau bahkan masalah Docker Engine (yg mana gw baru tau itu gak ada hubungannya sama sekali wkwkwkw), namun ini masalah gimana kode lu atau kontainer lu diterjemahkan dan dieksekusi oleh CPU yang berbeda arsitektur dan oleh karena itu docker image nya perlu di convert dari ARM64 (klo lo nge-build imagenya pake Macbook M1 ke atas) ke AMD64 yang merupakan mostly CPU architecture on public cloud provider.
Salam Jembot!