Docker, Portainer, dan Proses Deployment Aplikasi

Faraya Agatha
PsychoTeam
Published in
5 min readApr 16, 2019

Pada artikel kali ini, saya ingin membahas tentang bagaimana Docker bekerja dan bagaimana melakukan proses deployment ke Portainer.

docker logo

Docker

Apa itu docker? Docker adalah sebuah tool yang memungkinkan developers untuk men-deploy aplikasi mereka dengan mudah dengan cara menjalankan image yang sudah di-build dalam suatu container untuk dijalankan pada host suatu sistem operasi . Image? Image adalah paket perangkat lunak yang ringan, mandiri, dan executable yang mencakup kode, run time, system tools, system libraries dan settings yang diperlukan untuk menjalankan aplikasi. Container memungkinkan developers untuk mengemas aplikasi dengan semua bagian yang dibutuhkan, contoh seperti library dan dependency lainnya, dan mengirim semuanya sebagai satu paket (package).

Docker image dibuat dari tumpukkan read-only layers. Setiap layer merepresentasikan sebuah instruksi dalam image pada dockerfile. Kemudian, ketika kita membuat container baru, kita menambahkan sebuah writable layer baru di atas image layers. Layer ini disebut ‘container layer’. Layer ini memungkinkan kita untuk melakukan perubahan terhadap container seperti menulis file baru, modifikasi file, dan menghapus file.

Docker menyediakan dua pilihan agar container bisa menyimpan file dalam sebuah host machine, sehingga data tetap tersimpan meskipun container nya berhenti running. Salah satu pilihan tersebut adalah menggunakan volume. Volume disimpan dalam bagian dari host file system yang dikelola oleh Docker. Fungsi volume adalah untuk menjaga data tetap tersimpan ketika container dihapus, untuk share data antara host file system dan docker container, dan untuk share data dengan docker container lain.

Docker Setup

Sebelumnya saya akan menjelaskan tentang aplikasi kami, PsychoTip. Aplikasi kami terdiri dari 2 aplikasi yaitu aplikasi Client yang berbasis Android dan aplikasi Admin yang berbasis Django web. Karena itu, kami menggunakan 2 jenis docker image, yaitu back-end image dimana kami men-deploy aplikasi Django untuk Admin, dan front-end image dimana kami menyediakan link untuk mendownload aplikasi Android kami.

Berikut adalah langkah-langkah yang dilakukan dalam menggunakan docker pada aplikasi Psychotip:

1. Django project, requirements.txt, dan build.gradle

Langkah pertama yang dilakukan adalah membuat django project. Setelah berhasil membuat django project, kita perlu membuat requirements.txt. File ini berisi dependency yang dibutuhkan untuk mengetes dan menjalankan aplikasi. Sementara build.gradle berisi package yang dibutuhkan untuk aplikasi Android.

requirements.txt dari PsychoTip
dependencies untuk Android pada PsychoTip

2. Membuat Dockerfile dan build image

Dockerfile adalah file text berisi perintah-perintah yang akan dijalankan ketika melakukan build image. Dockerfile harus berada pada root project.

Dalam proyek kami, kami menggunakan 3 dockerfile. Satu dockerfile untuk build back-end image dan 2 dockerfile untuk build front-end image.

Back-end dockerfile menggunakan python:3.5-slim image. Code tersebut akan menginstall semua requirement yang dibutuhkan, kemudian menjalankan start.sh ketika docker image berjalan.

backend dockerfile dari PsychoTip

Penjelasan kode:

baris 1 : melakukan import image python 3.5-slim. slim merepresentasikan compressed file.

baris 2 : menjalankan perintah membuat directory bernama ‘code’

baris 3 : mengubah workdir saat ini menjadi directory ‘code’

baris 4 : menyalin file requirements.txt ke directory ‘code’

baris 5 : menjalankan perintah pip install -r requirements.txt

baris 6 : menyalin semua isi dari current directory (Psychotip_backend) ke directory ‘code’

baris 7 : menyalin file start.sh ke directory ‘code’

baris 8 : mengeset perintah untuk menjalankan start.sh ketika container dijalankan

start.sh

Frontend dockerfile menggunakan nginx:alpine untuk build image. Code di bawah melakukan copy terhadap APK yang sudah dibuat dan menyediakan link download untuk APK tersebut.

deployment dockerfile dari PsychoTip

Penjelasan kode:

baris 1 : melakukan import image nginx:alpine

baris 2 : menambahkan semua isi dari current directory (Psychotip) ke directory ‘application’

baris 3 : mengubah workdir saat ini menjadi directory ‘application’

baris 4 : menyalin default configuration nginx ke /etc/nginx/conf.d/default.conf

baris 5 : menyalin apk ke list staticfiles nginx

baris 6 : menyatakan port untuk container yang digunakan adalah port 80

production dockerfile dari PsychoTip

Setiap instruksi pada Dockerfile diatas ketika djalankan maka image akan terbuat.

Manual Deployment

Selain melakukan secara otomatis, build image dapat juga dilakukan secara manual dijalankan di local. berikut adalah command yang dibutuhkan untuk build image dan menaruhnya di Portainer:

build image : $docker build -t <yout-image> , contoh : docker build -t registry.docker.ppl.cs.ui.ac.id/pplb5/staging_psychotip:latest .

jalankan $docker images untuk mengecek image yang baru dibuat tadi. Command ini menampilkan daftar image yang dimiliki.

push image : $docker push <your dockerhub username>/<repository> , contoh : docker push registry.docker.ppl.cs.ui.ac.id/pplb5/staging_psychotip:latest

Automated Deployment

Untuk men-deploy aplikasi secara otomatis setiap kali melakukan push, maka bisa dilakukan dengan mengatur file .gitlab-ci.yml sebagai berikut:

.gitlab-ci.yml dari PsychoTip
.gitlab-ci.yml dari PsychoTip

Portainer

Setelah kita melakukan push image ke registry, kita akan men-deploy image tersebut. Deploy dilakukan menggunakan Portainer. Secara singkat, Portainer adalah sebuah UI manajemen yang memungkinkan kita untuk mengelola Docker host dengan mudah. Berikut adalah langkah-langkah menggunakan Portainer:

Melakukan pull image

Setelah masuk menggunakan akun Portainer, pilih menu Images, lalu pada bagian pull image masukkan nama image yang sudah di push ke registry sebelumnya dan mengisi field registry dengan nama registry yang digunakan.

Membuat container

Setelah melakukan pull image, kita perlu membuat container dimana image akan di-deploy. Pertama, isi nama container. Kedua, pilih image yang ingin di deploy. Ketiga, mengatur port mapping dengan mengisi host sesuai port yang dimiliki kemudian mengisi container dengan port yang terdapat pada dockerfile (dalam hal ini: 80).

Setelah selesai, ketika membuka url sesuai port yang tadi ditentukan akan menampilkan link download aplikasi.

tampilan ketika membuka url

Sekian penjelasan singkat saya mengenai proses deployment, untuk lebih lengkapnya mengenai docker dan portainer bisa dipelajari melalui link referensi di bawah. Terima kasih.

Referensi:

--

--