Представлен релиз инструментария для управления изолированными Linux-контейнерами Docker 17.06, предоставляющего высокоуровневый API для манипуляции контейнерами на уровне изоляции отдельных приложений. Docker позволяет, не заботясь о формировании начинки контейнера, запускать произвольные процессы в режиме изоляции и затем переносить и клонировать сформированные для данных процессов контейнеры на другие серверы, беря на себя всю работу по созданию, обслуживанию и сопровождению контейнеров. Инструментарий базируется на применении встроенных в ядро Linux штатных механизмов изоляции на основе пространств имён (namespaces) и групп управления (cgroups). Код Docker написан на языке Go и распространяется под лицензией Apache 2.0.

Docker 17.06 является первым выпуском, который построен на основе проекта Moby, реализующего идею построения систем контейнерной изоляции в виде набора связываемых между собой универсальных компонентов. Выпуск также сформирован в рамках новой нумерации версий (год.месяц) и раздельным формированием релизов Community Edition (CE) и Enterprise Edition (EE).

Другие изменения:

  • Поддержка многоступенчатой сборки (multi-stage), позволяющей формировать более компактные образы Docker, используя единый Dockerfile. Многоступенчатая сборка основана на использовании промежуточных образов, применяемых для сборки компонентов итогового образа. Например, для создания образа с Java-приложением, можно создать промежуточный образ, включающий Apache Maven и прочие инструменты, необходимые для сборки, но не требуемые для выполнения приложения. При таком разделении при размере промежуточного образа в 620 Мб, размер итогового образа составит всего 145 Мб. Число стадий не лимитировано, например, для формирования единого образа программы AtSea используется объединение результатов двух промежуточных стадий – первой на базе node.js для сборки приложения ReactJS и второй на базе Maven для компиляции приложения Spring Boot, при этом финальный образ поставляется без Maven и node.js;
  • В команде “docker build” реализована возможность использовать значение аргументов, передаваемых через опцию “–build-arg” в поле FROM”;
  • Метрики со статистикой о работе управляющего демона теперь могут быть не только запрошены через API, но и переданы плагинам и любым внешним сервисам через обработчик “/metrics”;
  • Добавлена поддержка оформления в виде плагинов драйверов для накопления и обработки логов;
  • В разряд стабильных переведена команда “docker service logs”, позволяющая упростить отладку сервисов за счёт избавления администратора от ручного сбора логов из отдельных хостов и контейнеров. При выполнении “docker service logs” логи из всех контейнеров, в которых выполняется указанный сервис, будут перенаправлены в текущую консоль;
  • Реализована возможность прикрепления сервисов к внутриузловым сетям (node-local), таким как сети с типами Host, Macvlan, IPVlan и Bridge, а также создаваемым через плагины локального действия. Например, для сети Macvlan можно создать специфичные сетевые конфигурации на рабочих узлах и затем создать общую сеть на управляющем узле, которая объединит эти конфигурации;
  • Расширены возможности режима Swarm, предоставляющего средства кластеризации для упакованных в контейнеры приложений. Swarm даёт возможность управлять кластером из нескольких хостов Docker по аналогии с работой с одним виртуальным хостом. В Docker 17.06 добавлен новый объект настройки для режима swarm, который позволяет безопасно передавать информацию о настройках. Во встроенной системе PKI (public key infrastructure) добавлена команда “docker swarm ca –rotate” для инициирования принудительной ротации ключей. В режиме swarm реализована возможность обработки событий (“docker events“), позволяющих средствам мониторинга в реальном режиме времени получить информацию о сервисах, узлах и сетях.