Выпуск cистемы управления контейнерной виртуализацией Docker 1.3

Представлен релиз инструментария для управления изолированными Linux-контейнерами Docker 1.3, предоставляющего высокоуровневый API для манипуляции контейнерами на уровне изоляции отдельных приложений. В частности, Docker позволяет не заботясь о формировании начинки контейнера запускать произвольные процессы в режиме изоляции и затем переносить и клонировать сформированные для данных процессов контейнеры на другие серверы, беря на себя всю работу по созданию, обслуживанию и сопровождению контейнеров. Код Docker написан на языке Go и распространяется под лицензией Apache 2.0. Инструментарий базируется на применении встроенных в ядро Linux штатных механизмов изоляции на основе пространств имён (namespaces) и групп управления (cgroups). Для создания контейнеров предлагается использовать libcontainer (обёртка над namespaces и cgroups), также возможно применение lxc, libvirt, systemd-nspawn и других систем изоляции. Для формирования контейнера достаточно загрузить базовый образ окружения (docker pull base), после чего можно запускать в изолированных окружениях произвольные приложения (например, для запуска bash можно выполнить «docker run -i -t base /bin/bash»).

Из добавленных в Docker 1.3 новшеств можно отметить:

Новая команда «docker exec», позволяющая запустить произвольный процесс в уже существующем активном контейнере. При помощи данной команды можно добиться выполнения таких вещей, как добавление или удаление устройств из запущенных контейнеров, отладка работающих контейнеров и выполнение команд, которые не являются частью спецификации контейнера. Например, для запуска bash в контейнере ubuntu_bash можно выполнить команду «docker exec ubuntu_bash -it bash». Ранее для выполнения подобных команд приходилось запускать в контейнере sshd, что создавало лишние угрозы безопасности. Новая команда «docker create», позволяющая настроить контейнер без его непосредственного запуска. Ранее предлагаемая команда «docker run» кроме создания контейнера осуществляла сразу и запуск процессов в нём. Использование «docker create» даёт возможность расширить средства управления жизненным циклом контейнера и реализовать до запуска контейнера такие действия, как настройка дисковых разделов или маппинг портов. Например, можно быстро подготовить новые контейнеры при возникновении непредвиденного всплеска нагрузки. Для гарантирования целостности и подтверждения источников официальных образов контейнеров теперь поддерживается проверка по цифровой подписи. Подписанные контейнеры отмечены в каталоге Docker Hub голубой лентой. Проверка корректности подписи осуществляется автоматически, если замечено использование некорректной подписи Docker Engine продолжит использование прошлого образа. Добавлена новая опция »--security-opt», позволяющая использовать метки и профили SELinux и AppArmor, что даёт возможность обойтись без перехода в привилегированный режим («docker run --privileged») на ядрах Linux с поддержкой SELinux или AppArmor. Например, для применения политики svirt_apach к контейнеру можно выполнить «docker run --security-opt label: type: svirt_apache -i -t centos \ bash»; Для отличных от Linux систем, таких как OS X, в состав включен минималистичный Linux-дистрибутив boot2docker, специально подготовленный для запуска контейнеров Docker. Упрощены средства для проброса в контейнеры содержимого пользовательских директорий OS X. Дополнительно можно отметить инициативу по использованию Doсker для организации универсальной системы распространения приложений, позволяющей организовать поставку программ в форме, не привязанной к конкретным дистрибутивам Linux. Проект позиционируется как подход, альтернативный предложению от разработчиков systemd. Следует отметить, что средства для упаковки десктоп-приложений в Docker-контейнеры уже несколько месяцев развиваются совместными усилиями компаний Red Hat и Docker.

Основные возможности 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