Распространение контейнеризации: эффект Докера (часть 1)
- Распространение контейнеризации: эффект Докера (часть 5)
Введение
Ранее в этом месяце IEEE CS объявила о своем выборе 9 главных технологических тенденций 2016 года, и для тех, кто следит за новостями отрасли, неудивительно, что одной из них являются контейнеры. Те читатели, которые следят за моим информационным бюллетенем WindowsNetworking, вероятно, видели редакционную статью, которую я написал несколько месяцев назад о контейнерах, и я, конечно, не единственный писатель, который затронул эту тему.
Феномен контейнеризации на самом деле не нов; различные реализации этой идеи существуют с 1980-х годов в UNIX, а такие продукты, как Sandboxie, Virtuozzo и FreeBSD Jail, были доступны в начале 2000-х. Однако с выпуском Docker в 2013 году популярность контейнеров начала стремительно расти, и повальное увлечение контейнерами распространяется по всему ИТ-миру. Google уже много лет запускает Документы, Почту и т. д. в контейнерах. В дело вступили Amazon, Microsoft и VMware, и когда многие из этих «больших парней» решают, что в технологию стоит инвестировать, вы понимаете, что это круто.
Контейнеризация хорошо сочетается с другой важной тенденцией в ИТ и бизнесе, которая закрепилась в последнее время: «гибкой» философией, которая сосредоточена на быстрой доставке и обновлении приложений в отличие от более старого и медленного процесса. Это связано с тем, что контейнеры позволяют разработчикам создавать приложения, которые «просто работают», не беспокоясь о конфликтах приложений и несовместимости оборудования и драйверов. Контейнер правильные версии любой операционной системы, драйверов и других приложений, необходимых для правильной работы приложения.
Что такое контейнеризация и чем она не является
Некоторые ИТ-специалисты и многие лица, принимающие финансовые решения, которые не являются экспертами в области ИТ, но контролируют финансовые потоки, на самом деле не понимают, что такое контейнеризация и как она работает. Если вы скажете им, что это виртуализация, они что знают, что это значит, но это не просто новое название для тех же старых виртуальных машин, точно так же, как облачные вычисления — это не просто новый способ обозначения Интернета, хотя есть и те, кто так думает.
Однако точно так же, как Интернет — это основа, на которой строится облако, виртуализация — это основа, на которой строятся контейнеры. В этот момент у вас может возникнуть вопрос: чем же тогда это отличается от традиционных виртуальных машин? Самая большая разница заключается в том, как эти виртуальные контейнеры «сидят поверх» базовой операционной системы хоста.
Вы, вероятно, хорошо знакомы с тем, как традиционные виртуальные машины работают в продуктах Hyper-V или VMware Workstation/Server. На самом деле существует два типа традиционных технологий виртуальных машин, которые построены на двух разных типах гипервизоров, часто (не очень описательно) называемых гипервизорами типа 1 и типа 2. Гипервизоры типа 1 также называют «голыми железными гипервизорами» (что является немного более описательным). Другими словами, они могут работать непосредственно на оборудовании без базовой операционной системы (по сути, они ЯВЛЯЮТСЯ операционной системой). Гипервизор типа 2 — это приложение, которое устанавливается поверх основной операционной системы, такой как Windows или Linux. VMware ESX считается типом 1, а VMware Server или Workstation — типом 2.
Microsoft Hyper-V немного похож на хамелеона. Хотя он позиционируется как «функция» в Windows Server и, похоже, работает на нем как тип 2, Hyper-V имеет прямой доступ к оборудованию и поэтому классифицируется как тип 1. На самом деле гипервизор Hyper-V работает. под операционной системой, а не поверх нее. «Хостовая» операционная система сама по себе является виртуальной машиной.
А как насчет контейнерных технологий, таких как Docker? Гипервизоры, будь то тип 1 или тип 2, выполняют свою работу, эмулируя аппаратное обеспечение, и это делает их сравнительно менее эффективными, чем они могли бы быть в противном случае. Любой, кто работал с виртуальными машинами, знает, что если вы собираетесь запускать несколько виртуальных машин на одной физической машине, этот компьютер должен быть мощным, с высокопроизводительным процессором и большим объемом оперативной памяти. В противном случае пострадает производительность.
Это связано с тем, что каждая виртуальная машина содержит отдельную копию операционной системы (или, если на то пошло, разные виртуальные машины могут работать под управлением разных операционных систем; это полезно при тестировании, когда вам нужна виртуальная машина под управлением Windows и одна под управлением Linux, потому что у вас есть приложения, написанные для каждый, или когда вы хотите запустить несколько разных версий операционной системы — например, Windows Server 2008 R2, 2012 и 2012 R2 — чтобы увидеть, как работает то или иное приложение на каждой из них).
Проблема в том, что это очень ресурсоемко, и физическая машина, которая будет поддерживать запуск полдюжины виртуальных машин, будет дорогой, что компенсирует экономию затрат на консолидацию машин, хотя это уменьшит занимаемую площадь и может позволить вам сэкономить деньги в виде сокращения нужны квадратные метры. Тем не менее, должен быть лучший способ, и он есть. Вот что такое контейнеризация.
Как работают контейнеры
Ключом к пониманию контейнеров является реализация нескольких контейнеров, работающих в общей операционной системе. Это не означает базовую операционную систему хоста, на которой работает гипервизор; это означает, что приложения в разных виртуализированных контейнерах фактически используют ресурсы одной и той же операционной системы, а не имеют собственную копию ОС, установленную в традиционных виртуальных машинах.
Всего один экземпляр ОС вместо нескольких. Это, в свою очередь, означает, что минимальные системные требования к оборудованию резко снижаются, снижая стоимость и в то же время повышая производительность. Другими словами, вы можете запускать примерно в два раза больше экземпляров на том же оборудовании, чем на традиционных виртуальных машинах. Это беспроигрышная ситуация.
Приложения, работающие в контейнерах, работают так, как будто у них есть собственный процессор, память, хранилище и файловая система. Ядро операционной системы абстрагировано, поэтому для каждого приложения нет необходимости иметь отдельное ядро ОС. Функции ядра совместно используются приложениями в контейнерах, но для каждого из контейнеров создается отдельное пространство имен, чтобы изолировать среды друг от друга.
Конечно, это означает, что все ваши контейнеры должны работать в одной и той же операционной системе, поэтому вы не сможете иметь несколько экземпляров Linux и несколько экземпляров Windows, как это возможно с традиционными виртуальными машинами. Это одно из ограничений контейнеризации, которое необходимо учитывать при принятии решения о том, что лучше — контейнеры или виртуальные машины — для вашего конкретного сценария использования.
Большим «плюсом» для контейнеров является возможность использовать их для упаковки приложений, которые затем можно запускать практически в любом месте, что проще, чем с обычными виртуальными машинами. Контейнеры с открытым исходным кодом легко развернуть в облаке. Приложение плюс его зависимости — библиотеки, пакеты и т. д. — все содержится в контейнере и поставляется вместе, что устраняет разочарование, возникающее, когда программное обеспечение отлично работает при разработке и тестировании, а затем не работает должным образом, когда попадает в реальную производственную среду..
Возможно, вас интересует вопрос безопасности, учитывая, что все ваши контейнеры работают на одном и том же ядре операционной системы. В решениях на основе UNIX/Linux операция chroot используется для создания отдельных корневых файловых систем, в которых процессы могут выполняться в изолированных средах и не могут обращаться к данным других процессов, находящихся за пределами их собственных деревьев каталогов. Говорят, что процессы работают в chroot-тюрьме. Контейнеры строятся на этом механизме. Контейнеры Solaris, выпущенные Sun в 2005 году, впервые использовали и усовершенствовали этот процесс chroot, а несколько лет спустя LXC (Linux Containers) был интегрирован в ядро Linux. Первоначально Docker был основан на LXC, и когда мы углубимся в обсуждение функций и функций Docker во второй части этой серии, мы поговорим больше о LXC и новой среде выполнения Docker, которая заменила его, libcontainer.
Существуют и другие технологии контейнеризации, аналогичные LXC для сред Linux и UNIX. К ним относятся OpenVZ, Linux-VServer, FreeBSD Jails и Solaris Containers. Что касается Windows, в 2015 году Microsoft представила контейнеры Windows Server для Windows Server 2016 и Nano Server. Nano Server — это операционная система, созданная специально для запуска облачных приложений и контейнеров. Контейнеры Hyper-V — это контейнеры Windows Server, которые запускаются внутри раздела Hyper-V для большей изоляции/безопасности. Контейнерами Windows можно управлять с помощью PowerShell и интегрировать с другими технологиями Windows, такими как.NET.
Хорошей новостью является то, что Microsoft создала свое контейнерное решение для интеграции с Docker, чтобы ИТ-специалисты и разработчики могли работать на разных платформах, управляя контейнерами Windows Server с помощью инструментов управления Docker. Microsoft и Docker являются частью Open Container Initiative, и обе компании объявили о партнерстве, чтобы облегчить разработчикам разработку и управление как контейнерами Windows, так и контейнерами Docker с помощью одного и того же набора инструментов.
Резюме
Здесь, в части 1 этой серии статей, состоящей из нескольких частей, в которой представлен обзор явления контейнеризации, мы кратко объяснили преимущества использования контейнеров и некоторые общие сведения о том, как они работают. Во второй части мы углубимся в популярные контейнерные решения, логично начав с компании, которая представила контейнеры на карте: Docker.