Docker Orchestration

Khoirul Khuluqi Abdulloh
Scrum Booster
Published in
3 min readApr 30, 2019

Bayangkan kita memiliki sepuluh kontainer dan empat aplikasi, mungkin mengelola penyebaran dan pemeliharaan kontainer-kontainer tersebut tidak menjadi sebuah kesulitan. Namun, jika kita memiliki 1.000 kontainer dan 400 layanan, manajemen menjadi jauh lebih rumit. Oleh karena itu, ketika kita beroperasi pada skala besar, container orchestration — otomisasi deployment, managemen, scaling, networking, dan ketersediaan container — menjadi esensial.

Container orchestration adalah semua hal tentang mengelola “siklus hidup” kontainer, terutama di skala besar dan dinamis. Container orchestration digunakan untuk mengontrol dan mengotomatisasi banyak tugas, yaitu:

  1. Penyediaan dan deployment container
  2. Redundansi dan ketersediaan container
  3. Meningkatkan atau menghapus container untuk menyebarkan muatan aplikasi secara merata di seluruh infrastruktur host
  4. Perpindahan container dari satu host ke host lain jika ada kekurangan sumber daya di host, atau jika host mati
  5. Alokasi sumber daya antar container
  6. Eksposur eksternal layanan berjalan dalam container dengan dunia luar
  7. Penyeimbangan muatan pada service discovery antar container
  8. Pemantauan kesehatan container dan host
  9. Konfigurasi aplikasi terkait dengan container yang menjalankannya

Terdapat beberapa tools untuk container orchestration seperti Kubernetes or Docker Swarm. Ketika menggunakan tools tersebut, Biasanya kita menggambarkan konfigurasi aplikasi kita dalam file YAML atau JSON, tergantung tools yang digunakan. File konfigurasi ini (misalnya, docker-compose.yml) adalah tempat kita memberi tahu tools tersebut tempatkita mengumpulkan container images (misalnya, dari Docker Hub), cara membuat jaringan antar container, cara memasang storage volumes, dan ke mana harus menyimpan log untuk suatu container.

Container dideploy ke sebuah host, biasanya dalam kelompok yang sudah direplikasi. Ketika tiba saatnya untuk men-deploy container baru ke dalam kluster, container orchestration tools menjadwalkan deployment dan mencari host yang paling tepat untuk menempatkan container berdasarkan constraint-constraint yang telah ditentukan (misalnya, ketersediaan CPU atau memori). Setelah container berjalan di host, tools tersebut mengelola siklus hidupnya sesuai dengan spesifikasi yang telah ditentukan dalam sebuah file (misalnya, Dockerfile).

Terdapat Dockerfile pada pengembangan Scrum Booster yang berada pada folder backend API

Berikut adalah isi dari Dockerfile tersebut

# Dockerfile

# FROM directive instructing base image to build upon
FROM python:3-onbuild

WORKDIR /app

COPY . /app

EXPOSE 8000

CMD ["./start.sh"]

Pada dockerfile tersebut, terdapat eksekusi sebuah file bash script yang bernama start.sh. Berikut adalah isi dari file start.sh tersebut

#!/bin/bash
python manage.py makemigration
python manage.py migrate
python manage.py populatedb2
# Start Gunicornn processes
echo Starting Gunicorn.
exec gunicorn api.wsgi:application \
--bind 0.0.0.0:8000 \
--workers 3

Berikut software architecture dari Scrum Booster

--

--