Multi Image Pada Docker

Dalam mengembangkan aplikasi, sering kali kita tidak hanya membuat satu image, tetapi beberapa image. Multi Image pada Docker adalah pembagian layanan aplikasi yang berjalan pada image yang berbeda.

Contohnya, dengan penerapan konsep MVC, ada satu image yang digunakan untuk database, satu image untuk aplikasi backend dan satu image untuk aplikasi frontend. Sesi berikut akan menjelaskan bagaimana membangun multi-image yang menangani berbagai layanan yang terpisah dari sebuah aplikasi.

Pengenalan Multi Image pada Docker
  1. Sebagai contoh pada sesi ini, akan digunakan aplikasi SF Food Trucks yang tersedia pada github dengan url: http://github.com/prakhar1989/FoodTrucks
  2. Langkah pertama adalah mendownload atau melakukan clone dari link github di atas.
  3. Aplikasi FoodTrucks menggunakan Bahasa Python dengan library flask-app dan ElasticSearch sebagai database.
  4. Aplikasi ini kemudian akan memiliki dua image, yaitu image untuk aplikasi FoodTrucks dan image untuk ElasticSearch.
  5. Pada terminal, jalankan instruksi berikut untuk mem-pull image ElasticSearch dari docker hub.
    • docker pull docker.elastic.co/elasticsearch/elasticsearch:6.3.2
  6. Lalu jalankan dalam mode development dengan memberikan spesifikasi port dan variable environment yang mengindikasikan Elasticsearch cluster berjalan pada satu node tunggal.
    • docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.3.2
  7. Saat docker run dijalankan, terminal akan menampilkan keluaran seperti pada gambar berikut:Multi Image Pada Docker
  8. Pada perintah di atas, image di jalankan dengan diberi nama es sesuai dengan option --name es. Hal ini untuk memudahkan penggunaan pada instruksi-instruksi berikutnya.
  9. Contohnya melihat log dari image Elasticsearch seperti pada gambar berikut:Multi Image Pada Docker
  10. Untuk memvalidasi apakah image Elasticsearch telah berjalan dengan baik, gunakan browser untuk mengakses url: http://localhost:9200 seperti pada gambar berikut:Multi Image Pada Docker
  11. Berikutnya adalah membuat image untuk layanan flask-app.
  12. Pada folder flask-app, telah tersedia file Dockerfile yang menjabarkan langkah-langkah pembuatan docker image.
  13. Selanjutnya jalankan instruksi berikut untuk membuat image dari aplikasi flask-app.
    • docker build –t foodtrucks-web.
  14. Setelah image berhasil di buat, jalankan image yang baru dibuat dengan perintah berikut:
    • docker run –P --rm foodtrucks-web
  15. Keluaran dari perintah di atas adalah sebagai berikut:Multi Image Pada Docker
  16. 16. Hal ini menandakan bahwa aplikasi flask-app belum dapat mengakses image Elasticsearch. Hal ini disebabkan karena image flask-app tidak dapat mengakses IP dari layanan Elasticsearch yang benar.
  17. Hal ini dapat diatas dengan memahami konsep networking pada Docker.

Konsep Networking pada Docker
  1. Saat docker diinstall, instalasi ini akan membuat tiga jenis networking secara otomatis.
  2. Untuk melihat jenis networking docker, jalankan instruksi docker network ls seperti pada gambar berikut:Multi Image Pada Docker
  3. Network bridge adalah network default pada setiap docker image yang dijalankan. Untuk memvalidasi setting ini, jalankan instruksi untuk melakukan inspeksi pada jaringan bridge.
    • docker network inspect bridge
  4. Perintah sebelumnya akan menghasilkan keluaran seperti pada gambar berikut:
  5. Dari gambar, dapat dilihat bahwa image es telah terpasang di dalam jaringan bridge dengan IP: 172.17.0.2Multi Image Pada Docker
  6. Untuk menguji akses ke IP image ES, masuk ke dalam environment bash dari aplikasih foodtrucks-web dengan instruksi seperti gambar berikut:Multi Image Pada Docker
  7. Dari gambar terlihat bahwa aplikasi foodtrucks-web dapat mengakses layanan ES dengan IP yang tertera di jaringan bridge.
  8. Namun hal ini memiliki beberapa kendala:
    • Bagaimana agar aplikasi foodstrucks-web dapat mengenali ES sebagai hostname dengan IP 172.17.0.2 (atau IP yang lain karena ada kemungkinan berubah)?
    • Bagaimana cara melakukan isolasi jaringan? karena jaringan bridge akan membagi jaringan dengan image yang lain yang artinya menjadi tidak isolate dan aman.
  9. Untuk mengatasi dua masalah di atas, docker mengenalkan instruksi docker network untuk membuat jaringan yang terisolasi.
  10. Instruksi docker network dapat digunakan untuk membuat sebuah jaringan baru yang hanya dapat berisi image yang ditentukan oleh user.
    • Instruksi untuk membuat jaringan yang baru: docker network create <nama_jaringan>
    • Contoh: docker network create foodtrucks-net
  11. Setelah instruksi di jalankan, validasi pembuatan jaringan baru dengan perintah docker network ls.Multi Image Pada Docker
  12. Pada daftar jaringan, akan terdapat nama jaringan foodtrucks-net yang baru saja dibuat.
  13. Setelah network berhasil dibuat, selanjutnya adalah menambahkan image ke dalam jaringan tersebut.
  14. Untuk menambah image ke dalam jaringan foodtrucks-net, stop dulu image yang sedang berjalan dengan instruksi berikut:Multi Image Pada Docker
  15. Kemudian jalankan kembali image Elasticsear dengan tambahan option –net foodtrucks-net pada instruksi docker run.
    • Contoh: docker run -d --name es --net foodtrucks-net -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.3.2
    • Lalu jalankan perintah docker network inspect foodtrucks-net untuk memvalidasi bahwa image ES telah terpasa pada jaringan foodtrucks-net.
  16. Keluaran dari instruksi docker network inspect akan seperti pada gambar di sampin.Multi Image Pada Docker
  17. Selanjutnya jalankan perintah docker run -P --rm -p 5000:5000 --net foodtrucks-net foodtrucks-web untuk menjalankan image foodtrucks-web di dalam jaringan foodtrucks-net.
  18. Keluarannya seperti pada gambar berikut:
    Multi Image Pada Docker
  19. Pada gambar menunjukkan aplikasi foodtrucks-web telah berhasil berkomunikasi dengan layanan Elasticsearch karena sama-sama berada di dalam jaringan foodtrucks-net.
    Multi Image Pada Docker
  20. Selanjutnya, untuk menguji layanan foodtrucks-web, jalankan browser dan akses url: http://localhost:5000 seperti pada gambar berikut:Multi Image Pada Docker
  21. Docker menyediakan tools yang memudahkan menjalankan multi-image docker.
  22. Salah satunya adalah docker-compose.
  23. File konfigurasi yang akan digunakan oleh docker-compose adalah file dengan extension .yml
    • Pada contoh proyek ini, file konfigurasi diberi nama docker-compose.yml
    • Selanjutnya pada folder proyek, jalankan instruksi docker-compose up seperti pada gambar pada slide berikut.
Multi Image Pada Docker