Skip to main content

Bab 1: Gambaran Umum Container

Container telah menguasai dunia!

Di bab ini, kamu akan mempelajari kenapa kita membutuhkan container, apa manfaatnya bagi kita, dan di mana saja kita bisa menggunakannya.

Masa-masa buruk di masa lalu

Aplikasi adalah tulang punggung setiap bisnis modern. Ketika aplikasi bermasalah, bisnis pun ikut bermasalah.

Sebagian besar aplikasi berjalan di server, dan di masa lalu kita dibatasi hanya bisa menjalankan satu aplikasi per server. Akibatnya, ceritanya biasanya seperti ini:

Setiap kali bisnis membutuhkan aplikasi baru, mereka harus membeli server baru. Sayangnya, kita tidak terlalu pandai memodelkan kebutuhan performa aplikasi, sehingga semuanya serba menebak. Hal ini menyebabkan bisnis membeli server yang lebih besar, lebih cepat, dan lebih mahal dari yang sebenarnya dibutuhkan. Lagipula, tidak ada yang mau server kekurangan tenaga dan tidak mampu menangani kebutuhan aplikasi, yang berujung pada pelanggan tidak puas dan hilangnya pendapatan.

Akibatnya, kita berakhir dengan rak demi rak server yang terlalu besar, tetapi hanya berjalan pada 5–10% dari kapasitas maksimalnya. Ini adalah pemborosan terhadap pengeluaran perusahaan dan sumber daya lingkungan.

Halo VMware!

Di tengah semua ini, VMware, Inc. memberikan dunia sebuah hadiah — virtual machine (VM) — sebuah teknologi yang memungkinkan kita menjalankan banyak aplikasi bisnis di satu server dengan aman.

Ini benar-benar mengubah segalanya. Bisnis bisa menjalankan aplikasi baru dengan memanfaatkan kapasitas kosong dari server yang sudah ada, dan memicu era keemasan dalam memaksimalkan nilai aset yang dimiliki.

Kekurangan VM

Akan tetapi, dan selalu ada "tapi"! Meskipun VM sangat hebat, mereka jauh dari kata sempurna.

Sebagai contoh, setiap VM membutuhkan sistem operasi (OS) sendiri. Sayangnya, ini membawa beberapa kelemahan, di antaranya:

  • Setiap OS mengonsumsi CPU, RAM, dan resource lain yang sebenarnya lebih baik digunakan untuk aplikasi
  • Setiap VM dan OS perlu di-patch
  • Setiap VM dan OS perlu dimonitor

VM juga lambat saat boot dan tidak terlalu portabel.

Halo Container!

Saat sebagian besar dari kita menikmati manfaat VM, para raksasa web seperti Google sebenarnya sudah melangkah lebih jauh dan menggunakan container.

Salah satu karakteristik utama model container adalah setiap container berbagi OS yang sama dengan host tempat ia berjalan. Artinya, satu host bisa menjalankan jauh lebih banyak container dibandingkan VM. Sebagai contoh, sebuah host yang mampu menjalankan 10 VM mungkin bisa menjalankan 50 container, sehingga container jauh lebih efisien dibandingkan VM.

Container juga lebih cepat dan lebih portabel dibandingkan VM.

Container Linux

Container modern berawal dari Linux dan merupakan hasil kerja luar biasa dari banyak individu maupun kelompok selama bertahun-tahun. Sebagai contoh, Google menyumbangkan banyak teknologi terkait container ke kernel Linux. Berkat kontribusi-kontribusi seperti inilah kita bisa menikmati container seperti saat ini.

Beberapa teknologi utama yang menjadi fondasi container modern meliputi kernel namespaces, control groups (cgroups), dan capabilities.

Namun, meskipun semua kerja hebat ini sudah ada, container dulunya sangat rumit. Baru ketika Docker hadir, container menjadi mudah diakses oleh banyak orang.

Catatan: Penulis tahu bahwa banyak teknologi mirip container sudah ada sebelum Docker dan container modern. Namun, tidak satu pun dari teknologi tersebut yang mengubah dunia seperti yang dilakukan Docker.

Halo Docker!

Docker adalah keajaiban yang membuat container Linux menjadi mudah dan membawanya ke khalayak luas.

Kita akan membahas Docker jauh lebih dalam di bab berikutnya.

Docker dan Windows

Microsoft bekerja keras untuk membawa Docker dan teknologi container ke platform Windows.

Pada saat buku ini ditulis, platform desktop dan server Windows mendukung dua hal berikut:

  • Windows container
  • Linux container

Windows container menjalankan aplikasi Windows dan membutuhkan sistem host dengan kernel Windows. Windows 10, Windows 11, serta semua versi modern Windows Server secara native mendukung Windows container.

Sistem Windows juga dapat menjalankan Linux container melalui subsistem WSL 2 (Windows Subsystem for Linux).

Artinya, Windows 10 dan Windows 11 adalah platform yang sangat baik untuk mengembangkan dan menguji container Windows maupun Linux.

Namun, terlepas dari semua upaya pengembangan Windows container, hampir semua container yang digunakan saat ini adalah Linux container. Alasannya, Linux container lebih kecil, lebih cepat, dan ekosistem tooling-nya jauh lebih matang.

