Ghi chép lại quá trình tìm hiểu Docker
Docker sử dụng rất nhiều tính năng của Linux Kernal để có thể cung cấp các chức năng của nó.
Mỗi khía cạnh trong container đều được chạy trong các namespaces riêng và truy cập của container được giới hạn trong namespace đó.
Thư mục /proc/
Để vào namespace của một container Docker:
PID=$(docker inspect --format <container-id>)
echo $PID
nsenter
để truy cập vào namespace của process:
sudo nsenter --target $PID --mount --uts --ipc --net --pid /bin/sh
Một Cgroup giới hạn một ứng dụng trong một lượng tài nguyên chỉ định. Nó giúp Docker chia sẻ tài nguyên phần cứng cho container và có thể tùy chọn giới hạn chúng.
Docker sử dụng các cgroup sau:
root@dell:/sys/fs/cgroup# find /sys/fs/cgroup/ -name docker
/sys/fs/cgroup/perf_event/docker
/sys/fs/cgroup/cpuset/docker
/sys/fs/cgroup/pids/docker
/sys/fs/cgroup/blkio/docker
/sys/fs/cgroup/freezer/docker
/sys/fs/cgroup/memory/docker
/sys/fs/cgroup/devices/docker
/sys/fs/cgroup/cpu,cpuacct/docker
/sys/fs/cgroup/net_cls,net_prio/docker
/sys/fs/cgroup/hugetlb/docker
/sys/fs/cgroup/systemd/docker
Union file systems hoạt động bằng việc tạo nhiều lớp và khiến chúng nhẹ và nhanh. Docker Engine sử dụng UnionFS để cung cấp building block cho các container. Docker có thể sử dụng nhiều biến thể của UnionFS, bao gồm AUFS, btrfs, vfs, devicemapper.
Docker Engine gộp namespace, control group và Unionfs thành một khái niệm bao bọc là container format. Container format mặc định là libcontainer
Docker Engine tận dụng những tính năng của kernel như AppArmor, Seccomp, Capabilities cho mục đích bảo mật
o o o o o o o o
Tài liệu tham khảo: