Sejarah Singkat
Dulu biasanya suatu perushaan/organisasi langsung menjalankan aplikasi nya diatas 1 komputer, yap satu server hanya menjalankan satu aplikasi. Lalu seiring berkembangnya teknologi, resource hardware pun menjadi lebih besar, dan akan sayang jika satu server dengan spesifikasi yang besar digunakan hanya untuk satu aplikasi. Maka muncul lah unit dengan nama VM (Virtual Machine). Dalam virtual machine kita dapat membuat satu atau lebih komputer virtual diatas komputer asli kita, berpindahlah kebiasaan untuk menjalankan dengan satu komputer dibuat beberapa virtual machine untuk menjalankan beberapa aplikasi (adapun alasan lain karena arsitektur aplikasi mulai berkambang).
Lalu akhir-akhir ini mulai hype model pengembangan aplikasi dengan nama microservices, sesuai namanya pengembangan aplikasi microservice membagi aplikasi besar menjadi beberapa aplikasi-aplikasi kecil yang saling terhubung. Microservice diperkenalkan pada tahun 2011, tapi kurang hype pada saat itu karena bayangkan saja jika aplikasi-aplikasi kecil tersebut di jalankan dengan 1 virtual machine untuk 1 aplikasi kecil, maka akan memakan banyak resource.
Pada tahun 2014 muncul lah suatu teknologi yang sedang kita bahas ini, iya Docker. Docker mengangkat teknologi container, sebenarnya konsep container sudah ada sejak 1979 yaitu chroot. Kemunculan docker membuat orang-orang tertarik dengan teknologi container dikarenakan docker menyediakan interface yang memudahkan developer atau sysadmin untuk memanjemen container. Docker hingga saat ini masih kerap dipakai dalam deployment aplikasi dengan model microservice.
FYI, Perkembangan container tidak berhenti pada docker saja, saat ini sedang hype pula teknologi container orchestration, dimana kita diberikan banyak fitur untuk lebih mudah lagi dalam mememen container di beberapa host. Contoh product dari teknologi ini yaitu Kubernetes dan Docker Swarm.
Apa itu Docker?
Docker is a set of platform as a service (PaaS) products that use OS-level virtualization to deliver software in packages called containers.[4] The service has both free and premium tiers. The software that hosts the containers is called Docker Engine.[5] It was first started in 2013 and is developed by Docker, Inc.[6]
Di atas adalah pengertian docker dari wikipedia sangat lumayan panjang, mudahnya docker adalah suatu alat yang mempermudah kita dalam memanajemen container di suatu server/mesin. Lalu apa itu container?
Apa itu Container?
Sebelumnya kita membahas tentang bagaimana suatu aplikasi di deploy, salah satunya dengan Virtual Machine (VM). VM menjalankan software aplikasi di dalam Sistem Operasi guest yang berjalan pada hardware virtual di atas server asli.
Sebetulnya VM sudah bagus dalam menyediakan isolasi proses untuk software yang dijalankan. Namun isolasi ini harus dibayar mahal dikarenakan virtualisasinya dari level hardware, untuk menjalankan satu OS saja perlu memakan resource yang lumayan, belum lagi alokasi resource untuk software yang akan dijalankan.
Container menggunakan OS-level virtualization yang dapat memecahkan masalah yang muncul saat menggunakan VM. Container menjalankan Sistem Operasi (OS) diatas kernel yang sama dengan host, maka resource yang dipakai lebih kecil. Walaupun menggunakan kernel yang sama dengan host, container menyediakan isolasi proses yang aman.
A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. - docker.com
Container adalah suatu unit yang berisi kode aplikasi, dan seluruh dependency yang diperlukan (termasuk sistem operasi) yang dibungkus menjadi satu. Dengan container kita dapat dengan mudah menjalankan aplikasi dengan cepat dan dapat dengan mudah dipindahkan ke lingkungan komputasi lain.
Untuk mendapat gambaran yang lebih jelas, kamu dapat melihat perbandingan antara Container dengan VM:
![Container vs VM](https://cdn.hashnode.com/res/hashnode/image/upload/v1691871811121/61f29c7a-6268-4484-be3b-9cc6d75d8fa5.png align=“center”)
Kenapa menggunakan containers?
Banyak sekali alasan yang mengharuskan kita menggunakan container, salah satu nya yang saya singgung sebelumnya yaitu microservices, dengan container kita bisa menjalankan 2,5,10,15,20 hingga 1000 aplikasi atau lebih (bahkan aplikasi yang sama) dalam satu server/mesin dikarenakan sifat container yang terisolasi dari container lain.
Manfaat lain menggunakan container adalah kita dapat dengan mudah mendistribusikan aplikasi kita, dengan container kita bisa membungkus aplikasi kita menjadi Container Image atau Docker Image, lalu image ini bisa kita jalankan di lingkungan komputasi manapun yang terpenting terdapat Container Runtime (pada docker disebut Docker Engine).
Apakah Harus Docker?
Kita sudah tau bahwa docker hanyalah alat untuk memudahkan kita memanjemen container, karena akan sulit dan ribet jika kita membuat atau memanjemen container dari awal (fyi container gabungan dari beberapa teknologi seperti namespace, chroot, dan cgrup). Terdapat alat yang mirip dengan docker yaitu podman, perbedaanya terdapat pada arsitektur saja, ada yang bilang bahwa podman lebih ringan dikarenakan dia tidak memiliki daemon. Tapi semua tergantung kebutuhan, jika kalian terarik kalian bisa mencari tau lebih detail apa perbedaan kedua alat tersebut. Tapi kedua alat ini mempunyai syntax command yang sama, jika kalian mempelajari salah satu alat ini maka seharusnya kalian bisa menggunakan keduanya (hanya terdapat sedikit sekali perbedaan). Berikut adalah contoh menjalankan container di docker dan podman.
Menjalankan container dengan docker:
docker run hello-world
Menjalankan container dengan podman:
podman run hello-world
Apa yang akan kita pelajari dalam seri ini?
Dalam seri ini kita mempelajari docker dengan pendekatan praktik langsung dengan mencoba dan menganalisa fitur ataupun command yang disediakan oleh docker dan pada akhirnya kita akan mencoba mencontainer-kan suatu aplikasi web, dan men-deploy nya di docker. Seri ini dibuat oleh manusia yang tempatnya salah, sebaiknya terapkan gaya berpikir kritis dan gunakan referensi lain untuk mendapatkan pemahaman yang semakin mantap. Sampai bertemu di tulisan selanjutnya.