Fundamental Docker #1 - Mengenal Teknologi Docker


Selamat datang di artikel fundamental Docker. Ini adalah artikel pertama, sebelum kita mempelajari lebih detail mengenai konsep dan implementasinya. Dimulai dengan mengenal teknologi Docker Container.









Artikel ini terdiri dari beberapa bagian atau capter, diantaranya:





  • Fundamental Docker #1 - Mengenal Teknologi Docker
  • Fundamental Docker #2 - Instalasi Docker Pada Ubuntu
  • Fundamental Docker #3 - Berinteraksi Dengan Docker Image
  • Fundamental Docker #4 - Memanfaatkan DockerHub Sebagai Tempat Menyimpan Docker Image
  • Fundamental Docker #5 - Manajemen Docker Image Dan Kontainer
  • Fundamental Docker #6 - Dockerfile, Konfigurasi Untuk Membangun Docker Image
  • Fundamental Docker #7 - Penggunaan dan Pemanfaatan Volume
  • Fundamental Docker #8 - Dasar-Dasar Jaringan Pada Docker Kontainer
  • Fundamental Docker #9 - Jalankan Proyek Anda Dengan Kontainer Docker (Studi Kasus WordPress)
  • Fundamental Docker #10 - Mengenal Docker Compose
  • Fundamental Docker #11 - Jalakan Proyek Anda Dengan Docker Compose (Studi Kasus WordPress)




Seperti yang saya kutip dari slide presentasi workshop Docker yang diadakan oleh Inixindo Surabaya, Docker merupakan layanan berbasis kontainer dengan kata kunci; pengembangan, pengiriman dan dapat dijalankan dimana saja. Ide utamanya adalah agar pengembang (developer) dengan mudah membangun aplikasi, menyimpannya ke dalam kontainer dan akhirnya dapat didistribusikan dan digunakan di mana saja.





Kontainer yang dibahas disini tidak seperti kontainer-kontainer pada umumnya. Bukan seperti kontainer yang ada di pelabuhan atau yang diangkut kapal, hanya saja ide implementasinya sama.





Analoginya begini, kontainer itu seperti peti kemas yang mengemas beberapa barang. Nah, kode dan dependensinya bisa dianalogikan sebagai barang yang dikemas didalam kontainer atau peti kemas. Sedangkan Docker bisa dianalogikan sebagai kapal yang mengangkut peti kemas.





Docker ditulis dengan bahasa pemrograman Go (golang) dan tersedia dibawah lisensi Apache 2.0.





Cara Kerja Docker Secara Umum





Taukah Anda kalau Docker termasuk dalam salah satu layanan virtualisasi? Dan kenapa layanan Docker disebut sebagai layanan virtualisasi? Berikut penjelasannya dan sistem kerjanya.





Menurut Andi Mann, virtualisasi adalah teknik untuk menyembunyikan karakteristik fisik dari sumber daya komputer dari bagaimana cara sistem lain, aplikasi dan pengguna berinteraksi dengan sumber daya tersebut. [1]





Virtualisasi sendiri terdiri dari beberapa level, diantaranya adalah level perangkat keras, level sistem operasi dan level aplikasi. [2]





Virtualisasi level perangkat keras adalah level virtualisasi yang setiap konfigurasinya benar-benar mengena ke sumber daya perangkat keras. Contohnya adalah penggunaan prosesor, RAM, dan media penyimpanan. Virtualisasi level ini dibagi menjadi dua macam, yaitu Full Virtualization dan Bare Metal Virtualization.





  • Full virtualization adalah aplikasi virtualisasi yang dijalankan di atas sistem operasi yang sedang berjalan. Contohnya VirtualBox, VMware Workstation, QEMU, dan lain-lain.
  • Bare Metal Virtualization merupakan jenis virtualisasi yang tidak ada host sistem operasi yang dijalankan, dengan kata lain, sistem operasinya adalah aplikasi virtual itu sendiri, sehingga seluruh sumber daya host dikendalikan oleh aplikasi tersebut. Contohnya Proxmox, Microsoft HyperV, dan lain-lain.




Virtualisasi level sistem operasi merupakan virtualisasi yang sering disebut sebagai sistem operasi kontainer. Dimana aplikasi virtualisasi ini menggunakan kernel yang sedang digunakan oleh host. Contohnya LXC (Linux Container).





