Jails + Bastille (Контейнеры)

Bastille

Контейнеры FreeBSD без Docker overhead — изоляция на уровне ядра с 2000 года, управление через Bastillefile.

«Jails появились раньше Docker на 13 лет и до сих пор превосходят его по изоляции и производительности на FreeBSD.»

FreeBSD Jails — механизм изоляции процессов на уровне ядра, представленный в FreeBSD 4.0 в 2000 году. В отличие от Docker-контейнеров, Jail — это настоящая изолированная среда с отдельным корневым каталогом, сетевым стеком (VNET) и идентификаторами процессов. Нет container runtime, нет overlay filesystem, нет daemon — только ядро FreeBSD. Overhead контейнеризации практически отсутствует: Jail работает со скоростью нативного процесса.

Bastille — инструмент управления Jails, написанный на чистом POSIX sh без внешних зависимостей. Bastillefile (аналог Dockerfile) описывает конфигурацию Jail декларативно: установка пакетов, настройка сети, монтирование файловых систем. ZFS clone-based provisioning создаёт новый Jail за секунды через клонирование ZFS-датасета шаблона — без копирования гигабайт данных. VNET с epair даёт каждому Jail отдельный сетевой стек, как у полноценной ВМ.

В стеке IgNix Jails используются для изоляции сервисов на хостах: каждый сервис (Nginx, PostgreSQL, Wazuh, Graylog) живёт в отдельном Jail, компрометация одного не затрагивает остальные. Linux Jails позволяют запускать Linux-бинари внутри FreeBSD без ВМ — полезно для сервисов с Linux-only зависимостями. Resource Control (rctl) ограничивает CPU, RAM и disk I/O каждого Jail.

Килл-фичи:

  • VNET (виртуальный сетевой стек) — каждый Jail получает полностью изолированный сетевой стек с epair-интерфейсами

  • ZFS clone-based provisioning — новый Jail из шаблона за секунды через zfs clone, без копирования данных

  • Bastillefile (как Dockerfile) — декларативное описание Jail, reproducible builds, хранение в Git

  • Linux Jails — запуск Linux-бинарей в FreeBSD Jail через линукс-слой ядра без ВМ

  • Resource Control (rctl) — лимиты CPU, RAM, disk I/O на уровне ядра, без cgroups сложности

  • POSIX sh без зависимостей — Bastille работает на минимальной FreeBSD без Python, Ruby или Node

  • Нативная PF-интеграция — правила firewall на уровне Jail через anchors в pf.conf

Что заменяет: Docker, Podman, LXC/LXD, systemd-nspawn, Kubernetes (для stateful сервисов)

Версия: Bastille 1.4.0 / FreeBSD Jails (в составе FreeBSD 15.x)

Роль в стеке: Слой 2 — Виртуализация / Контейнеры и изоляция сервисов