6 poin oleh GN⁺ 2024-11-24 | 1 komentar | Bagikan ke WhatsApp
  • Bocker adalah proyek yang mengimplementasikan Docker dalam sekitar 100 baris Bash, dan menyediakan alur mirip Docker seperti pull image, menjalankan container, melihat log, commit, dan menghapus
  • Untuk menjalankannya diperlukan btrfs-progs, curl, iproute2, iptables, libcgroup-tools, util-linux 2.25.2 atau lebih baru, serta coreutils 7.5 atau lebih baru, dan dibutuhkan filesystem btrfs di bawah /var/bocker serta konfigurasi jaringan bridge0
  • Contoh di README menunjukkan alur menarik image centos:7, menjalankan perintah di dalam container, lalu commit hasil yum install -y wget sehingga /usr/bin/wget dapat dikonfirmasi pada eksekusi berikutnya
  • Bocker dijalankan sebagai root dan mengubah antarmuka jaringan, tabel routing, serta aturan firewall, sehingga disarankan menjalankannya di mesin virtual, dan tidak ada jaminan terhadap kemungkinan kerusakan sistem
  • Saat ini telah diimplementasikan docker pull, images, ps, run, exec, logs, commit, rm/rmi, networking, dan kuota berbasis CGroups, tetapi data volume, data volume container, dan port forwarding belum diimplementasikan

Tujuan dan cakupan Bocker

  • Bocker adalah proyek yang mengimplementasikan Docker dalam sekitar 100 baris Bash
  • README memperlihatkan alur perintah yang mirip Docker berbasis Bash, termasuk pengelolaan image, menjalankan container, melihat log, commit perubahan, dan pembatasan resource

Persyaratan menjalankan

  • Paket yang diperlukan untuk menjalankan adalah sebagai berikut
    • btrfs-progs

      • curl
      • iproute2
      • iptables
      • libcgroup-tools
      • util-linux 2.25.2 atau lebih baru
      • coreutils 7.5 atau lebih baru
      • Sebagian besar distribusi tidak menyertakan util-linux yang cukup baru, sehingga ada kemungkinan Anda perlu mengunduh source util-linux 2.25 dan mengompilasinya sendiri
      • Sistem memerlukan konfigurasi berikut
      • filesystem btrfs yang ter-mount di bawah /var/bocker
      • bridge jaringan bernama bridge0 dan IP 10.0.0.1/24
      • IP forwarding diaktifkan pada /proc/sys/net/ipv4/ip_forward
      • konfigurasi firewall yang merutekan traffic dari bridge0 ke antarmuka fisik
      • Vagrantfile disertakan agar lingkungan yang diperlukan dapat dibuat dengan mudah

Hal yang perlu diperhatikan saat menjalankan

  • Meskipun persyaratan terpenuhi, Bocker disarankan dijalankan di mesin virtual
  • Bocker dijalankan sebagai root dan perlu mengubah hal-hal berikut
    • antarmuka jaringan
    • tabel routing
    • aturan firewall
  • README menyatakan bahwa Bocker tidak dapat menjamin sistem Anda tidak akan rusak

Contoh alur penggunaan

  • bocker pull centos 7 akan mengambil image centos:7 dan menghasilkan ID image seperti img_42150
  • bocker images menampilkan ID image dan sumbernya
    • Contoh output: img_42150, centos:7
  • bocker run img_42150 cat /etc/centos-release menampilkan informasi rilis CentOS dari dalam container
    • Contoh output: CentOS Linux release 7.1.1503 (Core)
  • bocker ps menampilkan ID container yang berjalan dan perintahnya
  • bocker logs ps_42045 menampilkan log output dari container tersebut
  • bocker rm ps_42045 menghapus container
  • Saat menjalankan bocker run img_42150 which wget, awalnya akan muncul hasil bahwa wget belum ada
  • Setelah memasang wget dengan bocker run img_42150 yum install -y wget, perubahan dapat diterapkan ke image lewat bocker commit ps_42018 img_42150
  • Setelah itu, bocker run img_42150 which wget akan menampilkan /usr/bin/wget

Pembatasan resource dan CGroups

  • Contoh eksekusi Bocker menunjukkan bahwa container ditempatkan di bawah CGroups
    • Di /proc/1/cgroup muncul entri seperti memory:/ps_42152, cpuacct,cpu:/ps_42152
  • Contoh CPU share default dan batas memori adalah sebagai berikut
    • /sys/fs/cgroup/cpu/ps_42152/cpu.shares: 512
    • /sys/fs/cgroup/memory/ps_42152/memory.limit_in_bytes: 512000000
  • Batas resource dapat diubah melalui environment variable
    • BOCKER_CPU_SHARE=1024
    • BOCKER_MEM_LIMIT=1024
  • Setelah diubah, contoh menunjukkan nilai berikut
    • CPU shares: 1024
    • memory limit: 1024000000