Virtualisasi level aplikasi merupakan virtualisasi yang sering disebut sebagai aplikasi kontainer, lawan kata dari sistem operasi kontainer. Jika pada sistem operasi kontainer aplikasi virtual mengambil kernel dari sistem operasi yang digunakan, maka aplikasi kontainer hanya mengambil sebuah aplikasi beserta pustaka, konfigurasi dan beberapa hal yang dibutuhkan. Contohnya Docker.





Docker menyediakan kemampuan untuk mengemas dan menjalankan aplikasi dalam lingkungan yang terisolasi yang disebut kontainer. Dengan isolasi dan keamanan yang ditawarkan, Anda dapat menjalankan banyak kontainer sekaligus secara bersamaan pada host. Kontainer ringan karena tidak membutuhkan beban ekstra dari hypervisor, tetapi berjalan langsung di dalam kernel mesin host. Alhasil, Anda dapat menjalankan lebih banyak kontainer pada kombinasi perangkat keras yang ada daripada jika menggunakan mesin virtual.





Docker Engine





Docker engine adalah model aplikasi client-server yang mana didalamnya termasuk server, REST API, dan baris perintah klien.





Struktur Docker Engine. docs.docker.com




Server Docker merupakan jenis program yang disebut proses daemon (sebuah proses yang berjalan di latar belakang; dockerd).





REST API adalah bagian yang menentukan antar muka yang dapat digunakan oleh program untuk berbicara dengan daemon dan memberi instruksi apa yang akan dilakukannya.





Sedangkan klien Docker adalah baris perintah yang dieksekusi oleh pengguna (perintah docker).





Artinya, saat pengguna mengetikkan baris perintah docker dan mengeksekusinya, REST API merenspon apa perintah yang baru saja dieksekusi oleh pengguna dan memberi instruksi langsung kepada server Docker (dockerd) untuk mengolah apa yang pengguna harapkan, setelah perintah tersebut diproses oleh server Docker, REST API akan menampilkan hasilnya kepada pengguna.





Lalu, apa saja hal-hal yang dapat dilakukan oleh daemon Docker (dockerd) saat mendapatkan instruksi dari REST API?





Adapun hal-hal yang dapat dilakukan daemon Docker diantaranya membuat dan mengelola objek-objek Docker, seperti image, kontainer, jaringan dan volume.





Arsitektur Docker





Docker menggunakan arsitektur client-server. Docker klien berkomunikasi dengan Docker daemon. Docker daemon inilah yang nantinya bertugas membangun, menjalankan dan mendistribusikan kontainer Docker.





Klien dan daemon Docker dapat berjalan pada satu sistem yang sama. Anda juga dapat menghubungkan klien Docker ke daemon Docker yang ada dilain sistem atau sistem jarak jauh (remote). Klien dan daemon Docker berkomunikasi menggunakan REST API melaui soket UNIX atau antar muka jaringan.





Arsitektur Docker. docs.docker.com




Gambar ilustrasi arsitektur Docker di atas menjelaskan alur kerja dari Docker. Dimulai dari pengguna mengetikkan baris perintah Docker (klien Docker) oleh pengguna. Baris perintah yang dieksekusi tersebut membuat REST API (Docker API) tergerak untuk membuat instruksi ke daemon Docker. Daemon Docker akan menjalankan instruksi yang didapat dari Docker API dan menampilkan hasilnya ke pengguna.





Klien Docker (baris perintah docker) adalah cara utama pengguna berinteraksi dengan Docker. Saat menggunakan baris perintah, seperti docker run, klien Docker mengirim perintah tersebut ke daemon Docker. Perintah docker menggunakan Docker API (REST API).





Daemon Docker daemon (dockerd) mendengarkan permintaan dari Docker API (yang dikirim oleh klien Docker) dan bertanggung jawab untuk mengelola objek-objek Docker, seperti image, kontainer, volume dan jaringan.





Registri Docker merupakan tempat penyimpanan image Docker yang populer disebut Docker Hub. Docker Hub adalah registri publik yang dapat digunakan oleh siapa saja. Docker telah terkonfigurasi secara baku untuk mencari dan mengunduh image dari Docker Hub.





Objek-Objek Docker





Pada saat menggunakan Docker, kita pasti akan melakukan beberapa hal, seperti membuat dan menggunakan image, kontainer, jaringan, volume, plugin, dan objek lainnya. Berikut ini gambaran singkat beberapa objek tersebut.





