อัปเดตล่าสุด 2025

Sysbox Runtime

ระบบ Container ที่ เหมือน Virtual Machine

เปิดใช้งาน Rootless Containers ให้รัน systemd, Docker, Kubernetes ได้เหมือน VM แบบสมบูรณ์ โดยไม่ต้องใช้ Privileged Mode หรือ Hardware Virtualization

Rootless
Systemd
Docker
Kubernetes

Sysbox Runtime คืออะไร?

Container Isolation ที่แข็งแกร่ง

Sysbox ใช้ Linux user-namespace เพื่อทำให้ root user ภายใน container มีสิทธิ์เป็น zero ต่อ host system ป้องกันการ container breakout

User Namespace Procfs Virtualization Sysfs Virtualization

รัน System Workloads ได้

Containers ของ Sysbox สามารถรัน software ระดับระบบได้เหมือน VM: systemd, Docker, Kubernetes, K3s, buildx และอื่นๆ

systemd Docker DinD Kubernetes

ความแตกต่างของ Sysbox

แบบ Container ทั่วไป

รัน microservices ได้ดี

รัน systemd ไม่ได้

รัน Docker ได้แต่ต้องใช้ privileged

รัน Kubernetes ได้แต่ต้องใช้ privileged

Sysbox Container

รัน microservices ได้ดี

รัน systemd ได้ตามปกติ

รัน Docker ได้โดยไม่ต้องใช้ privileged

รัน Kubernetes ได้โดยไม่ต้องใช้ privileged

Use Cases ของ Sysbox Runtime

Development Environment

ใช้ Sysbox สร้าง development container ที่เหมือน VM สำหรับพัฒนาแอปพลิเคชัน สามารถติดตั้งและรัน service ต่างๆ ได้ทั้ง systemd, Docker, และ IDE

เรียนรู้เพิ่มเติม

CI/CD Pipeline

สร้าง Docker-in-Docker (DinD) หรือ Kubernetes-in-Docker (KinD) สำหรับ CI/CD โดยไม่ต้องใช้ privileged container หรือ host Docker socket

เรียนรู้เพิ่มเติม

Legacy Application Migration

ย้าย legacy application ที่ต้องการ systemd หรือ service manager ไป run บน container แทน VM เพื่อลดค่าใช้จ่ายและเพิ่มความยืดหยุ่น

เรียนรู้เพิ่มเติม

Multi-Tenant Environment

แบ่งbare-metal host หรือ cloud instance ออกเป็นหลาย environment ที่แยกกันได้ดี โดยมี density สูงกว่า VM ถึง 2 เท่า

เรียนรู้เพิ่มเติม

Learning & Training

สร้าง environment สำหรับเรียนรู้ Docker, Kubernetes, systemd โดยไม่ต้องกังวลเรื่อง security และสามารถ reset ได้ง่าย

เรียนรู้เพิ่มเติม

Edge Computing

ใช้ Sysbox บน edge device เพื่อแยก workload แต่ละตัวออกจากกัน โดยไม่ต้องใช้ heavy hypervisor

เรียนรู้เพิ่มเติม

Architecture ของ Sysbox

How Sysbox Works

Container User Namespace Sysbox Runtime Virtualized Procfs & Sysfs Host System Kernel (runc) containerd userns cgroups Container Runtime Kernel System

Container Supercharger

Sysbox ทำให้ container สามารถรัน system-level software ได้ โดยไม่ต้องเปลี่ยนโค้ดหรือใช้ special versions

No VM Overhead

ต่างจาก Kata Containers หรือ KubeVirt ที่ใช้ VM Sysbox ใช้ OS virtualization ที่เบาและเร็วกว่า

สิ่งที่ต้องเตรียม (Prerequisites)

ข้อกำหนดของ Host

CPU และ Memory

แนะนำอย่างน้อย 4 CPUs (2 cores with 2 hyperthreads) และ 4GB RAM ถึงแม้จะรันได้กับ configuration เล็กกว่านี้ แต่Sysbox จะทำงานช้าลง

Linux Distribution

รองรับ Linux distros ที่มี kernel รุ่นใหม่:

  • Ubuntu 20.04, 22.04, 24.04 (หรือใหม่กว่า)
  • Debian 11 (Bullseye), 12 (Bookworm)
  • CentOS/RHEL 8, 9
  • Fedora 36 ขึ้นไป
  • Amazon Linux 2023

Kernel Requirements

kernel ต้องรองรับ:

  • User namespaces (userns)
  • Cgroup v1 หรือ Cgroup v2
  • Overlay filesystem
  • Namespaces (pid, net, mount, ฯลฯ)

