“Jaman lu PPL pake Docker ga?” “Tidaak”

Hadlina Rahmadinni
PPL cewe semua!
Published in
4 min readApr 3, 2019

“Jadi di PPL 2019 ini kita pake Docker”

Wadu apatuh? Maksudnya container tuh apa? Ada image? Cara kerjanya Docker gimana sih? Aaaa bingung :(

source: https://thebrooklyninstitute.com/items/courses/moby-dick-reading-the-white-whale/

Bukan bukan. Gambar di atas bukan Docker, tapi itu adalah Moby-Dick. hehe.

Nah ini yang namanya Docker…

Cutie kan hehe. Source: https://www.theverge.com/circuitbreaker/2018/5/25/17386716/docker-kubernetes-containers-explained

Docker tuh apasih?

Docker adalah platform yang dibangun berdasarkan teknologi container. Platform ini bisa mempermudah para developers untuk create, deploy dan run the applications dimana pun seperti sebuah container.

Hmm hampir mirip kaya VM sih, tapi bedanya VM itu harus menyiapkan satu OS secara utuh. Kan kalo kaya gitu jadi lebih banyak makan memory :(. Nah si container ini come in handy karena dia menggunakan OS yang sama untuk bisa menjalankan sebuah aplikasi.

Si VM harus meng-install 3 OS tambahan dalam 1 hardware sedangkan container cuma butuh 1! Sangat iritt

Container menggunakan 1 shared OS yang membuat container jadi jauh lebih ringan dibanding VM.

Jadi kalo pake VM, kasian servernya karena keberatan nyimpen OS, libs, dll untuk sebutir aplikasi :(

Trus kenapa Docker?

Simplenya sih, Docker bisa bikin developers less confused ketika mereka udah membuat aplikasi selama beberapa hari (even weeks) di local machine mereka dan ketika di deploy tiba-tiba aplikasi itu gamau jalan. So sad :( dan bikin stress juga. Biasanya kejadian kaya begini terjadi karena ada beberapa dependencies yang harus di install in order to run the application tapi lupa dimasukin ke build.gradle, manifest.xml, dan sejenisnya.

Nah.. Docker itu awalnya kaya cheatsheet kosong.

Ketika Docker ini ingin digunakan, barulah kita memberi tau apa-apa saja yang Docker ini perlu tau. Dependencies apa aja yang perlu di download dan di install supaya aplikasinya bisa jalan. Jadi gaada lagi tuh developers yang bilang “di komputer gua bisa jalan, kenapa di lu gabisa ya?” Case closed.

Arsitektur Docker kaya apa?

Jadi ini adalah arsitektur dari Docker yay! Docker bisa dibagi jadi beberapa elements yaitu Docker Client, Docker Daemon/Engine, Docker Containers, Docker Images, dan Docker Registry. Hee banyak juga yak

Arsitektur Docker itu menggunakan client-server untuk menghubungkan Docker client dengan Docker daemon. Keduanya bisa berkomunikasi via socket menggunakan RESTful API. Jadi keinget waktu OS hehe

  • Docker Daemon & Docker Client— Brain of Docker so to speak

Berfungsi untuk menjalankan proses di environment yang terpisah atau biasanya untuk membuat environment baru. Proses ini yang nanti akan membuat container Linux baru. Daemon itu gak berhubungan langsung dengan users, jadi caranya supaya bisa mengontrol daemon adalah dengan Docker Client/CLI. Docker client mengirimkan API requests ke daemon dan daemon itself actually does all the magic. Whoop

  • Docker Images

Docker image bisa dibilang kaya template, atau yang kita sebut Dockerfile, untuk docker container.

Dockerfile PPLB3 ❤

— start.sh

Nah start.sh ini yang bakal mengatur supaya Gunicorn bisa menjalankan proses server untuk sebuah project dan mengatur port mana yang bakal digunakan project itu

Di dalam sebuah image biasanya berisi OS atau aplikasi yang telah di install dan udah jadi. Image ini nanti akan digunakan untuk menjalankan container. Dengan 1 image kita bisa bikin banyak docker container.

  • Docker Container

Docker container ini yang dibuat oleh daemon tadi. Container berjalan diatas image dan setiap perubahan yang disimpan pada container akan menyebabkan terbentuknya layer baru di atas base image.

— membuat container baru:

docker build -t registry.docker.ppl.cs.ui.ac.id/pplb3/db-baru:latest .
#push image
docker push registry.docker.ppl.cs.ui.ac.id/pplb3/db-baru:latest

— menjalankan container:

docker run -it -p 22301:22302 registry.docker.ppl.cs.ui.ac.id/pplb3/db-baru:latest

Nanti ketika kita sudah berhasil membuat container, kita bisa membuat dan menggunakan docker-compose.yml.

“is a tool for defining and running multi-container Docker applications” — Docker, Overview of Docker Compose

docker-compose.yml ini yang mengatur bagaimana container harus bekerja in a single command.

  • Docker Registry

Docker registry adalah kumpulan docker image yang bersifat public dan private repository. Registry public Docker disebut dengan Docker Hub. Disini kita bisa push image kita sendiri maupun pull image.

Setting Environment!

Di PPL ini kita ada 3 tahap yaitu development, staging, dan production. Semua tahap itu masing-masing punya port dan database yang beda makanya semuanya harus dibedakan…

Saat program di jalankan, environment akan menyesuaikan dengan isi dari environment variable dengan key ‘DJANGO_ENV’. Kalo != staging atau production, maka akan menggunakan nilai default yaitu ‘LOCAL’.

File setting environment

Tiap file settings environment bakal meng-import file base.py yang nanti isinya adalah pengaturan yang sama untuk setiap environment, tapi bedanya adalah dibagian debug, database, dan portnya

Akhirnya ke deployment! yey

Manual deployment

Sebenernya bisa aja deployment itu ga harus otomatis, jadi build imagenya akan dilakukan secara lokal. Nah commandnya:

docker build -t  . registry.docker.ppl.cs.ui.ac.id/pplb3/<nama-image>:latest
docker push registry.docker.ppl.cs.ui.ac.id/pplb3/<nama-image>:latest

Gitlab deployment

Tapi kalo mau supaya otomatis setiap kali nge-push di gitlab, maka kita perlu bikin .gitlab-ci.yml

Nah disitu ada bagian except untuk master dan sit_uat yang artinya deployment ini tidak akan dijalankan di branch master dan sit_uat. Dan dibagian script ini yang bakal membuat image dan di push ke portainer.

Wow pegel juga yah hehe.

Sekian

--

--