Semua contoh dalam edisi buku ini menggunakan Linux container.

Windows container vs Linux container

Penting untuk dipahami bahwa container berbagi kernel dengan host tempat mereka berjalan. Ini berarti aplikasi Windows yang dijalankan sebagai container membutuhkan host dengan kernel Windows, sedangkan aplikasi Linux yang dijalankan sebagai container membutuhkan host dengan kernel Linux. Namun, seperti yang telah disebutkan, kamu bisa menjalankan Linux container di sistem Windows yang menggunakan backend WSL 2.

Terminologi: Aplikasi yang di-container-kan (containerized app) adalah aplikasi yang berjalan sebagai sebuah container. Topik ini akan dibahas secara sangat mendetail nanti.

Bagaimana dengan container di Mac?

Tidak ada yang namanya Mac container. Namun, Mac adalah platform yang sangat bagus untuk bekerja dengan container, dan penulis melakukan hampir seluruh pekerjaan hariannya dengan container di Mac.

Cara paling populer untuk bekerja dengan container di Mac adalah menggunakan Docker Desktop. Docker Desktop bekerja dengan menjalankan Docker di dalam VM Linux ringan di Mac kamu. Tool lain seperti Podman dan Rancher Desktop juga bekerja dengan sangat baik di Mac.

Bagaimana dengan Wasm

Wasm (WebAssembly) adalah instruction set biner modern yang menghasilkan aplikasi yang lebih kecil, lebih cepat, lebih aman, dan lebih portabel dibandingkan container. Kamu menulis aplikasi menggunakan bahasa favoritmu, lalu mengompilasikannya menjadi biner Wasm yang bisa dijalankan di mana pun tersedia runtime Wasm.

Namun, aplikasi Wasm memiliki banyak keterbatasan, dan banyak standar masih terus dikembangkan. Akibatnya, container tetap menjadi model dominan untuk aplikasi cloud-native.

Ekosistem container juga jauh lebih kaya dan matang dibandingkan ekosistem Wasm.

Seperti yang akan kamu lihat di bab Wasm, Docker dan ekosistem container sedang beradaptasi untuk bekerja dengan aplikasi Wasm. Kamu bisa mengharapkan masa depan yang cerah di mana VM, container, dan aplikasi Wasm berjalan berdampingan di sebagian besar cloud dan aplikasi.

Buku ini sudah diperbarui dengan perkembangan terbaru terkait Wasm dan container.

Docker dan AI

Developer dan organisasi semakin banyak menggunakan aplikasi AI, dan Docker secara konsisten menempati peringkat No. 1 sebagai tool developer yang paling diinginkan dan paling banyak digunakan (Stack Overflow Annual Developer Survey).

Sayangnya, mengekspos GPU dan hardware akselerasi AI lainnya ke aplikasi yang berjalan di dalam container itu sangat sulit. Hal ini disebabkan setiap hardware memiliki driver dan SDK masing-masing, dan terlalu berat bagi industri untuk membuat semuanya kompatibel dengan container.

Sebagai hasilnya, Docker merilis Docker Model Runner sebagai cara untuk menjalankan LLM lokal di luar container, sehingga model tersebut dapat memiliki akses langsung ke hardware host.

Bab 10 secara khusus membahas cara menjalankan model AI lokal dengan Docker Model Runner, dan topik ini sangat menarik.

Bagaimana dengan Kubernetes

Kubernetes adalah platform standar industri untuk men-deploy dan mengelola containerized apps.

Versi lama Kubernetes menggunakan Docker untuk menjalankan dan menghentikan container. Namun, versi yang lebih baru menggunakan containerd, yaitu versi Docker yang dipangkas dan dioptimalkan untuk digunakan oleh Kubernetes dan platform lainnya.

Hal penting yang perlu kamu ketahui adalah semua Docker container dapat berjalan di Kubernetes.

Jika kamu perlu mempelajari Kubernetes, lihat buku-buku berikut (belum diterjemahkan):

  • Quick Start Kubernetes: Sekitar 100 halaman dan akan membuat kamu memahami Kubernetes hanya dalam satu hari
  • The Kubernetes Book: Buku paling lengkap untuk menguasai Kubernetes

Penulis memperbarui kedua buku tersebut setiap tahun agar tetap relevan dengan perkembangan terbaru di ekosistem cloud-native.

Ringkasan

Dulu, kita hidup di dunia di mana setiap aplikasi bisnis membutuhkan server khusus yang terlalu canggih. VMware hadir dan memungkinkan kita menjalankan banyak aplikasi di server baru maupun yang sudah ada. Namun, setelah kesuksesan VMware dan hypervisor, muncul teknologi virtualisasi yang lebih baru, lebih efisien, dan lebih portabel, yaitu container.

Meski begitu, container dulunya kompleks dan sulit diterapkan sampai Docker hadir dan membuatnya menjadi mudah. Wasm dan AI kini mendorong inovasi baru, dan ekosistem Docker terus berkembang untuk bekerja dengan keduanya. Buku ini memiliki bab-bab khusus yang membahas penggunaan aplikasi AI dan aplikasi Wasm dengan Docker.