ข้อควรระวัง

Sysbox ใช้ user namespace ซึ่งบาง distro อาจปิดใช้งาน user namespace ไว้ ให้ตรวจสอบว่า user namespace ถูกเปิดใช้งานแล้ว:

$ cat /proc/sys/kernel/unprivileged_userns_clone

ค่าควรเป็น 1 หากเป็น 0 ให้ตั้งค่าด้วย: echo 1 | sudo tee /proc/sys/kernel/unprivileged_userns_clone

วิธีการติดตั้ง Sysbox Runtime

1

ติดตั้งบน Ubuntu/Debian

ใช้คำสั่งติดตั้ง 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", ... }

2

ติดตั้งบน CentOS/RHEL

ใช้คำสั่งติดตั้ง 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 '.'
3

ติดตั้งบน Kubernetes

ใช้ 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

# ตัวอย่าง Pod Spec ที่ใช้ Sysbox
apiVersion: v1
kind: Pod
metadata:
name: ubu-bionic-systemd-docker
annotations:
io.kubernetes.cri-o.userns-mode: "auto:size=65536"
spec:
runtimeClassName: sysbox-runc
containers:
- name: ubu-bionic-systemd-docker
image: registry.nestybox.com/nestybox/ubuntu-bionic-systemd-docker
command: ["/sbin/init"]
restartPolicy: Never
4

ติดตั้งจาก Source Code

สำหรับผู้ที่ต้องการ 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
5

ทดสอบการทำงาน

ทดสอบว่า 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

ตัวอย่างการใช้งาน Sysbox

ตัวอย่างที่ 1: Development Environment แบบ Container

สร้าง container ที่มีสภาพแวดล้อมเหมือน VM สำหรับพัฒนาแอปพลิเคชัน

bash
docker run --runtime=sysbox-runc -d --name dev-env -p 3000:3000 -v $(pwd):/workspace docker.io/nestybox/ubuntu-jammy-code

หรือใช้ Docker Compose:

docker-compose.yml
version: "3.8"
services:
dev:
image: "nestybox/ubuntu-jammy-code"
runtime: "sysbox-runc"
ports:
- "3000:3000"
volumes:
- ".:/workspace"

ตัวอย่างที่ 2: CI/CD Pipeline ด้วย Docker-in-Docker

สร้าง DinD environment สำหรับ Build และ Test โดยไม่ต้องใช้privileged container หรือ host Docker socket

bash
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:

.gitlab-ci.yml
image: "nestybox/ubuntu-jammy-docker"
services:
- name: "nestybox/ubuntu-jammy-docker"
runtime: "sysbox-runc"
build:
script:
- docker build -t myapp:$CI_COMMIT_SHA .
- docker push myapp:$CI_COMMIT_SHA

ตัวอย่างที่ 3: systemd Container สำหรับ Service Manager

ใช้ systemd ภายใน container เพื่อจัดการ service ต่างๆ

bash
docker run --runtime=sysbox-runc -d --name my-service -p 8080:80 docker.io/nestybox/ubuntu-jammy-systemd
bash (inside container)
systemctl enable nginx && systemctl start nginx
bash (inside container)
systemctl status nginx

แก้ไขปัญหาที่พบบ่อย (Troubleshooting)

Container ไม่สามารถรัน systemd ได้

อาการ: รับ error Failed to mount cgroup at /sys/fs/cgroup/systemd: Operation not permitted

วิธีแก้: ต้องใช้ runtime sysbox-runc เมื่อรัน container:

docker run --runtime=sysbox-runc -it ubuntu

Docker daemon ไม่สามารถเริ่มภายใน container ได้

อาการ: รับ 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

User namespace ไม่ถูกเปิดใช้งาน

อาการ: รับ 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

Kernel รุ่นเก่าเกินไป

อาการ:Sysbox ทำงานไม่ถูกต้องหรือรับ error ที่เกี่ยวข้องกับ kernel features

วิธีแก้: อัปเกรด kernel ให้เป็นรุ่นใหม่กว่า 5.0

uname -r

ควรเห็น kernel version เป็น 5.0 ขึ้นไป เช่น 5.15.0-generic

ปัญหา network ภายใน container

อาการ: Container ไม่สามารถเชื่อมต่อ internet หรือ network อื่นได้

วิธีแก้: ตรวจสอบ Docker network configuration และ user namespace

docker info | grep Userns

ควรเห็น Userns: auto (size=65536)

Sysbox vs คู่แข่ง (Competitors Comparison)

คุณสมบัติ 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