Если вы вращаетесь в ИТ-сообществе, связанном с центрами обработки данных или облачными вычислениями, то, должно быть, уже больше года слышите об обычных контейнерах, особенно о Docker, и новости о них не прекращаются. После выпуска Docker 1.0 в июне 2014 года его импульс достиг беспрецедентного уровня.

Причина такого большого ажиотажа в том, что многие компании внедряют Docker с удивительной скоростью. На OSCon (Open Source Convention) в июле 2014 года я встретил бесчисленное множество предприятий, которые уже перенесли серверные приложения с виртуальных машин (VM) в контейнеры. Действительно, Джеймс Тернбулл, вице-президент по сервисам и поддержке в Docker, сказал мне на конференции, что три крупных банка использовали бета-версию Docker и теперь используют Docker в производственной среде. Для любой новой технологии это, несомненно, очень уверенный шаг, особенно учитывая, что в ориентированном на безопасность финансовом мире это почти неслыханно.

В то же время Docker, эта технология с открытым исходным кодом, является любимцем не только таких гигантов Linux, как Red Hat и Canonical. Проприетарные компании-разработчики ПО, такие как Microsoft, также горячо поддерживают Docker.

Так почему же все гонятся за контейнерами и Docker? Джеймс Боттомли — директор по технологиям серверной виртуализации в Parallels и известный разработчик ядра Linux. Он объяснил мне, что гипервизоры, такие как Hyper-V, KVM и Xen, все «основаны на механизмах эмуляции виртуализированного оборудования. Это означает, что у них высокие системные требования».

Однако контейнеры используют общую операционную систему. Это означает, что они гораздо эффективнее используют системные ресурсы, чем гипервизоры. Вместо виртуализации оборудования контейнеры располагаются на одном экземпляре Linux. Это, в свою очередь, означает, что можно «отбросить бесполезные 99.9% хлама виртуальной машины, оставив небольшой аккуратный контейнер-капсулу, содержащий ваше приложение», — сказал Боттомли.

По словам Боттомли, при полностью настроенной контейнерной системе вы можете запустить в четыре–шесть раз больше экземпляров серверных приложений на том же оборудовании, чем при использовании виртуальных машин Xen или KVM.

Разве это не звучит здорово? В конце концов, вы можете запустить гораздо больше приложений на сервере. Так почему же никто не делал этого раньше? На самом деле, делали. Контейнеры на самом деле — старая концепция.

История контейнеров восходит как минимум к 2000 году и FreeBSD Jails. В Oracle Solaris также есть похожая концепция под названием Zones; такие компании, как Parallels, Google и Docker, работали над проектами с открытым исходным кодом, такими как OpenVZ и LXC (Linux Containers), чтобы контейнеры работали бесперебойно и безопасно.

Действительно, мало кто знает о контейнерах, но большинство людей пользуются контейнерами уже много лет. У Google есть собственная контейнерная технология с открытым исходным кодом lmctfy (Let Me Contain That For You). Как только вы используете какой-либо сервис Google, например поиск, Gmail, Google Docs или что-то ещё, выделяется новый контейнер.

Однако Docker построен поверх LXC. Как и любая контейнерная технология, с точки зрения приложения он имеет собственную файловую систему, систему хранения, процессор, память и другие компоненты. Основное различие между контейнерами и виртуальными машинами состоит в том, что гипервизоры абстрагируют всё устройство, а контейнеры абстрагируют только ядро операционной системы.

Это, в свою очередь, означает: гипервизор может делать то, чего не могут контейнеры, — использовать разные операционные системы или ядра. Так, например, с помощью Microsoft Azure можно одновременно запускать экземпляры Windows Server 2012 и SUSE Linux Enterprise Server. Что касается Docker, все контейнеры должны использовать одну и ту же операционную систему и ядро.

С другой стороны, если вы просто хотите запустить как можно больше экземпляров серверных приложений на как можно меньшем объёме оборудования, вас может не особо заботить запуск нескольких виртуальных машин с разными ОС. Если несколько копий одного и того же приложения — именно то, что вам нужно, тогда вам понравятся контейнеры.

Переход на Docker, как ожидается, позволит центрам обработки данных или поставщикам облачных вычислительных услуг ежегодно экономить десятки миллионов долларов на электроэнергии и аппаратном обеспечении. Поэтому неудивительно, что они стремятся как можно скорее внедрить Docker.

Docker привносит несколько новых возможностей, которых не было у предыдущих технологий. Во-первых, по сравнению с предыдущими методами Docker делает развертывание и использование контейнеров более простым и безопасным. Кроме того, поскольку Docker сотрудничал с другими гигантами в области контейнеров, включая Canonical, Google, Red Hat и Parallels, для совместной разработки своего ключевого открытого компонента libcontainer, он привносит в контейнеры столь необходимую стандартизацию.

В то же время разработчики могут использовать Docker для упаковки, доставки и запуска любого приложения. Приложение становится легковесным, переносимым, самодостаточным контейнером LXC, который может работать где угодно. Как сказал мне Bottomley, "Контейнеры дают вам немедленную переносимость приложений."

Джей Лайман, старший аналитик исследовательской компании 451 Research, добавил: "Организации стремятся сделать приложения и рабочие нагрузки более простыми для переноса и распространения эффективным, стандартизированным, воспроизводимым способом, чего иногда трудно достичь. Подобно тому, как GitHub способствует сотрудничеству и инновациям через общий исходный код, Docker Hub, Official Repos и коммерческая поддержка также помогают многим предприятиям решать эту задачу, улучшая способ упаковки, развертывания и управления приложениями."

И последнее, но не менее важное: контейнеры Docker легко развёртывать в облаке. Как написал Бен Ллойд Пирсон на opensource.com: "Docker использует особый подход, благодаря которому его можно интегрировать в большинство приложений DevOps (разработка и эксплуатация), включая Puppet, Chef, Vagrant и Ansible, или использовать отдельно для управления средами разработки. Главное преимущество в том, что он упрощает многие задачи, обычно выполняемые этими другими приложениями. В частности, с Docker люди могут создать локальную среду разработки, идентичную боевому серверу, запускать несколько сред разработки с одного хоста (каждая с уникальным программным обеспечением, операционной системой и конфигурацией), тестировать проекты на новых или других серверах и позволять любому работать над одним и тем же проектом с идентичными настройками независимо от локальной среды хоста."

Короче говоря, Docker может сделать для вас следующее: по сравнению с другими технологиями он позволяет запускать больше приложений на одном и том же оборудовании; он позволяет разработчикам легко и быстро создавать готовые к запуску контейнеризованные приложения; он значительно упрощает задачи управления приложениями и их развёртывания. В целом я понимаю, почему Docker как технология корпоративного уровня внезапно стал популярным. Надеюсь только, что он оправдает ожидания; иначе появятся обеспокоенные CEO и CIO.

Источник: http://cloud.51cto.com/art/201410/453718.htm