Tạo Linux Containers trong 500 dòng mã
tsudev· 06/10/2026
Giới thiệu về Linux Containers
Linux Containers là một công nghệ giúp tạo ra các môi trường ảo hóa trên hệ thống Linux. Công nghệ này cho phép tạo ra các container độc lập, mỗi container có thể chạy một hệ điều hành riêng biệt và các ứng dụng riêng biệt. Điều này giúp tăng cường bảo mật, hiệu suất và tính linh hoạt cho hệ thống.Tạo Linux Containers
Để tạo ra một Linux Container, chúng ta cần sử dụng các công cụ nhưrunc hoặc docker. Trong ví dụ này, chúng ta sẽ sử dụng runc để tạo ra một container đơn giản. Trước tiên, chúng ta cần tạo ra một tệp tin cấu hình cho container, bao gồm các thông tin như tên container, đường dẫn đến hệ điều hành và các tùy chọn khác.
bash
# Tạo tệp tin cấu hình cho container
cat > config.json <<EOF
{
"ociVersion": "1.0.1",
"process": {
"terminal": true,
"user": {
"uid": 0,
"gid": 0
},
"args": [
"/bin/sh"
],
"env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"cwd": "/",
"capabilities": {
"bounding": [
"CAP_CHOWN",
"CAP_DAC_OVERRIDE",
"CAP_FOWNER",
"CAP_FSETID",
"CAP_KILL",
"CAP_NET_BIND_SERVICE",
"CAP_NET_RAW",
"CAP_SETGID",
"CAP_SETUID",
"CAP_SETPCAP",
"CAP_NET_ADMIN",
"CAP_SYS_ADMIN"
],
"effective": [
"CAP_CHOWN",
"CAP_DAC_OVERRIDE",
"CAP_FOWNER",
"CAP_FSETID",
"CAP_KILL",
"CAP_NET_BIND_SERVICE",
"CAP_NET_RAW",
"CAP_SETGID",
"CAP_SETUID",
"CAP_SETPCAP",
"CAP_NET_ADMIN",
"CAP_SYS_ADMIN"
],
"inheritable": [
"CAP_CHOWN",
"CAP_DAC_OVERRIDE",
"CAP_FOWNER",
"CAP_FSETID",
"CAP_KILL",
"CAP_NET_BIND_SERVICE",
"CAP_NET_RAW",
"CAP_SETGID",
"CAP_SETUID",
"CAP_SETPCAP",
"CAP_NET_ADMIN",
"CAP_SYS_ADMIN"
],
"permitted": [
"CAP_CHOWN",
"CAP_DAC_OVERRIDE",
"CAP_FOWNER",
"CAP_FSETID",
"CAP_KILL",
"CAP_NET_BIND_SERVICE",
"CAP_NET_RAW",
"CAP_SETGID",
"CAP_SETUID",
"CAP_SETPCAP",
"CAP_NET_ADMIN",
"CAP_SYS_ADMIN"
]
},
"rlimits": [
{
"type": "RLIMIT_CORE",
"hard": 0,
"soft": 0
},
{
"type": "RLIMIT_CPU",
"hard": 0,
"soft": 0
},
{
"type": "RLIMIT_DATA",
"hard": 0,
"soft": 0
},
{
"type": "RLIMIT_FSIZE",
"hard": 0,
"soft": 0
},
{
"type": "RLIMIT_MEMLOCK",
"hard": 0,
"soft": 0
},
{
"type": "RLIMIT_NOFILE",
"hard": 1024,
"soft": 1024
},
{
"type": "RLIMIT_NPROC",
"hard": 0,
"soft": 0
},
{
"type": "RLIMIT_RTPRIO",
"hard": 0,
"soft": 0
},
{
"type": "RLIMIT_STACK",
"hard": 0,
"soft": 0
}
],
"noNewPrivs": true
},
"root": {
"path": "/",
"readonly": true
},
"mounts": [
{
"destination": "/proc",
"type": "proc",
"source": "proc"
},
{
"destination": "/sys",
"type": "sysfs",
"source": "sys"
},
{
"destination": "/dev",
"type": "tmpfs",
"source": "tmpfs",
"options": [
"nosuid",
"strictatime",
"mode=755",
"size=65536k"
]
},
{
"destination": "/dev/pts",
"type": "devpts",
"source": "devpts",
"options": [
"nosuid",
"noexec",
"newinstance",
"ptmxmode=0666",
"mode=0620"
]
},
{
"destination": "/dev/shm",
"type": "tmpfs",
"source": "tmpfs",
"options": [
"nosuid",
"noexec",
"nodev",
"mode=1777",
"size=65536k"
]
},
{
"destination": "/dev/mqueue",
"type": "mqueue",
"source": "mqueue",
"options": [
"nosuid",
"noexec",
"nodev"
]
},
{
"destination": "/sys/fs/cgroup",
"type": "cgroup",
"source": "cgroup",
"options": [
"nosuid",
"noexec",
"nodev",
"relatime"
]
}
],
"hostname": "mycontainer",
"network": {
"namespaces": [
"ipc",
"mnt",
"net",
"pid",
"user",
"uts"
]
}
}
EOF
Sau khi tạo tệp tin cấu hình, chúng ta có thể sử dụng runc để tạo ra container.
bash
# Tạo container
runc run mycontainer
Kết luận
Tạo Linux Containers trong 500 dòng mã là một công việc khá đơn giản. Với các công cụ nhưrunc hoặc docker, chúng ta có thể tạo ra các môi trường ảo hóa trên hệ thống Linux một cách dễ dàng. Để tìm hiểu thêm về Linux Containers, bạn có thể tham khảo các nguồn tài liệu sau:
- https://blog.lizzie.io/linux-containers-in-500-loc.html