Letak Tersembunyi Linux pada Docker for Mac dan Cara Mengaksesnya

2 min read

Disclaimer
Saya bekerja di AWS, semua opini adalah dari saya pribadi. (I work for AWS, my opinions are my own.)
Linux pada Docker for Mac
Linux pada Docker for Mac

TeknoCerdas.com – Salam cerdas untuk kita semua. Tahukah anda dimana letak tersembunyi Linux pada Docker for Mac? Jika jawabannya belum maka maka lanjutkan membaca tulisan ini. Docker for Mac tetap memerlukan Linux untuk menjalankan Docker meskipun memakai Hyperkit sebagai hypervisor pengganti dari sebelumnya yaitu VirtualBox.

Berbeda dengan Docker Toolbox yang memerlukan VirtualBox. Versi terbaru Docker for Mac tidak memerlukan hypervisor besutan Oracle tersebut melainkan menggunakan hypervisor bawaan dari MacOS yaitu Hyperkit.

Kenapa pada Mac masih memerlukan sebuah hypervisor? Docker adalah container yang memerlukan kernel dari sistem opersi induk (Host) untuk berjalan. Setiap container adalah Linux image sehingga otomatis memerlukan Linux kernel yang berjalan pada sistem operasi induk.

MacOS bukanlah Linux, sama seperti Windows. Sehingga untuk menjalankan Docker, MacOS akan menjalankan Linux menggunakan virtual machine diatas hypervisor yaitu Hyperkit.

Itulah kenapa pada Docker for Mac terdapat konfigurasi jumlah CPU dan RAM yang harus disetup karena sejatinya setup tersebut untuk Linux VM yang akan menjalankan Docker.

Konfigurasi Docker for Mac
Konfigurasi Docker for Mac

Lokasi Linux pada Docker for Mac

Jika anda mengira bahwa lokasi container yang digunakan pada Docker for Mac ada di /var/lib/docker/ maka anda salah. Karena tidak directory bernama docker pada /var/lib/. Lantas dimana Docker for Mac menyimpan seluruh container?

Jawabannya adalah disk image. Lokasinya ada pada path berikut.

$ ls -lh ~/Library/Containers/com.docker.docker/Data/vms/0/data/
total 7458728
-rw-r--r--  1 rioastamal  staff    60G Aug  4 09:25 Docker.raw

Secara default Docker mengalokasikan 60GB untuk Linux VM yang menjalankan Docker. Lalu bagaimana cara masuk ke Linux VM yang menjalankan Docker.

Caranya adalah dengan mengakses terminal (tty) Linux menggunakan perintah screen seperti dibawah ini.

$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

Tampilan prompt pada terminal akan berubah yang berarti anda berada didalam Linux yang berjalan diatas Hyperkit.

docker-desktop:~# uname -a
Linux docker-desktop 4.19.76-linuxkit #1 SMP Tue May 26 11:42:35 UTC 2020 x86_64 Linux

Distribusi Linux yang digunakan oleh internal Docker adalah LinuxKit. Untuk membuktikan bahwa kita sedang berada didalam Linux yang menjalankan Docker, lihat isi dari direktori /var/lib/docker.

docker-desktop:~# ls -lh /var/lib/docker/
total 52
drwx------    2 root     root        4.0K Jul 11 13:39 builder
drwx--x--x    4 root     root        4.0K Jul 11 13:39 buildkit
drwx------    3 root     root        4.0K Jul 11 13:39 containerd
drwx------    2 root     root        4.0K Jul 19 10:24 containers
drwx------    3 root     root        4.0K Jul 11 13:39 image
drwxr-x---    3 root     root        4.0K Jul 11 13:39 network
drwx------   33 root     root        4.0K Aug  4 02:25 overlay2
drwx------    4 root     root        4.0K Jul 11 13:39 plugins
drwx------    2 root     root        4.0K Aug  4 02:25 runtimes
drwx------    2 root     root        4.0K Jul 11 13:39 swarm
drwx------    2 root     root        4.0K Aug  4 02:25 tmp
drwx------    2 root     root        4.0K Jul 11 13:39 trust
drwx------    2 root     root        4.0K Jul 19 10:25 volumes

Lihat ukuran disk yang digunakan oleh LinuxKit harusnya sama dengan ukuran disk image yang dialokasikan oleh Docker for Mac.

docker-desktop:~# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0     11:0    1   389M  0 rom  /
sr1     11:1    1    88K  0 rom
sr2     11:2    1 283.5M  0 rom  /containers/services/docker
vda    254:0    0  59.6G  0 disk
└─vda1 254:1    0  59.6G  0 part /var/lib

Untuk keluar dari Screen gunakan kombinasi keyboard berikut.

CTRL+A lalu K

Lalu pilih y untuk mematikan window. Harusnya nanti akan muncul sebuah indikator seperti berikut, yang menandakan bahwa screen telah dimatikan dan tidak terhubung dengan terminal Linux.

[screen is terminating]

Docker for Mac menyediakan integrasi yang lebih baik daripada Docker Toolbox. Dimana Docker for Mac menggunakan Hyperkit yang merupakan hypervisor bawaan dari MacOS.

Tapi tetap saja menjalakan Docker di MacOS tidaklah native karena masih harus ada Virtual Machine yang menjalankan Linux. Ini otomatis membuang ruang CPU dan RAM ketika anda menyalakan Docker tetapi tidak aktif menggunakannya. Tapi, itu masih lebih baik daripada harus menginstal VirtualBox terlebih dulu.