Представлен (https://blog.docker.com/2016/02/docker-1-10/) релиз инструментария для управления изолированными Linux-контейнерами Docker 1.10 (http://www.docker.com/), предоставляющего высокоуровневый API для манипуляции контейнерами на уровне изоляции отдельных приложений. В частности, Docker позволяет, не заботясь о формировании начинки контейнера, запускать произвольные процессы в режиме изоляции и затем переносить и клонировать сформированные для данных процессов контейнеры на другие серверы, беря на себя всю работу по созданию, обслуживанию и сопровождению контейнеров. Код Docker написан на языке Go и распространяется (https://github.com/dotcloud/docker/) под лицензией Apache 2.0.
Инструментарий базируется на применении встроенных в ядро Linux штатных механизмов изоляции на основе пространств имён (namespaces) и групп управления (cgroups). Для создания контейнеров предлагается использовать libcontainer (обёртка над namespaces и cgroups), также возможно применение lxc (http://lxc.sourceforge.net/), libvirt (http://libvirt.org/), systemd-nspawn, OpenVZ контейнеров с помощью библиотеки LibCT (https://openvz.org/LibCT) и других систем изоляции. Для формирования контейнера достаточно загрузить базовый образ окружения (docker pull base), после чего можно запускать в изолированных окружениях произвольные приложения (например, для запуска bash можно выполнить "docker run -i -t base /bin/bash").
Из добавленных в Docker 1.10 новшеств (https://github.com/docker/docker/blob/master/CHANGELOG.md) можно отметить:
- Поддержка (https://blog.docker.com/2016/02/docker-engine-1-10-security/) расширенных средств безопасности: Возможность использования пространств имён для идентификаторов пользователей (user namespaces) для формирования в контейнерах собственных наборов идентификаторов групп и пользователей (например, в каждом контейнере/пространстве имён может быть свой root). Применение профилей seccomp для фильтрации системных вызовов. Система плагинов авторизации, позволяющая выборочно ограничивать доступ к различных возможностям управляющего фонового процесса Docker;
- Обеспечена привязка идентификаторов образов контейнеров к содержимому данных образов, по аналогии с тем как коммиты в Git представляют содержимое внутри коммита. Указанное новшество позволяет гарантировать, что указав идентификатор образа будет запущено именно то содержимое, которое предполагается;
- В появившуюся в прошлом выпуске новую сетевую подсистему, предоставляющую средства для работы с виртуальными сетями и привязки к ним контейнеров, добавлена серия новых возможностей: поддержка связывания контейнеров с именами хостов в виртуальных сетях (--link db:production_postgres), задания видимых во всей сети псевдонимов контейнеров, создания внутренних сетей (флаг --internal), назначение контейнеру заданного IP-адреса, использование DNS для определения имён хостов контейнеров (вместо /etc/hosts), работающий со всеми современными ядрами Linux драйвер multi-host;
- До трёх раз увеличена скорость выполнения операции push, за счёт обработки слоёв в параллельном режиме. Операции poll также стали более быстрыми и надёжными, благодаря модернизации протокола и улучшению механизмов обработки сбоев;
- Возможность изменения ресурсов контейнера на лету, например, при помощи команды "docker update" теперь можно изменить настройки потребления памяти без перезапуска контейнера;
- Поддержка задания опций запуска управляющего фонового процесса в отдельном файле конфигурации и перезагрузки настроек без перезапуска демона;
- Обеспечена поддержка создания временных файловых систем через указание опции "--tmpfs" при запуске контейнера;
- Добавлена порция новых параметров для ограничения дисковой активности: --device-read-bps, --device-write-bps, --device-read-iops, --device-write-iops и --blkio-weight-device;
- Выпуск инструмента Docker Compose 1.6 (https://blog.docker.com/2016/02/compose-1-6/), позволяющего организовать работу распределённого на несколько хостов приложения, в работу которого вовлечено несколько контейнеров, запущенных в кластере на базе Docker Swarm. В новой версии упрощён запуск сложных распределённых приложений благодаря новым редствам для настройки сети и дисковых разделов. Разработчик может использовать единую конфигурацию для тестирования приложения на своей системе и для развёртывания в рабочем окружении со сложной конфигурацией сити и хранилища;
- Выпуск инструмента Machine 0.6 (http://github.com/docker/machine), предназначенного для быстрого развёртывание хостов в гостевых окружениях систем виртуализации VirtualBox, VMware, AWS, Digital Ocean и Microsoft Azure. Осуществляет создание начинки сервера, установку на него Docker и настройку клиента для работы с данным сервером. В новой версии значительно повышена надёжность работы под управлением VirtualBox и в Windows. Если в команде не указано имя VM, она теперь будет применена к VM, выбранной по умолчанию. Добавлена новая команда "provision", позволяющая повторить развёртывание после устранения причин сбоя или изменения конфигурации;
- Выпуск инструмента Swarm 1.1 (https://github.com/docker/swarm/), предоставляющего средства кластеризации для упакованных в контейнеры приложений. Swarm даёт возможность управлять кластером из нескольких хостов Docker (например, созданных с использованием Docker Machine) в форме работы с одним виртуальным хостом. Так как Swarm использует штатный Docker API, он может применяться для управления и другими поддерживающими данный API инструментами, такими как dokku, fig, krane, flynn, deis, docker-ui, shipyard, drone.io, Jenkins. В новой версии (https://github.com/docker/swarm/releases/tag/v1.1.0)
Отдельно можно отметить работу (https://www.brianchristner.io/docker-is-moving-to-alpine-linux/) по переводу Docker на использование компонентов минималистичного дистрибутива Alpine Linux (http://alpinelinux.org) для формирования официальных образов контейнеров, вместо ныне используемых пакетов Ubuntu. Alpine отличается задействованием системной библиотеки musl (https://www.opennet.me/opennews/art.shtml?num=39365), набора утилит busybox и использованием при сборки патчей PaX и SSP (Stack Smashing Protection) для усиления безопасности. Использование Alpine позволит снизить размер системного окружения контейнера cо 188 Мб до 10 Мб. В настоящее время создатель Alpine Linux и уже перешёл на работу в Docker и занимается адаптацией дистрибутива для нужд контейнерной виртуализации.
Кроме того, идею микроконтейнеров для Docker развивает (http://www.iron.io/blog/2016/01/microcontainers-tiny-portabl...) облачный сервис iron.io. Проект поставил перед собой задачу формирования как можно более компактных окружений, достаточных для работы приложений на тех или иных скриптовых языках программирования. Для загрузки
уже доступна (https://github.com/iron-io/dockers) библиотека образов контейнеров с окружениями для языков программирования Python, PHP, Ruby, Python, Go, Java, Mono, Scala и JavaScript/Node.js. Например, обычный образ контейнера с Node.js занимает 643 Мб, в то время как вариант от iron.io удалось урезать до 29 Мб. Образы включают только самые необходимые системные библиотеки и зависимости, необходимые для запуска программ на выбранных языках. Как и в случае с основной инициативой Docker, основа микроконтейнеров iron.io формируется на базе наработок Alpine Linux.
URL: https://blog.docker.com/2016/02/docker-1-10/
Новость: http://www.opennet.me/opennews/art.shtml?num=43828