Episode ini membahas firecracker-containerd: runtime containerd yang menjalankan setiap container di dalam microVM Firecracker sendiri. Kalian memahami komponen runtime dan snapshotter overlay, lalu menelusuri alur pull image, unpack image, dan menjalankan container dalam microVM dengan bridge network dan registry access.

Sejauh ini kita mengelola microVM dengan API mentah: curl ke Unix socket, JSON, boot, snapshot. Episode 11 membawa Firecracker ke dunia yang lebih ramah: container. Dengan firecracker-containerd, kalian tetap menulis nerdctl run atau ctr run seperti biasa — tapi di belakang layar, setiap container dijalankan dalam microVM Firecracker yang terisolasi penuh.
Mengapa episode ini penting? Container adalah format distribusi software yang sudah mapan, dan hampir semua tim lebih nyaman mengelola image daripada kernel dan rootfs. firecracker-containerd menyatukan dua dunia: ergonomi container (pull image, registry, OCI) dengan keamanan microVM (isolasi hardware). Ini juga menjadi fondasi pola "sandbox per user/job" yang kita bahas di episode 12 dan 18.
firecracker-containerd adalah runtime containerd yang menambahkan dukungan microVM Firecracker ke containerd. Bedanya dengan containerd biasa:
Hasilnya, dari sudut pandang developer, tetap pull + run. Dari sudut pandang keamanan, tiap container mendapat isolasi setara hardware — bukan sekadar namespace Linux.
Karena containerd mengikuti spesifikasi OCI Runtime (runtime class containerd-firecracker), tooling seperti nerdctl, ctr, atau Kubernetes (dengan runtime class) bisa memakainya tanpa perubahan besar. Inilah pola yang membuat microVM bisa hadir di ekosistem container yang sudah ada.
Komponen inti yang mengimplementasikan interface OCI. Ia yang mengatur: membuat microVM, menjalankan proses di dalamnya, dan menjaga korespondensi antara container dan microVM. Runtime inilah yang menerjemahkan request OCI (Create, Start, Kill) menjadi operasi Firecracker — boot, put snapshot, resume, dan sebagainya.
Container image adalah lapisan (layer). firecracker-containerd memakai snapshotter untuk menyusun lapisan-lapisan itu menjadi rootfs microVM yang bisa di-boot. Polanya:
Snapshotter memutuskan bagaimana image container menjadi filesystem guest — inilah bagian yang paling berbeda dari containerd biasa dan paling sensitif terhadap performa boot.
Seperti biasa, tarik image dari registry:
sudo nerdctl --namespace=fc pull docker.io/library/alpine:latestSnapshotter meletakkan layer-layernya ke disk, lalu membangun rootfs microVM:
sudo nerdctl --namespace=fc create --runtime io.containerd.firecracker.v1 fc-alpinePada tahap ini, layer image dipindahkan menjadi filesystem yang bisa di-boot sebagai disk guest. Detail yang perlu dipahami: tiap container mendapat microVM sendiri — tidak ada container yang berbagi microVM, karena itulah poin isolasinya.
Saat start, runtime membangun microVM: jailer untuk isolasi, kernel + rootfs dari image, TAP dan bridge untuk jaringan:
sudo nerdctl --namespace=fc start fc-alpine
sudo nerdctl --namespace=fc exec fc-alpine uname -aOutput uname -a di dalam guest akan menampilkan kernel guest — berbeda dari kernel host — bukti bahwa proses berjalan di dalam VM, bukan di namespace host. Ini cara cepat memverifikasi isolasi benar-benar terjadi.
Container microVM butuh jaringan dan akses registry. firecracker-containerd membangun:
Guest mengakses registry lewat bridge yang sama — pull image di dalam microVM (untuk image yang tidak dibundle saat create) atau lewat proxy yang sudah disiapkan host. Untuk produksi, image biasanya sudah tersedia di host (pola bundled), sehingga guest tidak perlu akses registry eksternal saat runtime — lebih cepat dan lebih aman.
Tip
Dua pola networking yang perlu kalian kenal: bundled (image tersedia lokal, guest offline) untuk keamanan maksimal, dan proxy (guest menarik lewat proxy host) untuk fleksibilitas. Sebagian besar produksi memakai bundled untuk boot cepat dan isolasi jaringan yang lebih bersih.
Keuntungan memakai firecracker-containerd:
nerdctl, Kubernetes (runtime class), dan tooling OCI lain.Batasan yang jujur:
nerdctl run tanpa --runtime memakai runtime default (namespace host) — pastikan --runtime io.containerd.firecracker.v1.Inti yang harus dibawa pulang:
firecracker-containerd menjalankan container OCI di dalam microVM Firecracker.containerd-firecracker) + snapshotter overlay.Di episode 12 selanjutnya kita akan memperbesar skala: Orchestrator — firectl, Flintlock & MicroVMs — memakai firectl sebagai CLI sederhana untuk launch Firecracker, Flintlock dari liquidmetal untuk mengelola banyak microVM sebagai service, serta integrasi Kubernetes via containerd dan runtime class microvm untuk pola sandbox per user/job.