Fitur yang sudah diimplementasikan dan yang belum

  • Fitur yang saat ini sudah diimplementasikan adalah sebagai berikut
    • docker build
    • docker pull
    • docker images
    • docker ps
    • docker run
    • docker exec
    • docker logs
    • docker commit
    • docker rm / docker rmi
    • Networking

      • Quota Support / CGroups
      • bocker init menyediakan implementasi yang sangat terbatas dari docker build
      • Fitur yang belum diimplementasikan adalah sebagai berikut
      • Data Volume Containers
      • Data Volumes
      • Port Forwarding

Lisensi

  • Bocker adalah perangkat lunak bebas yang dapat didistribusikan ulang dan dimodifikasi sesuai ketentuan GNU General Public License
  • Versi lisensinya dapat memilih GPL v3 yang dipublikasikan oleh Free Software Foundation atau versi yang lebih baru
  • Program ini didistribusikan dengan harapan berguna, tetapi tanpa jaminan tersirat apa pun, termasuk kelayakan jual atau kesesuaian untuk tujuan tertentu

1 komentar

 
GN⁺ 2024-11-24
Pendapat Hacker News
  • Saya pernah membuat sesuatu yang mirip dengan proot, namanya Bag [1], dan sepertinya saya tidak mendeskripsikannya sebagai alternatif Docker
    Itu tidak berhubungan dengan cgroups, dan antarmuka baris perintahnya juga berbeda dari Docker. Latar belakangnya adalah saya membuat rantai proxy yang terlihat seperti trafik HTML biasa untuk mengakali sensor internet dan deep packet inspection, dan ia harus terus berjalan di mana saja, tetapi saya tidak ingin mem-porting-nya menjadi aplikasi native Android
    Saya ingin menjalankannya di Termux, tetapi saat itu Termux belum punya JDK/JRE, dan dengan proot menjalankan lingkungan Arch Linux, JDK bisa dipakai. Lingkungan Arch di dalam Termux secara keseluruhan lebih berguna, dan membuat lingkungan sekali pakai dengan konfigurasi berbeda-beda, menghapusnya, lalu masuk lewat proot untuk menjalankan satu perintah saja juga mudah diotomatisasi dengan skrip. Jadi saya menamainya bag.sh, dengan maksud bentuk yang jauh lebih kecil daripada kontainer pengiriman
    Menariknya, di bag.sh masih ada roadmap/TODO yang tidak disentuh selama 5 tahun. Karena ditulis di layar ponsel agar bisa dilihat tanpa menggulir, sebagian besar dirapikan pada lebar 40 kolom
    [1]: https://github.com/hkoosha/bag

    • Sepertinya cukup banyak kisah seperti ini. Dalam situasi ketika VM tidak cocok dan beberapa komponen harus dikemas menjadi satu lingkungan, saya pernah memakai chroot dan deb-bootstrap lalu membuat installer dengan makeself
      Saya membuat Debian kecil di dalam /opt yang berisi software yang dibutuhkan dan dependensi seperti MySQL, dan itu berjalan cukup baik sehingga dipakai sampai perusahaan tempat saya membuatnya diakuisisi sekitar 2016. Secara lebih umum, menurut saya mengimplementasikan sendiri versi kasar dari aplikasi besar adalah salah satu cara terbaik untuk mempelajari cara kerja internalnya
    • Sepertinya skrip itu melewatkan beberapa tanda kutip yang penting. Sebaiknya jalankan shellcheck
      mkdir -p $(dirname "$2")
    • Dengan memutar tablet 8 inci secara horizontal, saya baru bisa mendapatkan sekitar 80x22 dengan ukuran yang benar-benar terbaca
      Jika dipadukan dengan keyboard Bluetooth sekitar 10 inci yang muat nyaman di saku dalam jaket kulit, Anda bisa keluar rumah tanpa tas dan tetap duduk di sudut beer garden terdekat untuk menulis kode. Anehnya ini juga cukup produktif; mungkin karena dibanding laptop, ada sedikit lebih banyak gesekan untuk beralih ke hal-hal yang biasanya mengganggu, sehingga Anda malah terus menatap kode sambil menyesap bir
  • Saya suka hal-hal seperti ini. Saya selalu menyukai sesuatu yang dibuat dengan Bash minimal
    Ada juga proof of concept load balancer internal klaster 40 baris Bash yang dibuat di hackathon yang saya selenggarakan sekitar 10 tahun lalu untuk memperkenalkan infrastruktur terdistribusi seperti Docker dan Mesos: https://github.com/cell-os/metal-cell/blob/master/discovery/...
    Mungkin sudah hilang, tetapi dulu juga ada alat transfer colo-to-cloud berbasis reverse SSH tunnel yang redundan dan terdistribusi. Kumpulan seperti ini tersusun rapi di Shell Fu dan sejenisnya: https://www.shell-fu.org/

    • shell-fu.org bagus sekali, tetapi saya juga ingin melihat komentar dari pengguna lain
  • Fakta bahwa bagian besar Docker bisa diimplementasikan ulang sesederhana ini adalah masalah terbesar yang pernah dan masih dihadapi Docker sebagai perusahaan. Pada dasarnya, Docker lebih mirip kode perekat yang merangkai fitur-fitur kernel
    Tempat Docker benar-benar menambahkan nilai bukan hanya Docker Hub, melainkan Docker for Windows dan Mac. Pengalaman terintegrasinya jauh lebih baik daripada harus mengutak-atik VirtualBox dan Vagrant sendiri untuk menjalankan Docker di mesin pengembangan

    • Rancher Desktop juga pilihan praktis dan gratis. Setelah lisensi baru Docker diberlakukan, banyak tempat, termasuk kantor saya, pindah ke sana
      Secara pribadi, menurut saya keajaiban sebenarnya dari Docker adalah format image Docker/OCI. Itu menangani caching dan distribusi image container dengan sangat baik, dan masih menjadi inti yang membedakan workflow ini dari VM “utuh”
    • Docker Desktop di Mac adalah kekacauan yang penuh batasan dan kekurangan izin. Menggunakan Docker CLI dan Colima di Mac juga tetap punya batasan izin, tetapi setidaknya bisa menghindari lisensi yang tidak masuk akal dan GUI Docker
      Di Windows, Docker bisa dipakai lewat WSL dan berjalan sangat baik. Sulit memahami mengapa orang memakai Docker Desktop
    • Di macOS saya cukup memakai Colima, pengalamannya jauh lebih baik dan jauh lebih ringan
    • Tidak, Docker seharusnya lebih dulu membuat PaaS seperti CloudRun, Render, dan Fly, lalu menjualnya mahal ke perusahaan
      Sebaliknya mereka membuat Docker Swarm yang setengah matang dan tidak berjalan andal dengan semestinya, lalu cepat tersingkir oleh Kubernetes
    • Di antara sistem yang populer dan menghasilkan uang, banyak yang bisa diimplementasikan ulang dengan “mudah”. Saya pikir nilai Docker ada pada image Docker, dan sepertinya memang begitulah Docker digunakan
      Cara saya memakainya hanya untuk mengambil lingkungan build virtual milik seseorang demi membangun software beberapa tahun lalu
  • Di repositori ada frasa seperti “belum diimplementasikan”, “TODO”, dan “sedang dikerjakan”, dan rasanya menyenangkan melihat commit terakhirnya sudah bertahun-tahun lalu
    Aku jadi merasa sedikit lebih tenang karena tidak kembali melihat TODO yang kusebar di kodeku. Bukan bermaksud merendahkan pembuatnya, hanya saja ini terasa menghibur

    • Poin yang bagus. Sama sekali bukan merendahkan; justru bagus karena menormalisasi kondisi seperti ini
      Kalau pada kode yang tidak dibayar, sukarela, dan hobi kita merasa terbebani harus melakukannya hanya karena kodenya dipublikasikan, coding jadi kurang menyenangkan, dan bisa membuat kita tidak memublikasikan kode yang tadinya akan kita buka
    • Menurutku sebagian besar proyek, mungkin semua proyek, tidak pernah benar-benar selesai. Yang penting adalah tahu kapan harus berhenti
    • Menurutku itu bagus. Sesuatu bisa saja sekadar selesai, dan tidak harus selalu ada banyak ide berikutnya, tetapi biasanya memang selalu ada ide berikutnya
      Kalau selalu ada ide berikutnya, maka secara definisi akan selalu ada TODO yang belum diselesaikan. Sebenarnya, keadaan normal semua proyek memang seharusnya seperti itu
    • Saat memulai proyek, ada baiknya meluangkan waktu memikirkan “non-tujuan”, yaitu fitur-fitur yang terpikirkan tetapi sengaja tidak akan diimplementasikan
      Menetapkan batas cakupan yang jelas itu sepenuhnya wajar dan sering membantu. Dengan begitu, proyek tidak terasa selamanya “belum selesai” karena kita mengejar jalur sampingan
    • Sama sekali tidak masalah. Kalau programnya sudah melakukan apa yang kuinginkan dan pekerjaanku selesai, aku berhenti mengembangkannya. Perangkat lunak bukan hobiku
  • Mengejutkan lazydocker belum disebut sebagai alternatif yang sangat bagus untuk Docker Desktop. Bisa dipakai di Linux/macOS/Windows [1]
    Ini UI terminal yang cukup kaya fitur, dan punya kelebihan bisa dijalankan lewat SSH
    [1] https://github.com/jesseduffield/lazydocker

    • Secara harfiah baru muncul beberapa hari lalu: https://news.ycombinator.com/item?id=42214873
    • Lazydocker memang terlihat menarik, tetapi memasukkan iklan promosi diri untuk produk dari ranah yang benar-benar berbeda ke README.md proyek open source itu agak berlebihan
      Setidaknya ini pertama kalinya aku melihat hal seperti itu. Aku juga penasaran apakah iklan semacam ini diperbolehkan oleh ketentuan layanan atau kebijakan penggunaan yang diizinkan GitHub
  • Aku penasaran kenapa Bocker begitu sering masuk halaman depan. Pada 2024, apakah Docker masih sekontroversial itu?
    Aku tidak mengerti kenapa orang tidak mau mengakui bahwa Docker menghadirkan hal yang benar-benar berguna, terutama distribusi perangkat lunak dan “mudah dijalankan di mana saja”

    • Ini hanya alat belajar untuk melihat bagaimana Docker bekerja
      Docker adalah gabungan teknologi kernel yang sudah ada sebelumnya. Namespace, cgroups, union file system, dan mungkin beberapa hal lainnya
    • Alasan sering masuk halaman depan adalah banyak orang mengira Docker itu sesuatu yang sangat rumit, padahal pada level paling mendasar sebenarnya cukup elegan dan bisa dipahami
      Karena itu menarik, dan pada dasarnya ini kisah bergaya HN yang sempurna
    • Mungkin ini masuk halaman depan bukan untuk merendahkan Docker, melainkan karena orang melihat Docker berguna dan ingin tahu bagaimana cara kerjanya. Bocker bisa menjadi pintu masuk ke teknologi-teknologi itu
    • Di perusahaan, aku membawa dan menunjukkan overlayfs untuk memangkas proses CI yang panjang, dan semua orang terkejut dengan peningkatan kecepatannya
      Baru setelah mendemokannya ke beberapa orang, aku sadar mereka sebenarnya bisa saja memakai /, atau aku bisa saja membawakan Docker untuk mereka
  • Ada semacam saudara dari ibu yang berbeda di https://bastillebsd.org/
    Bastille mengelola FreeBSD jail dengan shell, menggunakan banyak struktur yang biasa terlihat di Docker. Dependensinya sangat sedikit, jadi aku lebih menyukainya dibanding perangkat lunak manajemen jail lain di BSD

    • cbsd juga cukup mengesankan: shttps://www.bsdstore.ru/en/about.html
      Namun meski ini alat berbasis CLI/TUI, solusinya mendekati “paling berlebihan”. Belakangan ini aku sedang melalui tahap membuat dan mengelola jail hanya dengan konfigurasi bawaan FreeBSD, tetapi ini cuma tahap sementara
      Aku hanya akan melakukannya sampai cukup tertanam di kepalaku bagaimana semuanya saling terhubung sehingga aku percaya diri untuk debugging; setelah itu, seperti orang waras, aku akan berhenti membentur-benturkan batu dan kembali ke alat tingkat lebih tinggi
    • Betul. Untuk shell script sekitar 100 baris, nilainya banyak sekali
      Tapi aku butuh waktu agak lama untuk memahami kenapa namanya Bastille. La Bastille adalah benteng yang dibangun untuk mempertahankan Paris dari serangan Inggris selama Perang Seratus Tahun, lalu kemudian diubah menjadi penjara
  • Bagian yang berbunyi “sebagian besar distro tidak menyediakan util-linux versi yang cukup baru, jadi Anda mungkin harus mengambil sumbernya dari sini dan mengompilasinya sendiri” perlu diwaspadai
    Prefiks instalasi default-nya adalah /usr/bin, jadi proses instalasi bisa menimpa perintah mount yang ada dengan versi yang membutuhkan pustaka yang tidak ada. Akibatnya, pada boot berikutnya kernel akan memasang sistem berkas sebagai read-only

    • Seharusnya /usr/local/bin
  • Tidak bagus untuk dipakai sehari-hari, tetapi memberi gambaran tentang apa itu Docker dan bagaimana cara kerjanya
    Di Linux, Docker pada dasarnya adalah chroot mewah

    • Di macOS/Windows dan sejenisnya, Docker pada dasarnya adalah chroot mewah di dalam VM Linux
  • Fakta menarik: Docker dimulai dengan Bash, lalu berpindah ke Python, dan akhirnya menetap di Go
    Selain itu, pada meetup Docker tahun 2013, seseorang menulis klon Docker dengan Bash. Orang-orang ingin belajar, dan semoga hal-hal seperti ini membantu