Docker Orchestration

Siti Khadijah
4 min readJun 7, 2021
https://www.infoworld.com/article/3447659/kubernetes-vs-docker-understand-containers-and-orchestration.html

Pertama, sebelum membahas salah satu container orchestrator, seperti Docker, perlu dikenali dulu apa itu container dan container orchestration.

Container adalah wadah untuk memaketkan aplikasi kita sehingga aplikasi dapat mengakses resource yang spesifik dan terisolasi dari lingkungan lain. Keuntungan menggunakan container ini adalah agar aplikasi/services menjadi scalable dan ephemeral — aplikasi tersebut dapat digunakan dengan baik ketika dibutuhkan.

Namun, scalability akan sulit dilakukan secara manual jika semakin banyak container yang membangun suatu software. Oleh karena itu, diperlukan container orchestration.

Container orchestration adalah segala hal tentang mengurus lifecycle dari container, terutama dalam lingkup environment yang besar dan dinamis. Beberapa hal yang diatur secara otomatis oleh container orchestration adalah:

  • Provisioning and deployment of containers
  • Redundancy and availability of containers
  • Scaling up or removing containers
  • Load balancing
  • Resources allocation between containers

and many more.

Bagaimana container orchestration bekerja?

Konfigurasi container dilakukan melalui YAML atau JSON file, contohnya docker-compose.yml. Pada file tersebut perlu dituliskan dimana container images, bagaimana membuat jaringan antar container, bagaimana akses storage, dan dimana tempat penyimpanan logs untuk container tersebut. Ketika satu container di-deploy, terdapat container orchestration tool yang akan men-schedule deployment dan mencari host yang tepat untuk menempatkan container tersebut.

Then, apa itu Docker?

Docker adalah sebuah platform untuk membuat containers. Dengan Docker, container menjadi lebih user-friendly dan developer-friendly.

Docker menyediakan beberapa tools sehingga developer dapat membuat package aplikasi mereka dalam sebuah container (container image) sehingga dapat dengan mudah di-deploy dan digunakan kembali baik di dalam organisasi yang sama atau di tempat lain. Secara singkat, Docker dapat mempermudah pembuatan container image, mengatur versi service yang digunakan, membagikan container, memindah-mindahkan container, dan men-deploy container.

How about docker orchestration?

Berbeda dengan beberapa platform untuk membuat containers, Docker menawarkan container orchestration-nya sendiri, yang bernama Swarm. Swarm sudah terintegrasi ke dalam container sebagai container orchestration tool yang akan menjalankan dan mengatur Docker containers. Swarm merupakan pilihan yang cocok bagi pemula dalam dunia DevOps karena lebih simple dan cepat dalam men-deploy containers, dibandingkan salah satu container orchestration yang cukup popular, yaitu Kubernetes.

Main architecture components of Swarm, a Docker container orchestration tool

https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/
  1. Swarm

Adalah sekumpulan node yang terdiri dari satu master node dan beberapa woker node. Node-node tersebut dapat berupa virtual or physical machines.

2. Service

Adalah sebuah agent node yang akan menentukan container images apa yang perlu digugnkan Swarm, lengkap dengan perintah yang dilakukan Swarm pada container tersebut. Service disini sama seperti service pada microservice.

3. Manager Node

Ketika container di deploy pada swarm, manager node bertugas untuk mengirimkan work kepada worker node. Selain itu, manager node juga mengatur kondisi swarm tempat node tersebut berada.

4. Worker Node

Worker node akan menjalankan work yang didapatkan dari manager node pada swarm. Setiap worker node akan menjalankan agent yang akan menyampaikan hasil pekerjaannya ke master node (manager node). Dengan ini, manager node dapat keep-track pekerjaan worker node-nya.

5. Task

Task disini adalah Docker Container yang menjalankan perintah yang tertulis pada service.

WorkFlow:

Manager node memberikan task (docker container yang menjalankan perintah tertentu) ke worker node (task yang diberikan tidak bisa diberi ke worker node lain) → Jika task gagal, manager node akan memberikan versi baru task tersebut ke node yang sedang available pada swarm.

Kapan dan kenapa perlu menggunakan Docker Container?

Docker dan containers cocok digunakan ketika proyek yang dikerjakan akan memiliki beban kerja atau workloads yang besar, berada pada environment khusus (tidak bercampur dengan aplikasi lain), dan dapat dijalankan dibanyak environment. Dengan menggunakan container, aplikasi akan lebih mudah dilakukan scaling dan terisolasi dari aplikasi lain yang tidak berhubungan.

Keuntungan menggunakan Docker Container dan Docker Orchestration?

  • Meningkatkan portability — dapat scaling aplikasi dan bahkan scaling satu fungsi khusus dalam aplikasi dengan tidak mempengaruhi keseluruhan aplikasi
  • Simple and fast deployment — dapat dengan cepat membuat container sesuai dengan traffic saat itu
  • Meningkatkan security — dapat berbagi resource antar container tanpa khawatir keamanan internal dan eksternal. Selain itu, dengan mengisolasi aplikasi, misalnya web application ke dalam container, keamanan web application tersebut terjaga karena terpisah dari proses aplikasi lain.

Pengalaman

Dalam pengerjaan proyek ppl, tim kami saat ini belum mengimplementasikan docker container. Meskipun begitu, kami sudah membagi aplikasi kami ke dalam dua repository yang berbeda, yaitu untuk frontend dan backend.

Ketika pertama kali mengerjakan proyek pun kami tidak berpikir bahwa docker itu diperlukan, karena saya awalnya mengira bahwa docker digunakan untuk menyamakan versi aplikasi di personal computer anggota tim masing-masing saja. Ternyata, docker cakupannya lebih luas lagi. Setelah mempelajari docker orchestration ini, saya merasa ketika deployment ke server fasilkom nanti, docker akan sangat mempermudah proses tersebut. Jika tidak menggunakan docker, kami akan harus men-settings dan install hal-hal yang diperlukan aplikasi kami, dan hal tersebut akan terus dilakukan setiap men-deploy ke server baru. Tentunya, melakukan hal ini secara manual akan merepotkan. Oleh karena itu, docker dirasa perlu untuk diimplementasi.

--

--