Pada artikel Belajar Vagrant, penulis sudah menulis sedikit mengenai tool - tool yang mempermudah kita dalam development sebuah aplikasi. Salah satu tool tersebut adalah vagrant, pada artikel sebelumnya penulis telah membahas mengenai berbagai masalah yang terjadi pada saat development sebuah aplikasi. Pada artikel ini, penulis akan mencoba membahas mengenai teknologi baru yang patut dicoba karena teknologi ini merupakan salah satu teknologi yang akan digunakan pada masa depan :D, teknologi itu adalah docker.
Apa Itu Docker ?
Docker adalah sebuah project open source yang ditujukan untuk developer atau sysadmin untuk membangun, mengemas dan menjalankan aplikasi dimana pun di dalam sebuah container.
Mungkin anda sedikit bingung dengan pengertian diatas dikarenakan terlalu sulit untuk membayangkan bagaimana pengembangan aplikasi yang sebenarnya. Docker berfungsi sebagai virtualisasi sebuah sistem operasi atau sebuah server atau sebuah web server atau bahkan sebuah database server, dimana dengan menggunakan virtualisasi ini, diharapkan developer dapat mengembangkan aplikasi sesuai dengan spesifikasi server atau dengan kata lain, jika kita mengembangkan sebuah aplikasi lalu kita jalankan pada komputer kita sendiri maka secara otomatis aplikasi akan berjalan dengan baik, nah bagaimana jika server yang akan menjalankan aplikasi kita memiliki banyak perbedaan dengan komputer kita seperti perbedaan sistem operasi, arsitektur processor dan sebagainya. Dengan menggunakan virtualisasi ini maka para developer lebih mudah untuk mengatur mengenai deployment atau menjalankan aplikasi di server production.
Sebelum kita membahas mengenai docker lebih lanjut, kita akan mencoba membahas sedikit mengenai docker dan vagrant. Docker dan vagrant merupakan tool yang sama atau dapat dikatakan merupakan tool developer yang mempunyai fungsi yang sama, akan tetapi meski memiliki fungsi yang sama terdapat beberapa perbedaan sehingga kita perlu menentukan tool yang terbaik untuk melakukan development sebuah aplikasi. Beberapa perbedaan dapat dilihat melalui tabel berikut.
gambar diatas dapat anda lihat disini. Dari gambar dapat dilihat bahwa terdapat banyak sekali perbedaan antara docker dan vagrant. Perbedaan yang sangat mencolok adalah docker menggunakan resource atau memory yang lebih sedikit ketimbang vagrant, ini dapat dilihat dari penggunaaan RAM, penggunaan images sistem operasi dan juga dapat dilihat perbedaannya, jika menggunakan vagrant maka kita wajib melakukan instalasi virtual machine seperti virtual box atau vmware, berbeda dengan docker menggunakan linux container sehingga kita tidak perlu melakukan instalasi virtual machine.
Arsitektur Docker
Gambar diatas merupakan arsitektur docker, dimana docker terdiri dari beberapa element yaitu docker client, docker daemon, docker container, docker images dan docker registry. Docker menggunakan teknologi client server untuk menghubungkan antara docker client dan docker daemon. Penulis akan menjelaskan sedikit mengenai istilah - istilah penting pada docker.
Docker Daemon
Docker daemon berfungsi untuk membangun, mendistribusikan dan menjalankan container docker. User tidak dapat langsung menggunakan docker daemon, akan tetapi untuk menggunakan docker daemon maka user menggunakan docker client sebagai perantara atau cli.
Docker Images
Docker images adalah sebuah template yang bersifat read only. Template ini sebenarnya adalah sebuah OS atau OS yang telah diinstall berbagai aplikasi. Docker images berfungsi untuk membuat docker container, dengan hanya 1 docker images kita dapat membuat banyak docker container.
Docker Container
Docker container bisa dikatakan sebagai sebuah folder, dimana docker container ini dibuat dengan menggunakan docker daemon. Setiap docker container disimpan maka akan terbentuk layer baru tepat diatas docker images atau base image diatasnya. Contohnya misalkan kita menggunakan image ubuntu, kemudian kita membuat sebuah container dari image ubuntu tersebut dengan nama ubuntuku, kemudian kita lakukan instalasi sebuah software misalnya nginx maka secara otomatis container ubuntuku akan berada diatas layer image atau base image ubuntu. Anda dapat membuat banyak docker container dari 1 docker images. Docker container ini nantinya dapat dibuild sehingga akan menghasilkan sebuah docker images, dan docker images yang dihasilkan dari docker container ini dapat kita gunakan kembali untuk membuat docker container yang baru.
Docker Registry
Docker registry adalah kumpulan docker image yang bersifat private maupun public yang dapat anda akses di docker hub. Dengan menggunakan docker registry, anda dapat menggunakan docker image yang telah dibuat oleh developer yang lain, sehingga mempermudahkan kita dalam pengembangan aplikasi.
Instalasi Docker
Untuk melakukan instalasi docker, silahkan update terlebih dahulu repository ubuntu anda dengan perintah.
Kemudian lakukan update CA certificates dengan perintah.
Kemudian tambahkan GPG key dengan perintah.
Lalu silahkan lakukan verifikasi fingerprint dengan perintah
Jika berhasil maka akan muncul output seperti berikut
Lalu tambahan repo docker seperti berikut
Kemudian silahkan lakukan update kembali dengan perintah.
Kemudian silahkan hapus docker yang lama jika anda pernah melakukan instalasi docker versi lama dengan perintah.
Lalu silahkan jalankan perintah berikut untuk melakukan instalasi docker.
lalu lakukan pengecekan status service docker dengan perintah.
jika berhasil maka akan muncul output seperti berikut.
Agar kita dapat menggunakan docker tanpa sudo maka kita harus melakukan beberapa konfigurasi. Silahkan buat docker group dengan perintah berikut.
kemudian tambahkan user ke docker group dengan perintah.
silahkan ganti rizki
dengan user linux anda. Lalu silahkan restart komputer anda. Kita akan melakukan test docker dengan perintah.
Jika berhasil maka anda akan melihat output seperti gambar berikut.
Instalasi Docker Compose
Setelah melakukan instalasi docker engine atau core docker, langkah selanjutnya kita akan melakukan instalasi docker compose, apa itu docker compose ?
Docker compose berfungsi untuk menjalankan container docker secara bersamaan.
docker compose ini sangat berguna ketika aplikasi kita terpisah - pisah pada komputer yang berbeda, contohnya adalah aplikasi yang dibuat berada pada 1 container sedangkan database yang akan digunakan oleh aplikasi tersebut berada pada container yang lain. Ketika menggunakan docker compose maka kita dapat menjalankan kedua container tersebut secara bersamaan dan bahkan kita dapat melakukan link ke container yang kita inginkan.
Untuk melakukan instalasi docker compose silahkan jalankan perintah berikut untuk melakukan akses root.
kemudian jalankan perintah berikut.
Setelah selesai lalu beri hak akses eksekusi dengan perintah.
Lalu agar docker compose dapat diakses tanpa root, silahkan jalankan perintah berikut.
Kemudian lakukan pengecekan docker compose dengan perintah
Jika berhasil maka akan muncul output seperti berikut.
Latihan Sails JS dengan Docker
Untuk mempercepat latihan, kita akan mencoba menggunakan Sails JS, apa itu Sails JS ?
Sails JS adalah salah satu framework mvc untuk node js.
Sails JS merupakan framework yang dikembangkan dari framework express js, dengan menggunakan scaffolding dari Sails JS maka Sails JS akan secara otomatis membuat project tanpa perlu membuat project dari awal. Sails JS telah menggunakan salah satu framework orm node js yaitu waterline sehingga mempermudah kita untuk melakukan migrasi antar database. Dan salah satu keunggulan dari Sails JS adalah mudahnya membuat API dengan menggunakan arsitektur REST.
Pada artikel ini, kita hanya akan membuat sebuah REST API dengan menggunakan Sails JS, dimana kita akan menggunakan database mariadb. Antara aplikasi dan database akan dibuatkan dua container yang berbeda, berikut adalah gambar arsitektur yang akan kita gunakan.
Setelah mengetahui arsitektur yang akan kita gunakan, hal yang pertama kali kita lakukan sekarang adalah melakukan instalasi Sails JS
pada pc kita terlebih dahulu, karena Sails JS merupakan framework node js maka kita membutuhkan instalasi node js, bagi anda yang belum melakukan instalasi node js, silahkan lihat artikel instalasi perlengkapan coding node js . Untuk melakukan instalasi Sails JS silahkan jalankan perintah berikut.
Setelah selesai, kita akan membuat sebuah project dengan perintah.
Jika sudah, maka sails akan secara otomatis membuat sebuah project dengan nama Belajar-Docker-SailsJS
. Kemudian silahkan buka dengan editor anda. Berikut adalah struktur folder projectnya.
Secara default, Sails JS menggunakan database local atau embedded database, karena kita ingin menggunakan database mariadb maka kita perlu melakukan instalasi module sails-mysql
dengan perintah.
Kemudian silahkan buka file connections.js
yang ada di dalam folder config
lalu kita akan melakukan konfigurasi untuk koneksi ke database mariadb pada bagian berikut.
Karena kita belum mengetahui variabel apa saja yang dapat kita gunakan untuk melakukan koneksi database ke mariadb maka kita terlebih dahulu akan melakukan testing membuat container baru untuk mengetahui variabel environment dari database mariadb. Untuk membuat sebuah container silahkan jalankan perintah berikut.
Perintah diatas berfungsi untuk membuat sebuah container baru dengan nama latihan-container-mariadb
, dimana container ini kita buat berdasarkan image mariadb
dengan versi 10.1.16
dan pada saat pembuatan container ini, kita dapat melakukan set environment seperti database, password user dan lain sebagainya. Jika anda belum memiliki image mariadb maka secara otomatis, docker akan melakukan pull images mariadb yang berasal dari docker hub.
Jika telah berhasil, silahkan lakukan pengecekan docker image dengan perintah.
Jika berhasil maka akan muncul output seperti berikut.
kemudian lakukan pengecekan container dengan perintah.
Jika berhasil maka akan muncul output seperti berikut.
Anda juga dapat mengecek container mana saja yang sedang jalan dengan menggunakan perintah.
Langkah selanjutnya kita akan membuat sebuah container untuk aplikasi, dimana nantinya aplikasi ini akan melakukan koneksi ke mariadb yang berada pada container sebelumnya. Silahkan jalankan perintah berikut untuk membuat container aplikasi.
Perintah diatas berfungsi untuk membuat container dengan nama latihan-container-aplikasi
, dimana container ini melakukan link ke container latihan-container-mariadb
, container ini menggunakan image node:6.3.1
. Setelah jalan, maka anda dapat melakukan akses container melalui terminal anda, lalu silahkan lakukan pengecekan environment mariadb dengan perintah.
Jika berhasil maka akan muncul output seperti berikut.
Setelah mengetahui variabel environment nya, kita balik lagi ke aplikasinya. Silahkan ubah codingan yang ada di dalam file connections.js
seperti berikut.
Selanjutnya silahkan buka file models.js
di dalam folder config
lalu ubah codingannya menjadi seperti berikut.
Setelah selesai melakukan semua konfigurasi tersebut, langkah selanjutnya adalah kita akan mencoba membuat API, untuk membuat API dengan menggunakan sails, silahkan jalankan perintah berikut.
maka secara otomatis sails akan membuat controller dan model, silahkan buka file Barang.js
di dalam folder models
kemudian ubah codingannya menjadi seperti berikut.
Codingan diatas tidak akan penulis bahas dikarenkan nanti akan penulis jelaskan pada artikel berikutnya :). Langkah selanjutnya silahkan buat sebuah file Dockerfile
di dalam root folder, kemudian isikan codingan seperti berikut.
Untuk dockerfile terdapat beberapa perintah yaitu.
- ADD : biasanya digunakan untuk melakukan copy file atau folder ke suatu direktory
- CMD : berfungsi untuk menjalankan sebuah perintah yang spesifik
- ENV : berfungsi untuk mendeklarasikan environment variabel
- FROM : berfungsi untuk mendeklarasikan base image yang akan digunakan.
- WORKDIR : berfungsi untuk mendefinisikan folder yang akan kita gunakan.
- MAINTAINER : berfungsi untuk mendeklarasikan nama author
- RUN : berfungsi untuk menjalankan perintah - perintah bash
Nah dari perintah - perintah diatas, penulis akan mendefinisikan arti dari codingan diatas.
- baris 1 : berfungsi untuk mendeklarasikan bahwa kita menggunakan image node dengan versi 6.3.1
- baris 2 : berfungsi untuk melakukan update dan instalasi software wget
- baris 3 : berfungsi untuk mendeklarasikan environment dockerize
- baris 4 : berfungsi untuk menjalankan perintah wget
- baris 5 : berfungsi untuk melakukan instalasi sails
- baris 6 : berfungsi untuk membuat folder/direktory untuk project
- baris 7 : berfungsi untuk mendefiniskan folder yang akan kita gunakan
- baris 8 : berfungsi untuk mengcopy seluruh file ke dalam folder
belajar-sailsjs-docker
- baris 9 : berfungsi untuk menghapus folder
node_modules
- baris 19 : berfungsi untuk melakukan instal dependency yang diperlukan oleh project
Karena kita tidak ingin file - file node_modules
, .tmp
dicopy ke docker maka kita perlu membuat file dockerignore
. Silahkan buat sebuah file .dockerignore
lalu isikan codingan seperti berikut.
Setelah selesai, langkah selanjutnya kita akan membuat konfigurasi docker-compose, untuk membuat konfigurasi docker-compose silahkan buat sebuah file docker-compose.yml
pada root project lalu isikan dengan codingan berikut.
Bisa dilihat bahwa kita menggunakan konfigurasi docker compose versi 1, di dalam konfigurasi tersebut terdapat dua service/container yang akan dijalankan yaitu mariadb dan belajar-sailsjs-docker. Container belajar-sailsjs-docker mempunyai link terhadap container mariadb, sehingga container mariadb wajib dijalankan terlebih dahulu. Agar container mariadb dapat dijalankan terlebih dahulu maka kita dapat menggunakan dockeriza, aplikasi sails harus dijalankan dengan perintah sails lift
maka di dalam command kita menggunakan perintah sails lift
. Pada codingan diatas kita menggunakan perintah sh ./install.sh
karena kita membutuhkan beberapa command bash, maka silahkan anda buat sebuah file install.sh
di dalam root project, lalu masukkan codingan seperti berikut.
Setelah selesai, langkah selanjutnya kita akan melakukan build image terlebih dahulu dengan perintah.
perintah diatas akan membuat sebuah image dengan nama rizki.mufrizal/belajar-docker-sailsjs
dimana image ini dibuild berdasarkan konfigurasi dari file Dockerfile
. Lalu selanjutnya kita akan menjalankan 2 container secara sekaligus dengan menggunakan docker compose, silahkan jalankan perintah berikut.
Silahkan tunggu hingga aplikasi berjalan, jika berhasil maka akan muncul output seperti berikut.
NOTE : jika masih terdapat error pada saat docker compose dijalankan, silahkan matikan kedua container tersebut dengan perintah
ctrl + c
kemudian jalankan kembali docker tersebut, hal ini disebabkan karena konfigurasi mariadb pada saat pertama kali dijalankan memerlukan waktu yang lebih lama dibandingkan dengan start up aplikasi sails.
Menghapus Image Dan Container
Jika anda tidak memerlukan lagi docker image, anda dapat menghapusnya berdasarkan ID image, misalnya penulis menjalankan perintah.
Jika berhasil maka akan muncul output seperti berikut.
untuk menghapus image tersebut, anda dapat menggunakan perintah.
untuk menghapus seluruh image, anda dapat menggunakan perintah.
Untuk container juga sama, hanya saja container menggunakan sintak yang berbeda, jika image menggunakan perintah rmi
maka container menggunakan perintah rm
, akan tetapi jika container masih aktif maka anda perlu mematikan container terlebih dahulu dengan perintah stop. Comtohnya jika penulis menjalankan perintah.
maka akan muncul output
anda dapat mematikannya dengan perintah.
lalu menghapus container tersebut dengan perintah
untuk mematikan seluruh container, anda dapat menggunakan perintah.
untuk menghapus seluruh container, anda dapat menggunakan perintah.
Uji Coba Aplikasi
Setelah panjang nulis artikel, akhirnya kita dapat melakukan uji coba :D. Untuk melakukan uji coba aplikasi, silahkan akses http://localhost:1337
pada browser anda, jika berhasil maka akan muncul output seperti gambar berikut.
Ini artinya, aplikasi yang telah kita buat telah berjalan dengan baik. Langkah selanjutnya kita akan melakukan uji coba REST API nya, silahkan buka postman, lalu konfigurasikan seperti berikut.
Lalu tekan tombol send, maka data akan tersimpan, untuk mengetahui apakah data telah disimpan atau tidak silahkan akses http://localhost:1337/barang
pada browser anda, jika berhasil maka akan muncul output seperti gambar berikut.
Bagi anda yang ingin melihat contoh project docker yang lain, silahkan lihat di Belajar Docker. Sekian artikel mengenai belajar docker dan terima kasih :)