Новая версия системы управления контейнерной виртуализацией Docker 0.8
Увидел свет выпуск инструментария для управления изолированными Linux-контейнерами Docker 0.8. Docker дополняет инструментарий LXC более высокоуровневым API, позволяющий манипулировать контейнерами на уровне изоляции отдельных процессов. В частности, Docker позволяет не заботясь о формировании начинки контейнера запускать произвольные процессы в режиме изоляции и затем переносить и клонировать сформированные для данных процессов контейнеры на другие серверы, беря на себя всю работу по созданию, обслуживанию и сопровождению контейнеров. Код Docker написан на языке Go и распространяется под лицензией Apache 2.0. Инструментарий базируется на применении встроенных в ядро Linux штатных механизмов изоляции на основе пространств имён (namespaces) и групп управления (cgroups). Для создания контейнеров используются скрипты lxc. Для формирования контейнера достаточно загрузить базовый образ окружения (docker pull base), после чего можно запускать в изолированных окружениях произвольные приложения (например, для запуска bash можно выполнить «docker run -i -t base /bin/bash»).
Сообщается, что Docker 0.8 является первым выпуском, при подготовке которого основное внимание уделялось не расширению функциональности, а повышению стабильности и увеличению качества. Также отмечается переход на новую модель формирования новых выпусков. Релизы Docker теперь будут формироваться каждый месяц, что позволит более плавно вводить новые новшества и более интенсивно их тестировать. Находящийся в разработке Master-репозиторий всегда будет находиться в рабочем состоянии, все принимаемые в него патчи будут соответствовать критериям готовности для выпуска. Т.е. любая сборка из Master-репозитория будет заведомо рабочей и соответствовать статусу кандидата в релизы. Выпуски Docker будут иметь привычную для большинства открытых проектов нумерацию: x.y.z: x — версии со значительными изменениями (например, выпуск 1.0 будет отражать готовность к промышленному применению), y — ежемесячные промежуточные выпуски, z — оперативные корректирующие выпуски.
Особенности выпуска Docker 0.8:
Официальная поддержка платформы OS X; Включение в состав экспериментального драйвера для организации хранилища поверх файловой системы Btrfs в режиме copy-on-write. По умолчанию поддержка Btrfs отключена, для активации следует запустить демон docker с опциями »-d -s btrfs»; Проведены разноплановые оптимизации производительности: Существенно ускорена сборка образов из исходных текстов с использованием команды «build», а также процесс удаления контейнеров и образов. Сокращено время запуска и остановки демона. Для инструкции ADD реализована поддержка кэширования, что позволило предотвратить выполнение повторной загрузки исходного контента в ситуациях, кода он не менялся с момента прошлой загрузки; Сокращено потребление памяти при выполнении большого числа типовых операций за счёт потоковой обработки файлов без их предварительного кэширования в памяти. Устранена серия утечек памяти; Увеличена стабильность работы под нагрузкой. Устранено несколько проблем, вызванных условиями гонки (race conditions); Многие компоненты выделены в субпакеты меньшего размера, каждый из которых снабжен собственным тестовым набором. В результате удалось улучшить тестирование кода, повысить надёжность и упростить внесение изменений; Добавлена новая инструкция ONBUILD, позволяющая привязать к образу обработчик (trigger), вызываемый в момент использования образа в качестве образца для создания других образов; Реализована возможность создания, удаления и изменения большего числа контейнеров и образов за счёт более агрессивного освобождения системных ресурсов; Во всех операциях с пакетами теперь применяется встроенная реализация tar, написанная на языке Go, что позволяет увеличить переносимость и решает проблемы с несовместимостью разных видов утилиты tar; Поддержка запуска управляющего демона через сервис активации по сокету в systemd. Основные возможности Docker:
Возможность размещения в изолированном окружении разнородной начинки, включающей различие комбинации исполняемых файлов, библиотек, файлов конфигурации, скриптов, файлов jar, gem, tar и т.д. Поддержка работы на любом компьютере на базе архитектуры x86_64 с системой на базе современного ядра Linux, начиная от ноутбуков, заканчивая серверами и виртуальными машинами. Возможность работы поверх немодифицированных современных ядер Linux (без наложения патчей) и в штатных окружениях всех крупных дистрибутивов Linux, включая Fedora, RHEL, Ubuntu, Debian, SUSE, Gentoo и Arch; Использование легковесных контейнеров для изоляции процессов от других процессов и основной системы. Так как контейнеры используют свою собственную самодостаточную файловую систему, не важно где, когда и в каком окружении они запускаются. Изоляция на уровне файловой системы: каждый процесс выполняется в полностью отдельной корневой ФС; Изоляция ресурсов: потребление системных ресурсов, таких как расход памяти и нагрузка на CPU, могут ограничиваться отдельно для каждого контейнера с использованием cgroups; Изоляция на уровне сети: каждый изолированный процесс имеет доступ только к связанному с контейнером сетевому пространству имён, включая виртуальный сетевой интерфейс и привязанный к нему IP-адрес; Корневая файловая система для контейнеров создаётся с использованием механизма copy-on-write (отдельно сохраняются только изменённые и новые данные), что позволяет ускорить развёртывание, снижает расход памяти и экономит дисковое пространство; Все стандартные потоки (stdout/stderr) каждого выполняемого в контейнере процесса накапливаются и сохраняются в виде лога; Изменённая файловая система одного контейнера, может использоваться в качестве основы для формирования новых базовых образов и создания других контейнеров, без необходимости оформления шаблонов или ручной настройки состава образов; Возможность использования интерактивной командной оболочки: к стандартному вводу любого контейнера может быть привязан псевдо-tty для запуска shell. Поддержка использования разных систем хранения, которые могут подключаться как плагины. Среди поддерживаемых драйверов хранения заявлены aufs, device mapper (используются снапшоты LVM), vfs (на основе копирования директорий) и Btrfs. Ожидается появление драйверов для ZFS, Gluster и Ceph; Возможность создания контейнеров, содержащих сложные программные стеки, через связывание между собой уже существующих контейнеров, содержащих составные части формируемого стека. Связывание осуществляется не через слияние содержимого, а через обеспечения взаимодействия между контейнерами (создаётся сетевой туннель).
© OpenNet