Не так давно я решил упороться по некоторым штукам, поставляемых ядром линукс. К примеру -
unshare, cgroups, apparmor, capabilities and etc. Почти все это используется для реализации изолированных окружений, которые, в целом, могут быть названы контейнером.Сами контейнеры, если мы говорим о таком вендоре, как Docker, работают на основе технологий, описанных выше, а также используют некоторый сисколлы, на типе:
fork, prctl, clone и другие. Неплохой разбор относительно того, что происходит после запуска контейнеров, может быть найден в видео от LiveOverflow (тык). Понятное дело, что это лишь вершина айсберга. Для того, чтоб сложилась полная картина мира, мне пришлось потратить достаточно большое количество времени на своего рода ресерч. В конце-концов, я нашел выжимку по namespaces, ознакомиться можно тут. Но если этого вдруг будет мало, то вот весь перечень материалов, которые были использованы мной для полного ознакомления с тем, как работают неймспейсы, что и куда мапится и так далее:
1. Цикл статей по namespaces.
2. Более глубокое погружение в недра линукса - ознакомление с необходимыми сисколами.
3. seccomp в контексте контейнеров.
4. Контрольные группы - cgroups v1 - руководство для чайников.
5. cgroupsv1 vs cgroup v2.
6. Создаем свою контрольную группу.
7. Linux kernel Namespaces and cgroups - resource management.
8. Создаем свои изолированные среды с использованием unshare.
9. PID Namespace - изоляция дерева процессов.
10. Примеры кода на языке программирования Си, позволяющего исполнять что-либо в контексте namespaces.
11. Unshare - man (самое полезная дока за всю мою жизнь).
К посту будет прекреплена моя преза по созданию изолированных окружений с использованием
unshare. Там еще есть совсем немного про контрольные группы. Приятного ознакомления :)