Docker Pada MacOs

Docker Pada MacOs – Bagi kamu yang belum tau apa itu Docker, saatnya kamu keluar dari goa dan mulai berkenalan dengan Docker dengan berbagai macam manfaatnya.

Saya ingin membagikan bagaimana trik yang saya gunakan, saat melakukan setup Docker Pada MacOs. Berdasarkan pengalaman saya menggunakan MacOS terdapat beberapa masalah Docker Pada MacOS antara lain :

  1. Masalah 1 Docker Pada MacOs

    Menggunakan Docker pada MacOS (dan Windows) tidak se-convinient di lingkungan Linux. Docker memang secara native untuk Linux. Penggunaan Docker di lingkungan MacOs masih banyak memiliki issue terutama pada issue performa yang, well, sangat lambat, walaupun masih bisa dilakukan tuning. Melakukan tuning docker menghabiskan waktu dan case by case.

    Tidak ada developer yang suka dalam lambatnya proses development, termasuk saya.

  2. Masalah 2 Docker Pada MacOs

Semakin banyak container yang kita punya dalam Docker, semakin banyak space storage yang kita habiskan. Saya menggunakan MacBook Pro 2017 base model yang hanya mempunyai space storage penyimpanan sebesar 128 GB (naasnya tidak bisa diupgrade). Saya mengelola banyak container untuk project internal perusahaan saya di Hooki, serta project-project dari client kami. Saya mulai kekurangan space penyimpanan seiring dengan bertambahnya jumlah container.

Jadi setelah mencoba berbagai macam workaround agar bisa menggunakan Docker dengan nyaman pada Macbook saya, pada akhirnya saya menemukan 1 workaround yang paling tepat yaitu:

~ uninstall docker ~

Install Linux dalam Virtual Box.

Lupakan untuk mempertimbangkan melakukan tunning Docker pada MacOS kalau kamu sedang dikejar deadline atau kamu punya client yang rewel. Itu akan buang-buang waktu, dan hasilnya tidak akan memuaskan. Sebagai developer kita harusnya fokus memberikan solusi dan memecahkan masalah untuk bisnis client kita, bukan asik asik ngoprek tools yang kita gunakan.

Satu satunya cara agar Docker berjalan optimal yaitu menggunakannya pada habitat yang benar, yaitu Linux. Jadi, saya memutuskan mencoba menginstall Ubuntu dalam VirtualBox, kemudian melakukan installasi Docker. Kalau mau install Ubuntu Desktop atau distro Linux yang lain juga boleh, sesuai selera aja.

Pakai Tambahan Penyimpanan

Makin banyak container, makin cepat habis storage yang kita gunakan untuk Docker. Tapi tidak masalah lagi karena sudah menggunakan VirtualBox. Terima kasih kepada VirtualBox, yang memungkinkan kita bisa meletakan VDI (Virtual Disk Image) di directory manapun yang kita mau. Karena itu, saya bisa menggunakan external storage untuk menjalankan virtaul machine/guest OS. Jadi ngga usah khawatir kehabisan internal storage lagi deh.

Agar hasilnya optimal saya menggunakan External SSD khusus yang memang saya dedikasikan untuk Docker. Ngga harus SSD sih, eksternal HDD juga bisa. Selain alasan kecepatan saya memilih eksternal SSD ini juga karena kebetulan konektornya menggunakan USB type C, jadi tidak perlu pakai dongle-dongle-an lagi dan transfer datanya pastinya lebih cepat.

Install Docker

Setelah berhasil menginstall Ubuntu Server, saya lakukan installasi docker denganapt install docker.io . Tidak lupa saya pastikan Ubuntu Server yang saya gunakan sudah terinstall openssh-server, agar nanti saya bisa lakukan SSH dari host OS (MacOs).

VirtualBox dalam Mode Headless

