
Продолжая поиски интересных курсов(в этот раз не авито), я наткнулся на необычный материал по контейнеризации. Обычно всё выглядит одинаково: Docker, команды, образы, и в конце внезапно появляются Ansible и Kubernetes. Как будто без них нельзя объяснить, что такое контейнер. Или авторы просто пытаются запихнуть побольше в один курс, чтобы казалось, будто его стоимость оправдана. Ну да ладно.
А мне хотелось чего-то другого. Помните книгу про внутреннее устройство Linux Кетова?
Ещё в 2022 году мне понравилось, как подавался материал про контейнеризацию — от самых её зачатков (chroot) до самого Docker. Вот именно такое я хотел увидеть у кого-нибудь, но с актуализированной информацией.
И такой курс нашёлся на Степике(не реклама если что). Автор как раз пошёл от самого начала: chroot, пространства имён, контрольные группы, ручной запуск контейнера без Docker, и только потом — сам Docker со всеми его фишками. По сути, это получилась современная версия той самой главы из книги Кетова про контейнеризацию.
О чем вообще курс?
Курс построен как последовательный рассказ о том, как вообще пришли к контейнеризации: от chroot и первых механизмов изоляции — к namespaces и cgroups, затем к OCI runtime и runc, и уже после этого к Docker и Compose.
За счёт этого становится понятно не только как пользоваться контейнерами, но и зачем каждый из этих механизмов появился и какую проблему он решает.
Каждый блок — это теория (со схемами, картинками и подробными объяснениями) + практика.
Автор не просто рассказывает, а сразу даёт руки поковыряться. Причём практика идёт от простого к сложному — ты сам создаёшь изолированное окружение, сам лезешь в /sys/fs/cgroup, сам собираешь контейнер через runc, и только потом переходишь к Docker. Звучит неплохо, правда?
Тут нет ссылок на сторонние ресурсы, чем часто грешат курсы на Степике. Всё изучаешь в одном месте. Это несомненный плюс.
Всего в курсе 7 больших разделов:
История и философия контейнеризации — зачем вообще понадобилась контейнеризация, почему chroot — это круто, но недостаточно.
Пространства имён (namespaces) — как Linux изолирует процессы, сеть, пользователей. Тут же практика с unshare и nsenter.
Control Groups (cgroups) — как ограничивать ресурсы. Сравнение cgroups v1 и v2 (да, автор идёт в ногу со временем).
OCI Runtime — создание контейнера с помощью runc без Docker. Вот это было неожиданно, но очень круто.
Docker — платформа целиком: образы, слои, сеть, хранилище, безопасность. И да, Dockerfile разобран по инструкциям. Блок от которого ты точно устанешь :)
Полезные возможности Docker — healthcheck, логирование, ограничение ресурсов, управление дисковым пространством.
Docker Compose — многоконтейнерные приложения, разбор compose.yaml построчно.
Что выделяется из материала(по моему мнению).
Во-первых, управление namespaces через unshare и nsenter.
Это реально выделяется на фоне других курсов. Я лично нигде не видел, если только в статьях на хабре. Нам рассказывают, что есть пространства имён, и дают инструменты для ручной работы с ними. Ты запускаешь процесс в новом namespace через unshare, а потом с помощью nsenter "залезаешь" внутрь этого пространства — прямо как docker exec, только руками. Это даёт понимание, что docker exec — это не магия, а высокоуровневая обёртка над теми же системными вызовами, которые использует nsenter.
Во-вторых, сравнение cgroups v1 и cgroups v2.
Автор не просто говорит "есть cgroups", а подробно разбирает, чем они отличаются. В cgroups v1 каждая подсистема (CPU, память, IO) живёт своей жизнью в отдельных иерархиях. В cgroups v2 — единая иерархия, всё в одном месте. И это важно, потому что современный Linux и актуальные версии Docker работают именно с v2. Автор показывает, как изменилась структура директорий в /sys/fs/cgroup/, как теперь делегируются права и почему это упрощает управление ресурсами.

В-третьих, практика с runc.
Это вообще отдельный вид удовольствия. Ты берёшь rootfs, пишешь config.json (структура которого, кстати, тоже подробно разобрана) и запускаешь контейнер командой runc run без docker. И тут становится понятно, что контейнер — это не какая-то магия Docker. По сути, тебе достаточно подготовленной файловой системы и конфигурационного файла, в котором описано, как именно этот контейнер нужно запустить. Docker просто берёт на себя всю эту рутину и даёт более удобный интерфейс.

В-четвёртых, BuildKit и сравнение со старым сборщиком.
Автор не просто говорит "есть BuildKit, используйте его", а показывает, чем он лучше старого сборщика. Старый сборщик собирал слои последовательно — один за другим, каждый ждал предыдущего. BuildKit собирает независимые этапы параллельно, умеет кешировать результаты между сборками и не пересобирать то, что не изменилось.
Там приводятся конкретные примеры: старый подход — минута, новый — 20 секунд. Разница ощутимая, особенно если ты собираешь образы каждый день.
В-пятых, дотошность в деталях.
Автор старается не пропускать ни одной мелочи. Берёт Dockerfile — и разбирает каждую инструкцию. compose.yaml — тоже разбирается построчно, и объясняется, что сейчас новый стандарт наименования файла — именно compose.yaml, а не docker-compose.yml или docker-compose.yaml (этого я даже не знал).
Да тот-же config.json для runc разобран до винтика — автор показывает, какое поле за что отвечает. Всё ключевое расписано подробно с примерами, схемами и объяснением, почему именно так это устроено.
Минусы
Начну описывать по пунктам:
Не хватает сквозного примера.
Весь курс крутится вокруг системных механизмов, и это здорово. Но в конце хотелось бы увидеть какой-нибудь целостный проект: взять, допустим, простое веб-приложение и пройти с ним полный путь — от изоляции процессов доdocker-compose up. Такой связки нет. Каждый модуль живёт своей жизнью, лишь слегка ссылаясь на другие изученные темы, хотя логически они выстроены правильно.Docker Compose — хороший, но слишком короткий.
Модуль есть, структура разобрана, всё показано. Но хотелось бы больше практических кейсов. Например, в курсе приводится пример огромногоcompose-файла. Было бы здорово разобрать его на практике и попробовать поднять, но в итоге для демонстрации команд мы взяли простой композ.Качество схем.
В некоторых уроках заметно плохое качество изображений (видно, что картинки пережаты). Хотелось бы, чтобы их переделали. Правда, таких картинок мало.
Можно ли использовать как основной курс для изучения?
Если вы хотите реально понять, как работают контейнеры, — да, это лучший вариант из того, что я видел в одном месте. Но если ваша цель — просто «сдать проект» или «быстро начать использовать Docker в работе», курс может показаться перегруженным.
Для стажёров, которым важно не просто копировать команды, а понимать происходящее, — он идеален. Для тех, кто готовится к собеседованию и боится вопросов про namespaces и cgroups, — тоже отличный выбор.
Но если вы ищете курс, где из 10 модулей 9 про Docker и один про Kubernetes, — это не сюда. Здесь Kubernetes вообще нет. И это правильно, потому что тема курса — контейнеризация, а не оркестрация.
Итог
Курс получился глубоким, местами даже слишком, но полезным. Чувствуется, что автор хотел максимально подробно разобрать каждую тему и донести материал до студента.
А вообще, лучше всего итог курса подводит его же финальная фраза:
«Теперь вы не просто используете Docker — вы понимаете, как он работает».
И это чистая правда.
Обзор курса: "Стань DevOps-инженером с нуля"

