ระบบ Container ที่ เหมือน Virtual Machine
เปิดใช้งาน Rootless Containers ให้รัน systemd, Docker, Kubernetes ได้เหมือน VM แบบสมบูรณ์ โดยไม่ต้องใช้ Privileged Mode หรือ Hardware Virtualization
Sysbox ใช้ Linux user-namespace เพื่อทำให้ root user ภายใน container มีสิทธิ์เป็น zero ต่อ host system ป้องกันการ container breakout
Containers ของ Sysbox สามารถรัน software ระดับระบบได้เหมือน VM: systemd, Docker, Kubernetes, K3s, buildx และอื่นๆ
รัน microservices ได้ดี
รัน systemd ไม่ได้
รัน Docker ได้แต่ต้องใช้ privileged
รัน Kubernetes ได้แต่ต้องใช้ privileged
รัน microservices ได้ดี
รัน systemd ได้ตามปกติ
รัน Docker ได้โดยไม่ต้องใช้ privileged
รัน Kubernetes ได้โดยไม่ต้องใช้ privileged
ใช้ Sysbox สร้าง development container ที่เหมือน VM สำหรับพัฒนาแอปพลิเคชัน สามารถติดตั้งและรัน service ต่างๆ ได้ทั้ง systemd, Docker, และ IDE
เรียนรู้เพิ่มเติมสร้าง Docker-in-Docker (DinD) หรือ Kubernetes-in-Docker (KinD) สำหรับ CI/CD โดยไม่ต้องใช้ privileged container หรือ host Docker socket
เรียนรู้เพิ่มเติมย้าย legacy application ที่ต้องการ systemd หรือ service manager ไป run บน container แทน VM เพื่อลดค่าใช้จ่ายและเพิ่มความยืดหยุ่น
เรียนรู้เพิ่มเติมแบ่งbare-metal host หรือ cloud instance ออกเป็นหลาย environment ที่แยกกันได้ดี โดยมี density สูงกว่า VM ถึง 2 เท่า
เรียนรู้เพิ่มเติมสร้าง environment สำหรับเรียนรู้ Docker, Kubernetes, systemd โดยไม่ต้องกังวลเรื่อง security และสามารถ reset ได้ง่าย
เรียนรู้เพิ่มเติมใช้ Sysbox บน edge device เพื่อแยก workload แต่ละตัวออกจากกัน โดยไม่ต้องใช้ heavy hypervisor
เรียนรู้เพิ่มเติมSysbox ทำให้ container สามารถรัน system-level software ได้ โดยไม่ต้องเปลี่ยนโค้ดหรือใช้ special versions
ต่างจาก Kata Containers หรือ KubeVirt ที่ใช้ VM Sysbox ใช้ OS virtualization ที่เบาและเร็วกว่า
แนะนำอย่างน้อย 4 CPUs (2 cores with 2 hyperthreads) และ 4GB RAM ถึงแม้จะรันได้กับ configuration เล็กกว่านี้ แต่Sysbox จะทำงานช้าลง
รองรับ Linux distros ที่มี kernel รุ่นใหม่:
kernel ต้องรองรับ:
Sysbox ใช้ user namespace ซึ่งบาง distro อาจปิดใช้งาน user namespace ไว้ ให้ตรวจสอบว่า user namespace ถูกเปิดใช้งานแล้ว:
ค่าควรเป็น 1 หากเป็น 0 ให้ตั้งค่าด้วย:
echo 1 | sudo tee /proc/sys/kernel/unprivileged_userns_clone
ใช้คำสั่งติดตั้ง deb package สำหรับ Ubuntu และ Debian
ขั้นตอนที่ 1: ติดตั้ง dependency packages ก่อน
sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg lsb-release
ขั้นตอนที่ 2: เพิ่ม GPG key ของ Sysbox repository
curl -fsSL https://nestybox.github.io/sysbox-repo/packages/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/sysbox-keyring.gpg
ขั้นตอนที่ 3: เพิ่ม Sysbox repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/sysbox-keyring.gpg] https://nestybox.github.io/sysbox-repo/packages/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/sysbox.list > /dev/null
ขั้นตอนที่ 4: ติดตั้ง Sysbox
sudo apt-get update && sudo apt-get install sysbox-ce
ขั้นตอนที่ 5: ตรวจสอบการติดตั้ง
docker info --format '{{json .Runtimes}}' | jq '.'
ควรเห็น sysbox-runc ใน output:
"sysbox-runc": { "path": "sysbox-runc", ... }
ใช้คำสั่งติดตั้ง rpm package สำหรับ CentOS และ RHEL
ขั้นตอนที่ 1: ติดตั้ง dependency packages
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
ขั้นตอนที่ 2: เพิ่ม Sysbox repository
sudo yum-config-manager --add-repo https://nestybox.github.io/sysbox-repo/packages/rpm/sysbox-ce.repo
ขั้นตอนที่ 3: ติดตั้ง Sysbox
sudo yum install sysbox-ce
ขั้นตอนที่ 4: เริ่ม Docker service (ถ้ายังไม่ได้เริ่ม)
sudo systemctl enable docker && sudo systemctl start docker
ขั้นตอนที่ 5: ตรวจสอบ runtime
docker info --format '{{json .Runtimes}}' | jq '.'
ใช้ daemonset เพื่อติดตั้ง Sysbox บน Kubernetes cluster
ขั้นตอนที่ 1: Download sysbox-deploy-k8s daemonset
curl -fsSL https://nestybox.github.io/sysbox-deploy-k8s/sysbox-deploy-k8s.yml -o sysbox-deploy-k8s.yml
ขั้นตอนที่ 2: Applied daemonset
kubectl apply -f sysbox-deploy-k8s.yml
ขั้นตอนที่ 3: ตรวจสอบ daemonset
kubectl get daemonset sysbox-deploy -n kube-system
ขั้นตอนที่ 4: ใช้ runtimeClassName ใน pod spec
สำหรับผู้ที่ต้องการ build จาก source หรือใช้ version ล่าสุด
ขั้นตอนที่ 1: Clone repository
git clone https://github.com/nestybox/sysbox.git && cd sysbox
ขั้นตอนที่ 2: Build binary
make build
หรือ build แบบ static:
make build-static
ขั้นตอนที่ 3: Install
sudo make install
ขั้นตอนที่ 4: Build and install Docker
cd docker && make build && sudo make install
ทดสอบว่า Sysbox ทำงานได้ถูกต้อง
Test 1: สร้าง container ที่รัน systemd
docker run --runtime=sysbox-runc -it --rm docker.io/nestybox/ubuntu-jammy-systemd
ใน container ให้ลองรัน:
systemctl status
Test 2: สร้าง container ที่รัน Docker
docker run --runtime=sysbox-runc -d --name my-docker -it docker.io/nestybox/ubuntu-jammy-docker
docker exec -it my-docker sh -c 'docker run hello-world'
Test 3: สร้าง container ที่รัน Kubernetes (k3s)
docker run --runtime=sysbox-runc -d --name my-k3s docker.io/nestybox/ubuntu-jammy-k3s
หมายเหตุ: การรัน Kubernetes ต้องใช้
--privileged
เนื่องจากต้องการ access ToDevice files สำหรับ network configuration
สร้าง container ที่มีสภาพแวดล้อมเหมือน VM สำหรับพัฒนาแอปพลิเคชัน
docker run --runtime=sysbox-runc -d --name dev-env -p 3000:3000 -v $(pwd):/workspace docker.io/nestybox/ubuntu-jammy-code
หรือใช้ Docker Compose:
สร้าง DinD environment สำหรับ Build และ Test โดยไม่ต้องใช้privileged container หรือ host Docker socket
docker run --runtime=sysbox-runc -d --name gitlab-runner -v /var/run/gitlab-runner:/etc/gitlab-runner docker.io/nestybox/ubuntu-jammy-docker-gitlab
หรือใช้ GitLab CI .gitlab-ci.yml:
ใช้ systemd ภายใน container เพื่อจัดการ service ต่างๆ
docker run --runtime=sysbox-runc -d --name my-service -p 8080:80 docker.io/nestybox/ubuntu-jammy-systemd
systemctl enable nginx && systemctl start nginx
systemctl status nginx
อาการ: รับ error Failed to mount cgroup at /sys/fs/cgroup/systemd: Operation not permitted
วิธีแก้: ต้องใช้ runtime sysbox-runc เมื่อรัน container:
docker run --runtime=sysbox-runc -it ubuntu
อาการ: รับ error docker: Error response from daemon: Open /var/run/docker.sock: no such file or directory
วิธีแก้: นี่เป็น Docker-in-Docker (DinD) ที่ต้องใช้ privileged container สำหรับ network setup
docker run --runtime=sysbox-runc -d --name my-docker --privileged docker.io/nestybox/ubuntu-jammy-docker
หมายเหตุ: แม้จะใช้ --privileged แต่ยังปลอดภัยกว่าการใช้ privileged container ตรงที่
sysbox-runc ยังคงจำกัด access ต่อ host devices
อาการ: รับ error user namespace support is disabled
วิธีแก้: เปิดใช้งาน unprivileged user namespace
echo 1 | sudo tee /proc/sys/kernel/unprivileged_userns_clone
echo 'kernel.unprivileged_userns_clone = 1' | sudo tee /etc/sysctl.d/99-userns.conf
เพื่อให้ permanent ให้รันคำสั่งที่สองเพื่อบันทึกไว้ใน config file
อาการ:Sysbox ทำงานไม่ถูกต้องหรือรับ error ที่เกี่ยวข้องกับ kernel features
วิธีแก้: อัปเกรด kernel ให้เป็นรุ่นใหม่กว่า 5.0
uname -r
ควรเห็น kernel version เป็น 5.0 ขึ้นไป เช่น 5.15.0-generic
อาการ: Container ไม่สามารถเชื่อมต่อ internet หรือ network อื่นได้
วิธีแก้: ตรวจสอบ Docker network configuration และ user namespace
docker info | grep Userns
ควรเห็น Userns: auto (size=65536)
| คุณสมบัติ | Sysbox | Docker (runc) | Kata Containers | Containerd |
|---|---|---|---|---|
| Runtime Type | Container Runtime | OCI runc | VM-based | Container Runtime |
| User Namespace | Yes (Default) | Not enabled | Yes | Yes (Optional) |
| รัน systemd | Yes | No | Yes | No |
| รัน Docker (DinD) | Yes (No priv) | Yes (Privileged) | Yes | Yes (Privileged) |
| รัน Kubernetes | Yes | No | Yes | Yes (via CRI) |
| Performance | Near-native | Native | VM Overhead | Native |
| Ease of Use | Easy | Easy | Medium | Medium |
| Cost | Free OSS | Free OSS | Free OSS | Free OSS |