Arsitektur Docker & Django React

Hanrichie Hong
5 min readJun 7, 2021

--

https://miro.medium.com/max/2000/1*y6CvfE6WUgoIdT8Mp0Ev_g.png

Para developer pastinya sudah pernah mendengar tentang docker. Apabila sedang melakukan sebuah proyek, biasanya menggunakan docker untuk aplikasi yang dibuat. Tapi apa itu docker? Pada artikel ini, saya akan menjelaskan mengenai docker beserta arsitekturnya.

Apa itu Docker?

Docker adalah sebuah open platform software yang berfungsi untuk membuat, menguji, dan menerapkan aplikasi dengan cepat. Cara kerja docker adalah dengan mengemas software ke dalam sebuah container, dimana dalam container tersebut terdapat semua hal yang diperlukan software agar dapat berjalan dengan baik, misalnya kode, sistem, dan lain-lain. Dengan menggunakan Docker, kita akan lebih cepat menerapkan dan scaling aplikasi ke environment apa pun tanpa delay yang besar antara penulisan kode dan production.

Apa Kegunaan Docker?

Docker memiliki banyak fungsionalitas dan kegunaan, yaitu sebagai berikut.

  • Karena docker menyediakan container untuk menyimpan dan menjalankan suatu aplikasi dalam environment terisolasi, maka kita dapat menjalankan lebih dari satu container secara bersamaan. Container tersebut juga dapat dibagikan ke tim developer saat melakukan proyek. Terdapat juga tool untuk mengatur lifecycle dari semua container yang kita buat.
  • Proses development aplikasi akan menjadi lebih cepat dan konsisten. Docker menyediakan environment untuk para developer untuk bekerja menggunakan container. Container di docker dapat melakukan CI/CD (Continuous Integration/Continuous Delivery) dengan baik.
  • Proses deployment dan scaling yang responsif. Docker adalah platform yang bersifat container-based yang dapat melakukan banyak pekerjaan secara sekaligus. Container docker dapat dijalankan di berbagai environment, contohnya laptop developer, physical atau virtual machine di data center, dan di cloud provider. Docker juga dapat dengan mudah mengatur workload secara dinamis, sehingga scaling akan menjadi mudah pula.
  • Docker dapat menjalankan banyak pekerjaan di hardware yang sama. Docker adalah platform yang ringan dan cepat, maka dari itu docker cocok untuk environment yang padat dimana kita menggunakan resource yang lebih banyak.

Bagaimana Arsitektur Docker?

Docker mengikuti arsitektur client-server dimana di dalamnya terdapat tiga komponen penting, yaitu Docker Client, Docker Host, dan Docker Registry. Saya akan menjelaskan ketiga komponen tersebut, yaitu sebagai berikut.

https://static.javatpoint.com/docker/images/docker-architecture.png
  1. Docker Client — Docker client menggunakan command dan REST API untuk berkomunikasi dengan servernya yaitu docker daemon. Ketika client menjalankan sebuah command pada terminal docker client, terminal tersebut mengirimkan command-command ini ke docker daemon. Docker daemon menerima command tersebut dalam bentuk request REST API. Terdapat beberapa command yang bisa dijalankan di CLI docker client, yaitu docker build, docker pull, dan docker run.
  2. Docker Host — Docker host berfungsi untuk memulai dan menjalankan aplikasi-aplikasi di docker. Docker host berisikan docker daemon, image, container, network, dan storage.
  3. Docker Registry — Docker registry menyimpan dan mengatur image-image dalam Docker. Terdapat dua jenis registry pada docker, yaitu public registry dan private registry. Public registry biasanya disebut dengan docker hub. Private registry digunakan untuk membagikan image docker secara privat.

Contoh Implementasi Docker

Saya akan mencontohkan implementasi Docker dan image container Docker. Operating System yang saya gunakan adalah Windows. Contohnya adalah sebagai berikut.

  • Pertama, download docker desktop melalui web docker, lalu install.

Download melalui web: Install Docker Desktop on Windows | Docker Documentation

  • Apabila telah berhasil, seharusnya Anda dapat menjalankan command docker run -d -p 80:80 docker/getting-started di command prompt Anda. Flag -d : menjalankan container docker di background, Flag -p 80:80 : mapping port 80 dari host ke port 80 di container, sedangkan docker/getting-started adalah image yang ingin digunakan.
  • Untuk memulai, Anda dapat clone repository Docker get-started untuk contoh kodenya di getting-started/app at master · docker/getting-started (github.com).
  • Lalu kita akan membuat container image dari aplikasi tersebut. Buat file bernama Dockerfile tanpa extension di direktori yang sama dengan file package.json Anda. Isi dari file Docker adalah sebagai berikut.

# syntax=docker/dockerfile:1
FROM node:12-alpine
RUN apk add --no-cache python g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]

  • Setelah itu, buka terminal atau command prompt di direktori yang sama dan jalankan command docker build -t getting-started. Command tersebut akan membuat image container dengan Dockerfile yang sudah dibuat sebelumnya.
  • Karena image container sudah terbuat, jalankan command docker run -dp 3000:3000 getting-started untuk menjalankan aplikasinya. Apabila command berhasil, buka localhost:3000 dan lihat apakah terdapat tampilan aplikasi yang sudah dijalankan. Selamat! Anda telah berhasil membuat image container docker dan menjalankan aplikasinya.
  • Container yang sudah dijalankan tersebut dapat dicek melalui Docker Desktop yang sudah di-install sebelumnya, tepatnya dalam Dashboard.

Arsitektur Django & React

Setelah memahami tentang Docker beserta image containernya, saya akan menjelaskan mengenai arsitektur Django + React dimana Django adalah sebagai backend dan React sebagai frontend.

Arsitektur Django

Django adalah sebuah web framework yang dibuat menggunakan bahasa pemrograman Python. Di dalam Django sudah terdapat komponen-komponen tertentu agar web development menjadi lebih mudah dan cepat. Django menggunakan arsitektur MVT (Model-View-Template).

Apa maksud dari arsitektur MVT?

  • Model adalah lapisan akses data yang di dalamnya berisi segala informasi mengenai data tersebut, seperti bagaimana cara mengaksesnya serta cara memvalidasinya.
  • View adalah lapisan logika. View juga merupakan ‘jembatan’ yang menghubungkan antara lapisan model dengan lapisan template, serta mengurusi logika di dalamnya.
  • Template adalah lapisan representasi atau tampilan. Template berisikan informasi mengenai bagaimana aplikasi web seharusnya ditampilkan.

Peran React

React adalah sebuah library JavaScript yang digunakan untuk membuat UI (User Interface). Untuk dapat menggunakan React sebagai frontend dan Django sebagai backend, dibutuhkan framework Django yaitu DRF (Django REST Framework) yang menggunakan serializer.

Cara kerjanya adalah React akan mengakses data di backend dengan menggunakan Django REST API. Dari sisi frontend, React akan membuat request HTTP ke REST API untuk mengambil ataupun mengirimkan data ke backend. Visualisasi komunikasi antara React dengan Django adalah seperti gambar berikut.

https://miro.medium.com/max/2000/1*lAMsvtB6afHwTQYCNM1xvw.png

--

--