Docker image adalah templat hanya-baca dengan instruksi untuk membuat Docker container. Docker image dibangun dari serangkaian lapisan, setiap lapisan mewakili instruksi di Dockerfile.





Docker container adalah kemasan standar untuk perangkat lunak dan dependensinya. Kontainer mengisolasi suatu aplikasi dengan aplikasi yang lain. Kontainer berbasi kernel sistem operasi, itulah kenapa teknologi kontainer juga termasuk dalam kategori virtualisasi dan bekerja disemua platform sistem operasi, seperti Linux, MacOS dan Windows.





Edisi Docker





Docker, sebagai perangkat lunak bebas, tersedia dalam dua edisi, edisi komunitas (Docker CE) dan edisi enterprise (Docker EE). Apa keunggulan masing-masing edisinya? Berikut penjabarannya.





Docker CE (Community Edition) adalah edisi yang ideal untuk pengembang individu dan tim kecil yang ingin memulai dengan Docker dan bereksperimen dengan aplikasi berbasis kontainer.





Docker EE (Enterprise Edition) adalah edisi yang dirancang untuk pengembangan perusahaan dan tim TI yang membangun, mengirim, dan menjalankan aplikasi bisnis penting dalam produksi pada skala besar.





Tabel perbedaan edisi Docker




Jadi, mana edisi yang harusnya kita gunakan sekarang? Tentu Anda sudah dapat menebaknya bukan.





Perbandingan Container dengan Virtual Machine





Kontainer dan mesin virtual memiliki manfaat isolasi dan alokasi sumber daya yang serupa, tetapi memiliki fungsi yang berbeda karena kontainer mengvirtualisasikan sistem operasi alih-alih perangkat keras.





Skema Aplikasi Berbasis Kontainer Pada Host. www.docker.com/resources/what-container




Kontainer adalah abstraksi pada lapisan aplikasi yang mengemas kode dan dependensi secara bersamaan. Beberapa kontainer dapat berjalan di mesin yang sama dan berbagi kernel OS dengan kontainer lain, masing-masing kontainer berjalan sebagai proses yang terisolasi di ruang pengguna. Kontainer mengambil ruang lebih sedikit daripada VM, dapat menangani lebih banyak aplikasi dan membutuhkan lebih sedikit VM dan sistem operasi.





Skema Aplikasi Berbasis VM. www.docker.com/resources/what-container




Mesin virtual (VM) adalah abstraksi perangkat keras fisik yang mengubah satu server menjadi banyak server. Hypervisor memungkinkan beberapa VM dijalankan pada satu mesin. Setiap VM mencakup salinan lengkap dari sistem operasi, aplikasi, binari dan perpustakaan yang diperlukan - mengambil puluhan GB. VM juga bisa lambat untuk boot.





Dari kedua skema di atas dapat diambil kesimpulan bahwa skema aplikasi yang dijalankan berbasis kontainer cenderung lebih ringan dan fleksibel, ditambah lagi bisa menjalankan banyak kontainer sekaligus. Untuk skema aplikasi yang dijalankan berbasis mesin virtual, tampaknya harus memperhitungkan sumber daya perangkat keras yang ada untuk mendukung hypervisor memuat beberapa mesin virtual.





Glosarium





Hypervisor bisa juga disebut pemonitor mesin virtual, sebuah perangkat lunak atau firmware atau perangkat keras yang berfungsi untuk menciptakan dan menjalankan mesin virtual.





Daemon merupakan program yang berjalan di latar belakang sistem, bisa juga disebut service.





Sumber





Pusat Dokumentasi Docker, Tersedia daring di: https://docs.docker.com





[1] Andi Mann, Virtualization 101, Enterprise Management Associates (EMA), Tersedia daring di: http://www.etomicmail.com/files/dedicated_server/Virtualization%20101.pdf





[2] Samsul Ma'arif, Introduction to Docker Container, Tersedia daring di: https://speakerdeck.com/dotindonesia/introduction-to-docker-container-samsul-maarif-at-dilo-malang-12-march-2018


Komentar

Postingan populer dari blog ini

Daftar Rekomendasi Repositori Lokal Debian 11 "Bullseye"

Cara Memperbaiki Masalah "KVM virtualisation is configured, but not available" di Proxmox

Koneksi Internet Bermasalah di Ubuntu 18.04, Berikut Cara Memperbaikinya