{"id":8,"date":"2025-04-10T06:27:00","date_gmt":"2025-04-10T06:27:00","guid":{"rendered":"https:\/\/emka.web.id\/en\/2025\/04\/10\/cara-membuat-server-gpu-farm-dengan-docker-rootless-mode-dan-ubuntu\/"},"modified":"2025-04-10T06:27:00","modified_gmt":"2025-04-10T06:27:00","slug":"cara-membuat-server-gpu-farm-dengan-docker-rootless-mode-dan-ubuntu","status":"publish","type":"post","link":"https:\/\/emka.web.id\/en\/2025\/04\/cara-membuat-server-gpu-farm-dengan-docker-rootless-mode-dan-ubuntu.html","title":{"rendered":"Cara Membuat Server GPU Farm dengan Docker Rootless Mode dan Ubuntu"},"content":{"rendered":"<\/p>\n<div style=\"clear: both;text-align: center\"><a href=\"https:\/\/emka.web.id\/en\/tutorial\/wp-content\/uploads\/sites\/19\/2025\/04\/logo-docker.png\" style=\"margin-left: 1em;margin-right: 1em\"><img loading=\"lazy\" decoding=\"async\" border=\"0\" data-original-height=\"225\" data-original-width=\"225\" height=\"225\" src=\"https:\/\/emka.web.id\/en\/tutorial\/wp-content\/uploads\/sites\/19\/2025\/04\/logo-docker.png\" width=\"225\" \/><\/a><\/div>\n<\/p>\n<p><span>Docker telah menjadi alat yang sangat populer untuk mengelola container, memungkinkan pengembang dan administrator sistem untuk menjalankan aplikasi dalam lingkungan yang terisolasi dan portabel. Namun, keamanan tetap menjadi perhatian utama, terutama ketika daemon Docker berjalan dengan hak akses root. Untuk mengatasi masalah ini, Docker memperkenalkan <\/span><strong>rootless mode<\/strong><span>, sebuah fitur yang memungkinkan Docker daemon dan container berjalan tanpa hak akses root, sehingga mengurangi risiko kerentanan keamanan.<\/span><\/p>\n<div>\n<p dir=\"auto\">Dalam tutorial ini, kita akan membahas secara mendalam tentang <strong>rootless mode<\/strong> pada Docker, mulai dari pengertian, cara kerja, prasyarat, langkah-langkah instalasi, hingga praktik terbaik untuk menggunakannya. Artikel ini dirancang untuk membantu Anda memahami dan mengimplementasikan rootless mode dengan mudah, bahkan jika Anda baru mengenal Docker. Mari kita mulai!<span><\/span><\/p>\n<p><a name=\"more\"><\/a><\/p>\n<h2 dir=\"auto\">Apa Itu Rootless Mode?<\/h2>\n<p dir=\"auto\"><strong>Rootless mode<\/strong> adalah fitur pada Docker yang memungkinkan daemon Docker dan container dijalankan sebagai pengguna non-root. Dalam mode ini, Anda tidak memerlukan hak akses root, baik saat menjalankan daemon maupun saat mengelola container. Dengan kata lain, rootless mode menawarkan lapisan keamanan tambahan dengan meminimalkan potensi kerentanan yang dapat dieksploitasi jika daemon Docker diretas.<\/p>\n<p dir=\"auto\">Berbeda dengan mode tradisional (sering disebut &#8220;rootful&#8221;), di mana daemon Docker berjalan dengan hak akses root, rootless mode menjalankan seluruh proses dalam ruang pengguna (user namespace). Ini berarti bahkan jika terjadi pelanggaran keamanan, penyerang tidak akan mendapatkan akses root ke sistem host.<\/p>\n<h3 dir=\"auto\">Mengapa Rootless Mode Penting?<\/h3>\n<div style=\"clear: both;text-align: center\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEifuiHm0RGule2blKMTEDzOEjeu81WEKez_JEs38F2l62nrXCRGY4byt-SUBAXJRcFVi6cZOODiEw9NHK_ferxwzBrQXI8m7sfAx-vKuJJuap6HdyGoqGAwoN_F3oJcpQEM4YEJQWCWNe9yjSpAVPKmG1tNegaJkL3nE1wf_MlMMDXXRUoLQON5gjJYTME\/s1200\/asrock-z890.webp\" style=\"margin-left: 1em;margin-right: 1em\"><img loading=\"lazy\" decoding=\"async\" border=\"0\" data-original-height=\"900\" data-original-width=\"1200\" height=\"240\" src=\"https:\/\/emka.web.id\/en\/tutorial\/wp-content\/uploads\/sites\/19\/2025\/04\/asrock-z890-300x225.png\" width=\"320\" \/><\/a><\/div>\n<p dir=\"auto\">Berikut adalah beberapa alasan mengapa rootless mode menjadi pilihan yang menarik:<\/p>\n<ol dir=\"auto\">\n<li><strong>Keamanan yang Ditingkatkan<\/strong>: Dengan menghilangkan kebutuhan akan hak akses root, rootless mode mengurangi risiko eskalasi privilese jika terjadi kerentanan pada daemon atau container.<\/li>\n<li><strong>Isolasi yang Lebih Baik<\/strong>: Rootless mode menggunakan user namespace untuk mengisolasi proses, memastikan bahwa container tidak memiliki akses langsung ke sumber daya sistem yang sensitif.<\/li>\n<li><strong>Fleksibilitas untuk Pengguna Non-Root<\/strong>: Pengguna tanpa hak akses root, seperti pengembang di lingkungan bersama, dapat menjalankan Docker tanpa memerlukan izin khusus dari administrator sistem.<\/li>\n<li><strong>Kesesuaian dengan Praktik Keamanan Modern<\/strong>: Banyak organisasi kini mengadopsi prinsip least privilege, dan rootless mode mendukung pendekatan ini dengan meminimalkan hak akses yang diperlukan.<\/li>\n<\/ol>\n<p dir=\"auto\">Namun, rootless mode juga memiliki beberapa batasan, seperti dukungan terbatas untuk fitur tertentu (misalnya, AppArmor atau jaringan overlay). Kita akan membahas batasan ini secara lebih rinci di bagian selanjutnya.<\/p>\n<h2 dir=\"auto\">Cara Kerja Rootless Mode<\/h2>\n<p dir=\"auto\">Untuk memahami cara kerja rootless mode, kita perlu menyelami konsep <strong>user namespace<\/strong> dan bagaimana Docker memanfaatkannya.<\/p>\n<h3 dir=\"auto\">User Namespace<\/h3>\n<p dir=\"auto\">User namespace adalah fitur kernel Linux yang memungkinkan pemetaan ID pengguna (UID) dan ID grup (GID) di dalam namespace ke UID\/GID yang berbeda di luar namespace. Dalam konteks rootless mode, Docker daemon dan container dijalankan di dalam user namespace, di mana UID 0 (biasanya root) di dalam namespace dipetakan ke UID non-root di sistem host.<\/p>\n<p dir=\"auto\">Misalnya, jika pengguna bernama <span>testuser<\/span> memiliki UID 1001 di sistem host, maka proses di dalam user namespace akan melihat UID 0 sebagai &#8220;root&#8221; di dalam container, tetapi sebenarnya tetap berjalan sebagai UID 1001 di host. Ini memastikan bahwa proses tidak memiliki hak akses root yang sebenarnya di luar namespace.<\/p>\n<h3 dir=\"auto\">Perbandingan dengan Userns-Remap Mode<\/h3>\n<p dir=\"auto\">Rootless mode sering dibandingkan dengan <strong>userns-remap mode<\/strong>, yang juga menggunakan user namespace. Namun, ada perbedaan mendasar:<\/p>\n<ul dir=\"auto\">\n<li><strong>Userns-Remap Mode<\/strong>: Daemon Docker tetap berjalan dengan hak akses root, tetapi container dijalankan dengan UID\/GID yang dipetakan ke pengguna non-root. Ini berarti daemon masih memiliki potensi risiko keamanan jika diretas.<\/li>\n<li><strong>Rootless Mode<\/strong>: Baik daemon Docker maupun container dijalankan sebagai pengguna non-root. Tidak ada proses yang berjalan dengan hak akses root, sehingga risiko keamanan jauh lebih rendah.<\/li>\n<\/ul>\n<h3 dir=\"auto\">Komponen Utama Rootless Mode<\/h3>\n<p dir=\"auto\">Rootless mode mengandalkan beberapa komponen untuk berfungsi dengan baik:<\/p>\n<ol dir=\"auto\">\n<li><strong>RootlessKit<\/strong>: Alat yang digunakan untuk mengatur user namespace dan mengelola jaringan serta mount untuk container.<\/li>\n<li><strong>newuidmap dan newgidmap<\/strong>: Utilitas yang diperlukan untuk memetakan beberapa UID\/GID di dalam user namespace. Ini adalah satu-satunya komponen yang membutuhkan bit SETUID.<\/li>\n<li><strong>Storage Driver<\/strong>: Rootless mode mendukung beberapa driver penyimpanan seperti <span>overlay2<\/span>, <span>fuse-overlayfs<\/span>, <span>btrfs<\/span>, dan <span>vfs<\/span>, dengan batasan tertentu tergantung pada versi kernel.<\/li>\n<li><strong>Systemd (opsional)<\/strong>: Untuk pengelolaan daemon yang lebih baik, rootless mode dapat diintegrasikan dengan systemd untuk menjalankan Docker sebagai layanan pengguna.<\/li>\n<\/ol>\n<h3 dir=\"auto\">Batasan Rootless Mode<\/h3>\n<p dir=\"auto\">Meskipun rootless mode menawarkan banyak keuntungan, ada beberapa batasan yang perlu diperhatikan:<\/p>\n<ul dir=\"auto\">\n<li><strong>Driver Penyimpanan Terbatas<\/strong>: Hanya <span>overlay2<\/span> (kernel 5.11+ atau kernel Ubuntu), <span>fuse-overlayfs<\/span>, <span>btrfs<\/span>, dan <span>vfs<\/span> yang didukung.<\/li>\n<li><strong>Fitur yang Tidak Didukung<\/strong>:\n<ul dir=\"auto\">\n<li>AppArmor<\/li>\n<li>Checkpoint\/restore<\/li>\n<li>Jaringan overlay<\/li>\n<li>Mengekspos port SCTP<\/li>\n<li>Port TCP\/UDP privilese (&lt; 1024) tanpa konfigurasi tambahan<\/li>\n<\/ul>\n<\/li>\n<li><strong>Cgroup<\/strong>: Pengelolaan sumber daya dengan cgroup hanya didukung pada sistem dengan cgroup v2 dan systemd.<\/li>\n<li><strong>NFS<\/strong>: Mount NFS sebagai direktori data Docker tidak didukung.<\/li>\n<\/ul>\n<p dir=\"auto\">Kita akan membahas cara mengatasi beberapa batasan ini di bagian praktik terbaik.<\/p>\n<h2 dir=\"auto\">Prasyarat untuk Menggunakan Rootless Mode<\/h2>\n<p dir=\"auto\">Sebelum menginstal dan menjalankan Docker dalam rootless mode, pastikan sistem Anda memenuhi prasyarat berikut:<\/p>\n<h3 dir=\"auto\">1. Instalasi <span>newuidmap<\/span> dan <span>newgidmap<\/span><\/h3>\n<p dir=\"auto\">Utilitas <span>newuidmap<\/span> dan <span>newgidmap<\/span> diperlukan untuk mengelola pemetaan UID\/GID di dalam user namespace. Biasanya, kedua utilitas ini disediakan oleh paket <span>uidmap<\/span> di sebagian besar distribusi Linux.<\/p>\n<p dir=\"auto\">Untuk menginstalnya di sistem berbasis Debian\/Ubuntu, jalankan perintah berikut:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">sudo apt-get update<br \/>\nsudo apt-get install -y uidmap<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Untuk memverifikasi instalasi, jalankan:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">newuidmap --version<br \/>\nnewgidmap --version<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Pastikan kedua perintah tersebut menghasilkan output yang menunjukkan versi yang terinstal.<\/p>\n<h3 dir=\"auto\">2. Konfigurasi <span>\/etc\/subuid<\/span> dan <span>\/etc\/subgid<\/span><\/h3>\n<p dir=\"auto\">File <span>\/etc\/subuid<\/span> dan <span>\/etc\/subgid<\/span> digunakan untuk menentukan rentang UID\/GID bawahan (subordinate) yang dapat digunakan oleh pengguna dalam user namespace. Setiap pengguna harus memiliki setidaknya <strong>65.536 UID\/GID bawahan<\/strong> untuk menjalankan rootless mode dengan baik.<\/p>\n<p dir=\"auto\">Untuk memeriksa konfigurasi pengguna saat ini (misalnya, pengguna bernama <span>testuser<\/span> dengan UID 1001), jalankan:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">id -u<br \/>\nwhoami<br \/>\ngrep ^$(whoami): \/etc\/subuid<br \/>\ngrep ^$(whoami): \/etc\/subgid<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Output yang diharapkan adalah seperti berikut:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">1001<br \/>\ntestuser<br \/>\ntestuser:231072:65536<br \/>\ntestuser:231072:65536<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Jika file <span>\/etc\/subuid<\/span> atau <span>\/etc\/subgid<\/span> belum dikonfigurasi, Anda dapat menambahkannya secara manual. Misalnya, untuk menambahkan rentang UID\/GID untuk <span>testuser<\/span>, jalankan:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">sudo usermod --add-subuids 231072-296607 --add-subgids 231072-296607 testuser<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Kemudian, verifikasi kembali dengan perintah <span>grep<\/span> di atas.<\/p>\n<h3 dir=\"auto\">3. Instalasi Paket <span>dbus-user-session<\/span><\/h3>\n<p dir=\"auto\">Paket <span>dbus-user-session<\/span> diperlukan untuk mendukung komunikasi antarproses dalam lingkungan pengguna. Untuk menginstalnya di sistem berbasis Debian\/Ubuntu, jalankan:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">sudo apt-get install -y dbus-user-session<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Setelah instalasi, Anda mungkin perlu login ulang agar perubahan diterapkan. Jalankan:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\"><span style=\"color: #c18401\">exit<\/span><\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Lalu masuk kembali ke sesi pengguna Anda.<\/p>\n<h3 dir=\"auto\">4. Instalasi Paket <span>systemd-container<\/span> (Opsional)<\/h3>\n<p dir=\"auto\">Jika Anda menjalankan Docker dari terminal di mana pengguna tidak login langsung (misalnya, melalui <span>su<\/span> atau <span>sudo<\/span>), Anda perlu menginstal paket <span>systemd-container<\/span> untuk mendukung manajemen sesi pengguna. Jalankan:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">sudo apt-get install -y systemd-container<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Kemudian, beralih ke pengguna target dengan perintah:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">sudo machinectl shell testuser@<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Ganti <span>testuser<\/span> dengan nama pengguna Anda.<\/p>\n<h3 dir=\"auto\">5. Dukungan Storage Driver<\/h3>\n<p dir=\"auto\">Rootless mode mendukung beberapa driver penyimpanan, tetapi yang paling umum adalah <span>overlay2<\/span>. Pada sistem Ubuntu, <span>overlay2<\/span> diaktifkan secara default berkat patch kernel khusus Ubuntu. Pastikan kernel Anda mendukung driver yang diperlukan:<\/p>\n<ul dir=\"auto\">\n<li><strong>overlay2<\/strong>: Memerlukan kernel 5.11 atau lebih baru, atau kernel Ubuntu.<\/li>\n<li><strong>fuse-overlayfs<\/strong>: Memerlukan kernel 4.18 atau lebih baru dan paket <span>fuse-overlayfs<\/span> terinstal.<\/li>\n<li><strong>btrfs<\/strong>: Memerlukan kernel 4.18 atau lebih baru, dan direktori data Docker harus memiliki opsi mount <span>user_subvol_rm_allowed<\/span>.<\/li>\n<li><strong>vfs<\/strong>: Selalu didukung, tetapi kinerjanya lebih lambat dibandingkan driver lain.<\/li>\n<\/ul>\n<p dir=\"auto\">Untuk memeriksa versi kernel Anda, jalankan:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">uname -r<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Jika Anda menggunakan <span>fuse-overlayfs<\/span>, instal paketnya dengan:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">sudo apt-get install -y fuse-overlayfs<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">6. Konfigurasi AppArmor (Jika Diperlukan)<\/h3>\n<p dir=\"auto\">Pada Ubuntu 24.04 dan versi yang lebih baru, user namespace tanpa privilese dibatasi secara default oleh AppArmor. Jika Anda menginstal <span>docker-ce-rootless-extras<\/span> melalui paket DEB (misalnya, dengan <span>apt-get<\/span>), profil AppArmor untuk <span>rootlesskit<\/span> sudah disertakan, sehingga tidak perlu konfigurasi tambahan.<\/p>\n<p dir=\"auto\">Namun, jika Anda menginstal rootless mode menggunakan skrip instalasi manual, Anda perlu menambahkan profil AppArmor secara manual. Berikut langkah-langkahnya:<\/p>\n<ol dir=\"auto\">\n<li>Buat file profil AppArmor untuk <span>rootlesskit<\/span>:<\/li>\n<\/ol>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">filename=$(<span style=\"color: #c18401\">echo<\/span> <span style=\"color: #986801\">$HOME<\/span>\/bin\/rootlesskit | sed -e s@^\/@@ -e s@\/@.@g)<br \/>\ncat &lt;&lt;<span style=\"color: #50a14f\">EOF &gt; ~\/${filename}<br \/>\n<\/span><span style=\"color: #50a14f\">abi &lt;abi\/4.0&gt;,<br \/>\n<\/span><span style=\"color: #50a14f\">include &lt;tunables\/global&gt;<br \/>\n<\/span><span style=\"color: #50a14f\"><br \/>\n<\/span><span style=\"color: #50a14f\">\"$HOME\/bin\/rootlesskit\" flags=(unconfined) {<br \/>\n<\/span><span style=\"color: #50a14f\">  userns,<br \/>\n<\/span><span style=\"color: #50a14f\"><br \/>\n<\/span><span style=\"color: #50a14f\">  include if exists &lt;local\/${filename}&gt;<br \/>\n<\/span><span style=\"color: #50a14f\">}<br \/>\n<\/span><span style=\"color: #50a14f\">EOF<\/span><\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<ol dir=\"auto\" start=\"2\">\n<li>Pindahkan file ke direktori AppArmor:<\/li>\n<\/ol>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">sudo mv ~\/<span style=\"color: #986801\">${filename}<\/span> \/etc\/apparmor.d\/<span style=\"color: #986801\">${filename}<\/span><\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<ol dir=\"auto\" start=\"3\">\n<li>Restart layanan AppArmor:<\/li>\n<\/ol>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">sudo systemctl restart apparmor.service<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">7. Nonaktifkan Daemon Docker Rootful (Opsional)<\/h3>\n<p dir=\"auto\">Jika sistem Anda sudah menjalankan daemon Docker dalam mode rootful (berjalan dengan hak akses root), sebaiknya nonaktifkan terlebih dahulu untuk menghindari konflik. Jalankan:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">sudo systemctl <span style=\"color: #c18401\">disable<\/span> --now docker.service docker.socket<br \/>\nsudo rm \/var\/run\/docker.sock<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Jika Anda memilih untuk tidak menonaktifkan daemon rootful, Anda dapat menggunakan parameter <span>&#8211;force<\/span> saat menginstal rootless mode, tetapi ini tidak disarankan untuk produksi.<\/p>\n<h2 dir=\"auto\">Instalasi Rootless Mode<\/h2>\n<div style=\"clear: both;text-align: center\"><a href=\"https:\/\/emka.web.id\/en\/tutorial\/wp-content\/uploads\/sites\/19\/2025\/04\/processor.jpg\" style=\"margin-left: 1em;margin-right: 1em\"><img loading=\"lazy\" decoding=\"async\" border=\"0\" data-original-height=\"500\" data-original-width=\"500\" height=\"320\" src=\"https:\/\/emka.web.id\/en\/tutorial\/wp-content\/uploads\/sites\/19\/2025\/04\/processor-300x300.jpg\" width=\"320\" \/><\/a><\/div>\n<p dir=\"auto\">Setelah memenuhi prasyarat, Anda siap untuk menginstal Docker dalam rootless mode. Ada dua metode utama: menggunakan paket RPM\/DEB atau tanpa paket. Kami akan fokus pada metode dengan paket, karena ini adalah pendekatan yang paling umum dan didukung.<\/p>\n<h3 dir=\"auto\">Langkah 1: Instal Paket <span>docker-ce-rootless-extras<\/span><\/h3>\n<p dir=\"auto\">Jika Anda menggunakan Docker 20.10 atau versi lebih baru yang diinstal melalui paket RPM\/DEB, Anda seharusnya sudah memiliki skrip <span>dockerd-rootless-setuptool.sh<\/span> di <span>\/usr\/bin<\/span>. Jika tidak, instal paket <span>docker-ce-rootless-extras<\/span> secara manual:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">sudo apt-get install -y docker-ce-rootless-extras<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Verifikasi keberadaan skrip:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\"><span style=\"color: #c18401\">which<\/span> dockerd-rootless-setuptool.sh<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Output yang diharapkan adalah:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">\/usr\/bin\/dockerd-rootless-setuptool.sh<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">Langkah 2: Jalankan Skrip Instalasi<\/h3>\n<p dir=\"auto\">Jalankan skrip <span>dockerd-rootless-setuptool.sh<\/span> sebagai pengguna non-root untuk mengatur daemon Docker:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">dockerd-rootless-setuptool.sh install<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Skrip ini akan melakukan beberapa tugas, termasuk:<\/p>\n<ul dir=\"auto\">\n<li>Membuat file layanan systemd di <span>~\/.config\/systemd\/user\/docker.service<\/span>.<\/li>\n<li>Mengatur variabel lingkungan seperti <span>PATH<\/span> dan <span>DOCKER_HOST<\/span>.<\/li>\n<li>Menampilkan instruksi untuk mengelola layanan Docker.<\/li>\n<\/ul>\n<p dir=\"auto\">Output yang diharapkan akan terlihat seperti ini:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">[INFO] Creating \/home\/testuser\/.config\/systemd\/user\/docker.service<br \/>\n...<br \/>\n[INFO] Installed docker.service successfully.<br \/>\n[INFO] To control docker.service, run: `systemctl --user (start|stop|restart) docker.service`<br \/>\n[INFO] To run docker.service on system startup, run: `sudo loginctl enable-linger testuser`<\/p>\n<p>[INFO] Make sure the following environment variables are set (or add them to ~\/.bashrc):<\/p>\n<p>export PATH=\/usr\/bin:$PATH<br \/>\nexport DOCKER_HOST=unix:\/\/\/run\/user\/1000\/docker.sock<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">Langkah 3: Atur Variabel Lingkungan<\/h3>\n<p dir=\"auto\">Tambahkan variabel lingkungan yang disarankan ke file <span>~\/.bashrc<\/span> agar tetap berlaku di setiap sesi:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\"><span style=\"color: #c18401\">echo<\/span> <span style=\"color: #50a14f\">'export PATH=\/usr\/bin:$PATH'<\/span> &gt;&gt; ~\/.bashrc<br \/>\n<span style=\"color: #c18401\">echo<\/span> <span style=\"color: #50a14f\">'export DOCKER_HOST=unix:\/\/\/run\/user\/1000\/docker.sock'<\/span> &gt;&gt; ~\/.bashrc<br \/>\n<span style=\"color: #c18401\">source<\/span> ~\/.bashrc<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Ganti <span>\/run\/user\/1000<\/span> dengan direktori yang sesuai dengan UID Anda (misalnya, <span>\/run\/user\/1001<\/span> untuk UID 1001).<\/p>\n<h3 dir=\"auto\">Langkah 4: Aktifkan Layanan Docker<\/h3>\n<p dir=\"auto\">Untuk memastikan daemon Docker berjalan otomatis saat login, aktifkan layanan systemd dan enable lingering untuk pengguna Anda:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">systemctl --user <span style=\"color: #c18401\">enable<\/span> docker<br \/>\nsudo loginctl enable-linger $(whoami)<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">Langkah 5: Verifikasi Instalasi<\/h3>\n<p dir=\"auto\">Jalankan daemon Docker:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">systemctl --user start docker<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Periksa statusnya:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">systemctl --user status docker<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Jika semuanya berjalan dengan baik, Anda akan melihat output yang menunjukkan bahwa layanan sedang aktif (running).<\/p>\n<p dir=\"auto\">Uji instalasi dengan menjalankan container sederhana:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">docker run hello-world<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Jika container berjalan dan menampilkan pesan &#8220;Hello from Docker!&#8221;, maka rootless mode telah berhasil diinstal.<\/p>\n<h2 dir=\"auto\">Mengelola Daemon Docker dalam Rootless Mode<\/h2>\n<p dir=\"auto\">Setelah instalasi selesai, Anda dapat mengelola daemon Docker menggunakan perintah <span>systemctl &#8211;user<\/span>. Berikut adalah beberapa perintah umum:<\/p>\n<ul dir=\"auto\">\n<li><strong>Memulai daemon<\/strong>:<\/li>\n<\/ul>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">systemctl --user start docker<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<ul dir=\"auto\">\n<li><strong>Menghentikan daemon<\/strong>:<\/li>\n<\/ul>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">systemctl --user stop docker<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<ul dir=\"auto\">\n<li><strong>Merestart daemon<\/strong>:<\/li>\n<\/ul>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">systemctl --user restart docker<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<ul dir=\"auto\">\n<li><strong>Memeriksa status daemon<\/strong>:<\/li>\n<\/ul>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">systemctl --user status docker<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">Catatan tentang Direktori<\/h3>\n<p dir=\"auto\">Dalam rootless mode, beberapa direktori default berbeda dari mode rootful:<\/p>\n<ul dir=\"auto\">\n<li><strong>Socket<\/strong>: <span>$XDG_RUNTIME_DIR\/docker.sock<\/span> (biasanya <span>\/run\/user\/$UID\/docker.sock<\/span>).<\/li>\n<li><strong>Direktori Data<\/strong>: <span>~\/.local\/share\/docker<\/span>.<\/li>\n<li><strong>Direktori Konfigurasi Daemon<\/strong>: <span>~\/.config\/docker<\/span> (bukan <span>~\/.docker<\/span> seperti pada klien).<\/li>\n<\/ul>\n<p dir=\"auto\">Pastikan direktori data tidak berada di mount NFS, karena ini tidak didukung.<\/p>\n<h2 dir=\"auto\">Praktik Terbaik untuk Rootless Mode<\/h2>\n<p dir=\"auto\">Untuk memaksimalkan manfaat rootless mode, ikuti praktik terbaik berikut:<\/p>\n<h3 dir=\"auto\">1. Gunakan Systemd untuk Mengelola Daemon<\/h3>\n<p dir=\"auto\">Menggunakan systemd untuk mengelola daemon Docker adalah pendekatan yang sangat direkomendasikan, karena memudahkan manajemen siklus hidup daemon. Pastikan Anda telah mengaktifkan layanan dan lingering seperti dijelaskan di atas.<\/p>\n<h3 dir=\"auto\">2. Hindari Menjalankan Rootless Docker sebagai Layanan Sistem<\/h3>\n<p dir=\"auto\">Menjalankan daemon Docker dalam rootless mode sebagai layanan sistem (<span>\/etc\/systemd\/system\/docker.service<\/span>) tidak didukung, bahkan dengan direktif <span>User=<\/span>. Selalu gunakan layanan pengguna (<span>~\/.config\/systemd\/user\/docker.service<\/span>).<\/p>\n<h3 dir=\"auto\">3. Gunakan Image Khusus untuk Docker-in-Docker<\/h3>\n<p dir=\"auto\">Jika Anda perlu menjalankan Docker di dalam container (Docker-in-Docker) dalam rootless mode, gunakan image <span>docker:&lt;version&gt;-dind-rootless<\/span> alih-alih <span>docker:&lt;version&gt;-dind<\/span>. Contoh:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">docker run -d --name dind-rootless --privileged docker:25.0-dind-rootless<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Catatan: Opsi <span>&#8211;privileged<\/span> diperlukan untuk menonaktifkan seccomp, AppArmor, dan masker mount, tetapi container tetap berjalan sebagai pengguna non-root (UID 1000).<\/p>\n<h3 dir=\"auto\">4. Batasi Sumber Daya tanpa Cgroup<\/h3>\n<p dir=\"auto\">Jika cgroup v2 tidak tersedia, Anda dapat menggunakan alat tradisional seperti <span>ulimit<\/span> dan <span>cpulimit<\/span> untuk membatasi sumber daya. Contoh:<\/p>\n<ul dir=\"auto\">\n<li><strong>Batasi penggunaan CPU<\/strong> (setara dengan <span>docker run &#8211;cpus 0.5<\/span>):<\/li>\n<\/ul>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">docker run &lt;IMAGE&gt; cpulimit --<span style=\"color: #c18401\">limit<\/span>=50 --include-children &lt;COMMAND&gt;<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<ul dir=\"auto\">\n<li><strong>Batasi memori<\/strong> (setara dengan <span>docker run &#8211;memory 64m<\/span>):<\/li>\n<\/ul>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">docker run &lt;IMAGE&gt; sh -c <span style=\"color: #50a14f\">\"ulimit -v 65536; &lt;COMMAND&gt;\"<\/span><\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<ul dir=\"auto\">\n<li><strong>Batasi jumlah proses<\/strong> (setara dengan <span>docker run &#8211;pids-limit=100<\/span>):<\/li>\n<\/ul>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">docker run --user 2000 --<span style=\"color: #c18401\">ulimit<\/span> nproc=100 &lt;IMAGE&gt; &lt;COMMAND&gt;<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">5. Aktifkan Cgroup v2 untuk Pengelolaan Sumber Daya<\/h3>\n<p dir=\"auto\">Untuk mendukung fitur seperti <span>&#8211;cpus<\/span>, <span>&#8211;memory<\/span>, dan <span>&#8211;pids-limit<\/span>, pastikan sistem Anda menggunakan cgroup v2 dan driver cgroup diatur ke <span>systemd<\/span>. Periksa driver cgroup dengan:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">docker info --format <span style=\"color: #50a14f\">'{{.CgroupDriver}}'<\/span><\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Jika outputnya adalah <span>none<\/span>, Anda perlu mengaktifkan cgroup v2. Tambahkan parameter kernel <span>systemd.unified_cgroup_hierarchy=1<\/span> ke konfigurasi bootloader Anda (misalnya, GRUB), lalu reboot sistem.<\/p>\n<p dir=\"auto\">Untuk memungkinkan delegasi semua pengontrol cgroup (cpu, cpuset, io, memory, pids), buat file konfigurasi systemd:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">sudo mkdir -p \/etc\/systemd\/system\/user@.service.d<br \/>\ncat &gt; \/etc\/systemd\/system\/user@.service.d\/delegate.conf &lt;&lt; <span style=\"color: #50a14f\">EOF<br \/>\n<\/span><span style=\"color: #50a14f\">[Service]<br \/>\n<\/span><span style=\"color: #50a14f\">Delegate=cpu cpuset io memory pids<br \/>\n<\/span><span style=\"color: #50a14f\">EOF<\/span><br \/>\nsudo systemctl daemon-reload<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">6. Integrasi dengan GPU (NVIDIA)<\/h3>\n<div style=\"clear: both;text-align: center\"><a href=\"https:\/\/emka.web.id\/en\/tutorial\/wp-content\/uploads\/sites\/19\/2025\/04\/nvidia-gpu.jpg\" style=\"margin-left: 1em;margin-right: 1em\"><img loading=\"lazy\" decoding=\"async\" border=\"0\" data-original-height=\"500\" data-original-width=\"500\" height=\"320\" src=\"https:\/\/emka.web.id\/en\/tutorial\/wp-content\/uploads\/sites\/19\/2025\/04\/nvidia-gpu-300x300.jpg\" width=\"320\" \/><\/a><\/div>\n<p dir=\"auto\">Jika Anda menggunakan GPU NVIDIA, Anda dapat mengaktifkan dukungan GPU dalam rootless mode dengan konfigurasi tambahan.<\/p>\n<h4 dir=\"auto\">Langkah 1: Edit Konfigurasi NVIDIA Container Runtime<\/h4>\n<p dir=\"auto\">Edit file <span>\/etc\/nvidia-container-runtime\/config.toml<\/span> dan tambahkan baris berikut di bawah bagian <span>[nvidia-container-cli]<\/span>:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\"><span style=\"color: #986801\">no-cgroups<\/span> = <span style=\"color: #0184bb\">true<\/span><\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Ini memungkinkan runtime NVIDIA berjalan tanpa cgroup, yang diperlukan untuk rootless mode.<\/p>\n<h4 dir=\"auto\">Langkah 2: Konfigurasi Daemon Docker<\/h4>\n<p dir=\"auto\">Edit file <span>\/etc\/docker\/daemon.json<\/span> untuk menambahkan runtime NVIDIA sebagai default:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">{<br \/>\n    <span style=\"color: #986801\">\"runtimes\"<\/span>: {<br \/>\n        <span style=\"color: #986801\">\"nvidia\"<\/span>: {<br \/>\n            <span style=\"color: #986801\">\"path\"<\/span>: <span style=\"color: #50a14f\">\"nvidia-container-runtime\"<\/span>,<br \/>\n            <span style=\"color: #986801\">\"runtimeArgs\"<\/span>: []<br \/>\n        }<br \/>\n    },<br \/>\n    <span style=\"color: #986801\">\"default-runtime\"<\/span>: <span style=\"color: #50a14f\">\"nvidia\"<\/span>,<br \/>\n    <span style=\"color: #986801\">\"node-generic-resources\"<\/span>: [<br \/>\n        <span style=\"color: #50a14f\">\"NVIDIA-GPU=GPU-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"<\/span>,<br \/>\n        <span style=\"color: #50a14f\">\"NVIDIA-GPU=GPU-yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\"<\/span><br \/>\n    ]<br \/>\n}<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Ganti ID GPU xxxxx dan yyyyy dengan ID yang sesuai untuk sistem Anda. Anda dapat menemukan ID GPU dengan menjalankan:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">nvidia-smi -L<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<h4 dir=\"auto\">Langkah 3: Restart Daemon Docker<\/h4>\n<p dir=\"auto\">Restart daemon Docker untuk menerapkan perubahan:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">systemctl --user restart docker<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<h4 dir=\"auto\">Langkah 4: Uji Dukungan GPU<\/h4>\n<p dir=\"auto\">Jalankan container dengan akses GPU untuk menguji konfigurasi:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">docker run --gpus all nvidia\/cuda:12.6.3-cudnn-devel-ubuntu22.04 nvidia-smi<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Jika konfigurasi berhasil, Anda akan melihat output dari <span>nvidia-smi<\/span> yang menunjukkan informasi GPU.<\/p>\n<h2 dir=\"auto\">Mengatasi Masalah Umum<\/h2>\n<p dir=\"auto\">Berikut adalah beberapa masalah umum yang mungkin Anda temui saat menggunakan rootless mode dan cara mengatasinya:<\/p>\n<h3 dir=\"auto\">1. Error: &#8220;cannot setup user namespace&#8221;<\/h3>\n<p dir=\"auto\">Ini biasanya disebabkan oleh konfigurasi <span>\/etc\/subuid<\/span> atau <span>\/etc\/subgid<\/span> yang salah. Pastikan pengguna Anda memiliki rentang UID\/GID bawahan yang cukup (minimal 65.536). Periksa dengan:<\/p>\n<div dir=\"auto\">\n<div>\n<div style=\"border-radius: 0px 0px 12px 12px;font-family: var(--font-ibm-plex-mono);font-size: 0.9em;line-height: 1.5em;margin-top: 0px;padding: 16px\"><code style=\"font-size: inherit;line-height: inherit\">grep ^$(whoami): \/etc\/subuid<br \/>\ngrep ^$(whoami): \/etc\/subgid<\/code><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Jika tidak ada entri, tambahkan rentang UID\/GID seperti dijelaskan di bagian prasyarat.<\/p>\n<h3 dir=\"auto\">2. Error: &#8220;AppArmor denies user namespace creation&#8221;<\/h3>\n<p dir=\"auto\">Jika Anda menggunakan Ubuntu 24.04 atau lebih baru, pastikan profil AppArmor untuk <span>rootlesskit<\/span> telah dikonfigurasi. Ikuti langkah-langkah di bagian prasyarat untuk membuat dan menginstal profil AppArmor.<\/p>\n<h3 dir=\"auto\">3. Container Tidak Dapat Mengakses Port Privileged (&lt; 1024)<\/h3>\n<p dir=\"auto\">Rootless mode tidak mendukung pengikatan port di bawah 1024 secara langsung. Untuk mengatasi ini, gunakan alat seperti <span>slirp4netns<\/span> untuk mengelola jaringan atau ubah port aplikasi ke port non-privilese (misalnya, 8080).<\/p>\n<h3 dir=\"auto\">4. Performa Lambat dengan Storage Driver <span>vfs<\/span><\/h3>\n<p dir=\"auto\">Driver <span>vfs<\/span> memiliki performa yang lebih lambat dibandingkan <span>overlay2<\/span> atau <span>fuse-overlayfs<\/span>. Jika memungkinkan, gunakan <span>overlay2<\/span> (memerlukan kernel yang mendukung) atau instal <span>fuse-overlayfs<\/span> untuk performa yang lebih baik.<\/p>\n<h2 dir=\"auto\">Kesimpulan<\/h2>\n<p dir=\"auto\">Rootless mode pada Docker adalah langkah besar menuju keamanan yang lebih baik dalam pengelolaan container. Dengan menjalankan daemon dan container sebagai pengguna non-root, Anda dapat mengurangi risiko kerentanan keamanan tanpa mengorbankan fungsionalitas inti Docker. Meskipun ada beberapa batasan, seperti dukungan terbatas untuk fitur tertentu, rootless mode tetap menjadi pilihan yang sangat baik untuk lingkungan yang mengutamakan keamanan.<\/p>\n<p dir=\"auto\">Dalam tutorial ini, kita telah membahas:<\/p>\n<ul dir=\"auto\">\n<li>Apa itu rootless mode dan mengapa penting.<\/li>\n<li>Cara kerja rootless mode menggunakan user namespace.<\/li>\n<li>Prasyarat dan langkah-langkah instalasi.<\/li>\n<li>Cara mengelola daemon Docker dalam rootless mode.<\/li>\n<li>Praktik terbaik untuk penggunaan yang optimal.<\/li>\n<li>Konfigurasi tambahan untuk mendukung GPU.<\/li>\n<li>Cara mengatasi masalah umum.<\/li>\n<\/ul>\n<p dir=\"auto\">Dengan mengikuti panduan ini, Anda seharusnya dapat menginstal dan menjalankan Docker dalam rootless mode dengan percaya diri. Jika Anda memiliki pertanyaan atau menemui masalah, jangan ragu untuk bergabung dengan komunitas Docker atau mencari bantuan di forum seperti Stack Overflow.<\/p>\n<p dir=\"auto\">Sekarang, saatnya untuk mencoba rootless mode di sistem Anda sendiri! Bagikan pengalaman Anda atau ajukan pertanyaan di kolom komentar di bawah. Selamat mengontainerisasi dengan aman!<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Docker telah menjadi alat yang sangat populer untuk mengelola container, memungkinkan pengembang dan administrator sistem untuk menjalankan aplikasi dalam lingkungan yang terisolasi dan portabel&#8230;.<\/p>\n","protected":false},"author":27,"featured_media":197,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/posts\/8","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/comments?post=8"}],"version-history":[{"count":0,"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/posts\/8\/revisions"}],"wp:attachment":[{"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/media?parent=8"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/categories?post=8"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/emka.web.id\/en\/wp-json\/wp\/v2\/tags?post=8"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}