Dengan cara diatas, jika kita ingin menggunakan Docker, kita harus menjalankan Virtual Box terlebih dahulu. Setelah Virtual Box berjalan, tahap selanjutnya adalah menjalankan virtual machine yang kita inginkan. Setelah itu barulah kita bisa menggunakan Docker dengan hati riang dan gembira.

Tapi cara di atas menurut saya tidak produktif karena terlalu banyak jumlah klik mouse yang harus saya lakukan. Jadi bagaimana caranya agar workflow kita bisa lebih cepat? Caranya adalah dengan menjalankan Virtual Box dalam mode headless dan memadukannya dengan alias. Apa itu mode headless? Jadi begini:

Singkatnya, kita bisa kok menjalankan VirtualBox tanpa GUI!

Sebetulnya, sebagai web develoeper, saya tidak butuh mengakses guest OS (Ubuntu Server) langsung dari jendela Virtual Box (GUI), karena sudah cukup via SSH saja.

Konfigurasi Network

Sebelum bisa melakukan SSH ke guest OS (Ubuntu Server), mari kita lakukan konfigurasi Networknya terlebih dahulu. Caranya adalah klik kanan virtual machine yang akan dikonfigurasi (Ubuntu Server atau apapun kamu kasih namanya), kemudian pilih Settings — > Network. Pada tab Adapter 1 (dengan jenis NAT), klik Port Forwarding.

Konfigurasi Network

Kita akan melakukan port forwarding dari host OS ke guest OS. Konfigurasi yang saya gunakan adalah sebagai berikut:

Port Forwarding

Saya melakukan port forwarding dari localhost (127.0.0.1) dengan port 2222 ke guest OS dengan port 22. IP yang digunakan guest OS adalah 10.0.2.15. Jika kamu tidak yakin IP yang digunakan pada guest OS, bisa dicek dengan melakukan perintah ifconfig. Untuk memastikan apakah konfigurasi sudah benar atau belum kita bisa melakukan test SSH dengan cara ssh <user>@127.0.0.1 -p 2222 . Misalkan: ssh root@127.0.0.1 -p 2222 .

Jalankan VirtualBox dalam Mode Headless + alias.

Pertama kita harus tahu terlebih dahulu daftar virtual machine yang kita punya. Untuk melihat daftar virtual machine yang terinstall pada VirtualBox bisa dengan menggunakan perintah:

$ VBoxManage list vms 
"Ubuntu" {e4b0c92c-4301-4a7d-8af8-fe02fed00451}

Saya memiliki 1 buah virtual machine dengan nama Ubuntu. Untuk menjalankannya dalam mode headless bisa menggunakan perintah:

VBoxManage startvm Ubuntu --type headless

Apabila ingin mematikannya bisa dengan perintah:

VBoxManage controlvm Ubuntu poweroff

Rasanya capek kalau setiap kali menjalankan VM, harus ngetik perintah di atas ya? Agar lebih mudah dan produktif mari manfaatkan alias. Tambahkan line berikut ke ~/.bash_profile atau ~/.bashrc atau ~/.zshrc:

alias startvm="VBoxManage startvm <vm> --type headless ; ssh <user>@127.0.0.1 -p 2222"
alias stopvm="VBoxManage controlvm <vm> poweroff"

Silahkan ganti <user> dengan username SSH dan <vm> dengan nama virtual machine. Kamu bisa juga gunakan perintah lain selain startvm, atau stopvm.

Simpan dan jangan lupa ketikan perintahsource ~/.bash_profile atau source ~/.zshrc atau source ~/.bash_profileuntuk mereload konfigurasi yang sudah kita tambahkan.

Selanjutnya untuk menjalankan virtual machine dan sekaligus langsung melakukan SSH ke guest OS, kita tinggal mengetikan perintah:

startvm

Untuk mematikan virtual machne kita tinggal jalankan perintah:

stopvm

Semoga solusi di atas bisa membantu teman-teman developer yang sedang mendalami dunia per-docker-an ya! Jangan lupa tinggalkan komentar jika ada pertanyaan. Selamat mencoba!