Episode ini membedah anatomi LXC: namespaces (PID, mount, network, UTS, IPC, user) sebagai isolasi, cgroups (cgroup2) sebagai resource limit, serta komponen liblxc, tooling CLI, dan struktur direktori konfigurasi yang menyusun sebuah container.

Setelah memahami sejarah LXC di episode 1, sekarang kita membedah anatominya. Mengapa LXC bisa menjalankan distro penuh seolah-olah mesin sendiri padahal hanya berupa proses di host? Jawabannya ada di dua pilar kernel: namespaces untuk isolasi dan cgroups untuk resource limit. Plus komponen perangkat lunak yang merangkai keduanya menjadi antarmuka yang ramah pengguna.
Episode 2 adalah fondasi konseptual. Semua angka, flag, dan baris config di episode-episode berikutnya akan kembali ke konsep di sini. Kuasai dulu, maka sisanya tinggal praktik.
Namespaces membuat setiap container melihat lingkungannya sendiri seolah-olah satu-satunya sistem di dunia. Enam namespace utama yang dipakai LXC:
init container, bukan init host.Coba lihat namespace yang sedang aktif untuk proses host:
ls -l /proc/self/ns/Setiap baris menunjuk ke inode namespace masing-masing. Dua proses yang berbagi inode yang sama berarti berada di namespace yang sama — itulah cara kalian mengecek isolasi.
cgroups (control groups) membatasi dan mengukur resource: CPU, memory, dan I/O. LXC modern memakai cgroup2 (unified hierarchy) yang lebih rapi dan konsisten. Dengan cgroups, satu container yang kalap memory tidak bisa membuat host kelaparan — jatahnya sudah diikat.
stat -fc %T /sys/fs/cgroup/Output cgroup2fs menandakan unified hierarchy aktif. Di episode 7 kita mengonfigurasi limit lewat lxc.cgroup2.memory.max dan lxc.cgroup2.cpu.max.
Tip
Metafora paling tepat: namespaces adalah dinding antar ruangan (tiap ruangan tidak bisa melihat isi ruangan lain), sedangkan cgroups adalah meteran listrik dan air per ruangan (jatah yang bisa dipakai tidak lebih dari kuota). Keduanya bekerja bersama untuk membuat satu host bisa menghuni banyak "rumah".
liblxc adalah library inti yang ditulis dalam C. Ia yang mengelola lifecycle container: create, start, stop, attach, hingga isolasi namespaces dan pemasangan cgroups. Semua tooling di atasnya hanyalah pembungkus (wrapper) dari library ini. Jika kalian nanti menulis integrasi sendiri (misal via Python atau Go), kalian tetap akan berbicara dengan liblxc.
Tooling resmi mengikuti pola lxc-<aksi>:
lxc-create — membuat container.lxc-start — memulai container.lxc-stop / lxc-shutdown — menghentikan container.lxc-attach — menjalankan perintah di dalam container.lxc-ls — menampilkan daftar container.lxc-info — informasi runtime.lxc-snapshot / lxc-copy — snapshot dan kloning.lxc-checkconfig — verifikasi kesiapan kernel.Bisa juga dipanggil lewat satu binary modern lxc dengan subcommand, misal lxc-ls -f.
LXC menyimpan konfigurasi di beberapa lokasi:
/etc/lxc/ — konfigurasi global host: lxc.conf, default.conf, lxc-usernet, dan template./etc/lxc/lxc.conf — konfigurasi global (misal lxc.lxcpath untuk lokasi container)./etc/lxc/default.conf — pengaturan default yang dipakai setiap container baru (misal network bridge lxcbr0).~/.config/lxc/ — konfigurasi per-user untuk container unprivileged, termasuk default.conf pribadi./var/lib/lxc/<nama>/ — direktori container: config, rootfs, dan log.Lihat apa saja yang sudah ada di host kalian:
ls -la /etc/lxc/
ls -la ~/.config/lxc/Untuk menutup anatomi, ikuti alur hidupnya:
lxc-create menyalin template/system image ke rootfs baru dan menulis config container.lxc-start meminta liblxc membuat namespaces baru, memasang cgroups, lalu exec init container sebagai PID 1.lxc-attach masuk ke namespaces yang sudah jalan untuk menjalankan perintah.lxc-stop mengirim signal agar container berhenti, lalu membersihkan namespaces dan cgroups.Setiap langkah ini akan kita eksekusi nyata mulai episode 4.
Inti yang harus dibawa pulang:
liblxc adalah low-level runtime C yang mengeksekusi semuanya.lxc-* adalah antarmuka CLI di atas liblxc./etc/lxc/, ~/.config/lxc/, dan /var/lib/lxc/<nama>/.Di episode 3 selanjutnya kita akan menginstall LXC dan memverifikasi kernel — paket lxc di Ubuntu, komponen lxc-* tools beserta template, dan memastikan lxc-checkconfig lolos untuk namespaces, cgroups, dan overlayfs. Inilah langkah praktis pertama setelah fondasi konsep kita kokoh.