Modernisasi Aplikasi dengan Google Cloud: Bagian 1 — Container

Xavier Prasetyo
Google Cloud Indonesia
6 min readMar 1, 2023

Modernisasi aplikasi menjadi salah satu topik yang sering dibicarakan di kalangan developer aplikasi. Modernisasi aplikasi dapat membuat sebuah aplikasi menjadi lebih efisien, lebih scalable dan lebih resilient. Pada kumpulan blog ini, saya akan membahas tentang modernisasi aplikasi dengan Google Cloud dari sudut pandang 5 teknologi yaitu Container, Kubernetes, Service Mesh, CI/CD, dan Operasional Aplikasi. 5 hal ini memiliki perannya masing-masing dalam perjalanan untuk memodernisasi sebuah aplikasi. Without further ado, mari kita bahas topik pertama!

Apa sih Container itu?

Container adalah teknologi yang muncul dari tahun 2000-an dan baru mendapat perhatian pada tahun 2010-an dengan munculnya docker. Container membuat aplikasi dapat di-deploy bersamaan dengan dependensinya di platform dan server manapun. Hal ini membuat aplikasi menjadi sangat portable.

Perbedaan antara Container dengan Virtual Machine (Diambil dari https://www.docker.com/resources/what-container/ )

Berbeda dengan deployment aplikasi menggunakan Virtual Machines, Container dapat di-deploy diatas container engine dan tidak membutuhkan virtualisasi sistem operasi. Hal ini membuat container dapat dijalankan jauh lebih cepat dari aplikasi pada Virtual Machine. Teknologi ini membuat perubahan yang cukup signifikan pada masanya karena container membuka peluang baru dalam hal scalability dan resiliency aplikasi.

Scalability aplikasi dapat ditingkatkan karena penggunaan resource container lebih kecil dari Virtual Machine. Hal ini berarti dengan resource yang sama, akan lebih banyak aplikasi yang dapat dijalankan dengan menggunakan container daripada Virtual Machine. Kecepatan deployment container juga membuat aplikasi dapat bereaksi lebih cepat terhadap peningkatan traffic karena container dapat memperbanyak dirinya sendiri dengan lebih cepat.

Resiliency aplikasi juga ikut meningkat dengan penggunaan container. Hal ini terjadi karena jika aplikasi terkena outage, aplikasi dapat dengan cepat dijalankan kembali di lokasi berbeda. Kecepatan deployment juga menjadi hal yang penting dalam membangun aplikasi yang resilient. Aplikasi yang dijalankan pada Virtual Machine memiliki kecepatan deployment yang lebih lama karena aplikasi harus menunggu virtualisasi sistem operasi terlebih dulu sebelum dapat digunakan dan menerima traffic.

Bagaimana cara menggunakan Container?

Container merupakan sebuah teknologi yang memiliki banyak implementasi. Sama halnya dengan sistem operasi, pengguna dapat memilih implementasi container yang sesuai dengan kebutuhan masing-masing. Pada tulisan ini, saya akan membahas container menggunakan implementasi yang paling populer yaitu Docker.

Terdapat 2 cara untuk menggunakan Docker. Cara pertama, kita dapat mengunduh CLI Docker. CLI dapat diunduh di lama resmi Docker disini. Jika menggunakan Linux, kita juga bisa mengunduh CLI Docker melalui package manager distro Linux tersebut.

Cara kedua, kita dapat menggunakan shell gratis pada Google Cloud yaitu Cloud Shell. Cloud Shell merupakan antarmuka terminal suatu Virtual Machine di Google Cloud. Cloud Shell juga memiliki editor kode sehingga dapat memudahkan development. Untuk menggunakan Cloud Shell, buka laman console.cloud.google.com dengan menggunakan akun google. Kemudian, klik logo shell pada pojok kanan atas.

Tombol Cloud Shell
Tampilan Cloud Shell dan Cloud Editor

Setelah menyiapkan CLI Docker atau Cloud Shell, kita dapat memulai menggunakan Docker. Dalam blog ini, saya akan mendemonstrasikan sebuah aplikasi yang menggunakan container, dari kode hingga dapat diakses secara lokal. Berikut langkah-langkahnya:

1. Membuat Kode Aplikasi

Saya akan menggunakan aplikasi sampel ‘Hello World’ menggunakan Python. Aplikasi ini hanya akan menjalankan sebuah server sederhana. Jika pengguna mengakses aplikasi melalui HTTP, maka aplikasi akan mengembalikan sebuah teks “Hello World from Python”. Kode aplikasi diambil dari tutorial Google Cloud disini.

# app.py
import os

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
target = os.environ.get('TARGET', 'World')
return 'Hello {} from Python!\n'.format(target)

if __name__ == "__main__":
app.run(debug=True,host='0.0.0.0',port=int(os.environ.get('PORT', 8080)))

Aplikasi ini dapat dijalankan langsung di sebuah Virtual Machine atau di komputer secara lokal. Jika ingin menggunakan Container (dalam hal ini Docker), kita perlu membuat sebuah file bernama Dockerfile. File ini berisi langkah cara menjalankan aplikasi.

2. Membuat Dockerfile

# Dockerfile

# Menggunakan base image Python versi 3.7
FROM python:3.7-slim

# Melakukan copy kode aplikasi ke dalam container
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . ./

# Menginstal dependensi aplikasi (Flask dan Gunicorn)
RUN pip install Flask gunicorn

# Melakukan set environment variable untuk port aplikasi
ENV PORT 8080

# Menjalankan gunicorn sebagai web server aplikasi
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 app:app

Langkah di dalam Dockerfile ini mirip dengan langkah cara aplikasi diinstal dalam sebuah Virtual Machine dan kemudian dijalankan. Langkah ini diletakkan di dalam file dan biasanya disimpan bersama dengan kode aplikasi. Hal ini membuat deployment dapat dengan mudah dilakukan berulang-ulang tanpa harus tahu cara instalasinya.

3. Melakukan Build Image

Setelah memiliki kode aplikasi dan Dockerfile-nya, kita harus membuat sebuah container image. Container Image adalah enkapsulasi dari kode aplikasi dan semua dependensi yang dibutuhkan untuk membuat aplikasi dapat dijalankan. Untuk melakukan build, pastikan file kode aplikasi dan Dockerfile berada dalam satu direktori atau folder yang sama. Lakukan command berikut untuk menginisasi proses build container.

docker build . --tag python-hello

Command ini akan menjalankan build dengan referensi file Dockerfile pada direktori saat ini (karakter titik) dan memberikan tag pada image yaitu python-hello. Setelah command dijalankan, Docker akan melakukan langkah yang telah dituliskan pada Dockerfile sepert ini.

Setelah beberapa saat, proses build akan selesai. Lama waktu proses build tergantung dari berapa banyak langkah yang diperlukan dan juga kompleksitas langkahnya. Lakukan command berikut untuk melihat container image yang sudah tersedia.

docker image list

Jika build berhasil, maka akan terdapat container image dengan tag python-hello pada daftar container image tersebut.

4. Menjalankan Container Image

Untuk menjalankan sebuah container image, lakukan command berikut:

docker run -p 8080:8080 python-hello

Command ini memberitahu CLI Docker untuk melakukan run sebuah container image dengan nama “python-hello”.

Argumen “-p 8080:8080” adalah argumen untuk menentukan port aplikasi. Pada Dockerfile, kita menentukan bahwa port aplikasi di dalam container adalah port 8080. Namun, container merupakan unit yang terisolasi dari lingkungan luarnya. Untuk dapat mengakses aplikasi dari lingkungan luar (dalam hal ini komputer lokal atau Cloud Shell), kita harus melakukan port forwarding antara port di lingkungan luar dan port di dalam container. Argumen “-p 8080:8080” menunjukkan bahwa kita ingin port 8080 pada lingkungan luar di-forward ke port 8080 di dalam container yang sedang berjalan. Untuk membaca terkait networking pada sebuah container, Docker memiliki dokumentasi yang dapat diakses disini.

Setelah container berjalan, aplikasi dapat diakses melalui port 8080 pada komputer lokal atau Cloud Shell. Kita dapat mengecek menggunakan command curl atau langsung mengakses melalui browser. Jika menggunakan Cloud Shell, terdapat opsi “Web Preview” pada kanan atas antarmuka Cloud Shell.

Tampilan Hello World dari aplikasi

Kompilasi command pada blog ini dapat dilihat pada screenshot berikut:

Menjalankan sebuah container image dengan cara seperti ini biasanya dilakukan untuk development aplikasi atau debugging. Terdapat beberapa kerentanan keamanan dari sisi network jika aplikasi dijalankan dengan cara ini. Hal ini membuat cara ini tidak dianjurkan untuk lingkungan produksi. Salah satu cara yang aman dan baik untuk menjalankan aplikasi dengan container adalah melalui Kubernetes. Topik ini akan dibahas pada bagian berikutnya dalam modernisasi aplikasi.

Sekian, blog modernisasi aplikasi bagian 1 tentang container. Pada bagian berikutnya, saya akan membahas cara menjalankan container dalam jumlah banyak dengan menggunakan Google Kubernetes Engine. Topik berikutnya cukup menarik karena dengan Kubernetes, keunggulan container dapat dengan jelas ditunjukkan dan digunakan.

Jangan lupa berikan clap ya!

Terimakasih dan salam sejahtera! 😊

--

--