Membatasi Penggunaan Memory dan CPU pada Docker Container

Membatasi Penggunaan Memory dan CPU Docker Container. Saat kita menjalankan sebuah container secara default menggunakan seluruh resource dari host. Nah, jika tiba-tiba ada lonjakan penggunaan memory atau CPU di container bisa saja aktifitas di host terganggu.

Nah di tutorial ini saya akan sharing sedikit mengenai bagaimana cara membatasi penggunaan CPU dan memory di docker container.

Namun sebelum melanjutkan tutorial ini pastikan kernel di host system kalian sudah mendukung swap limit. Jalankan perintah
docker info
Jika di akhir baris ada warning "WARNING: No swap limit support", edit file /etc/default/grub dan tambahkan baris
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
Update grub dengan perintah
sudo update-grub
Lalu reboot system.

Jalankan kembali perintah docker info dan pastikan warning yang muncul sebelumnya sudah tidak ada.

Membatasi Penggunaan CPU
Oke, untuk benchmark didalam container kalian bisa menggunakan tool stress. Atau untuk percobaan kalian bisa gunakan image docker-stress. Di tutorial ini saya akan menggunakan image docker-stress untuk percobaan.

Untuk permulaan, saya coba jalankan images tanpa pembatasan CPU.
docker run -d --rm progrium/stress -c 8 -t 10s
hasilnya, CPU di host saya ikut jebol.

Sekarang kita coba batasi penggunaan CPUnya. Di docker sendiri sudah disediakan fitur limitasi tersebut dengan menambahkan parameter --cpus.

Sebagai contoh disini saya akan batasi penggunaan CPU oleh container adalah 1 core dari total 8 cores yang saya miliki.
docker run -d --rm --cpus 1 progrium/stress -c 8 -t 10s
Penggunaannya pun akan dibatasi menjadi hanya 1 core penuh dibagi 8 cores.

Atau, kita bisa mengalokasikan beberapa core secara menyeluruh untuk si container. Parameter yang digunakan adalah --cpuset-cpus.
Sebagai contoh, disini saya ingin mengalokasikan core pertama dan kedua ke container, maka perintah dockernya adalah
docker run -d --rm --cpuset-cpus 0,1 progrium/stress -c 8 -t 10s

Membatasi Penggunaan Memory
Nah selanjutnya kita akan membatas mengenai pembatasan memory. Ini adalah contoh dimana penggunaan memory atau RAM tidak dibatasi.
docker run -d --rm --cpus=".5" progrium/stress --vm 15 --vm-bytes 1024M -t 20s
Nilai vm 15 dan vm-bytes 1024M adalah jumlah total memory yang tersedia di host. 15*1024M.

Nah, sekarang kita coba batasi penggunaan memory oleh container dengan menambahkan parameter --memory. Di contoh ini saya coba batasi penggunaan memorynya menjadi maksimal 2GB saja.
docker run -d --rm --cpus=".5" --memory="2g" progrium/stress --vm 15 --vm-bytes 1024M -t 20s

Atau jika kita ingin menambahkan alokasi swap ke container maka perintahnya
docker run -d --rm --cpus=".5" --memory="2g" --memory-swap="2g" progrium/stress --vm 15 --vm-bytes 1024M -t 20s
Oke mungkin sekian tutorial singkat kali ini. Untuk pembahasan lengkap mengenai pembatasan resources pada container kalian bisa baca melalui artikel berikut
https://docs.docker.com/config/containers/resource_constraints/

Jangan lupa share agar lebih banyak yang tau, dan jika ada yang ingin ditanyakan silahkan tinggalkan komentar.