Что такое контейнеры Linux

Обновлено: 03.07.2024

За последнее десятилетие контейнеры стали неотъемлемой частью более эффективной инфраструктуры. Контейнеры обеспечивают производительность, автоматизацию и экономичное развертывание. Но есть разные типы контейнеров, и в этом блоге объясняется, что такое контейнеры Linux и чем они отличаются от контейнеров приложений.

Контейнеры приложений и системные контейнеры

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

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

Прогулка по переулку памяти

Системные контейнеры технически являются самым старым типом контейнеров. Все началось в 1999 году, когда BSD представила джейлы, способ запуска второй системы BSD на том же ядре, что и основная система. Вскоре за этим последовала реализация концепции Linux через Linux vServer. Это был отдельный проект с большим набором патчей для ядра Linux, направленный на реализацию функциональности, аналогичной тюрьмам BSD. Вскоре после этого в Solaris появились зоны, которые были той же концепцией, но частью ОС Solaris. Затем последовал проект OpenVZ, и он начал внедрять несколько VPS (виртуальных частных серверов) в Linux. Все эти проекты предоставляли системные контейнеры, на которых работала полноценная операционная система Linux. И Linux vServer, и OpenVZ не были основными и представляли собой довольно большие наборы исправлений поверх ядра Linux. Чтобы включить эти контейнеры, вам нужно было установить определенный набор исправлений для определенного дистрибутива, а затем использовать дополнительные инструменты для добавления контейнеров.

Контейнеры Linux

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

Контейнеры LXC часто рассматриваются как нечто среднее между chroot и полноценными виртуальными машинами. Цель LXC — создать среду, максимально приближенную к стандартной установке Linux, но без необходимости в отдельном ядре. Контейнеры LXC — это, по сути, копия операционной системы, работающей на том же ядре, что и ее хост, поэтому в этом случае вы ничего не виртуализируете, и нет служебных процессов. Что касается ядра, то все процессы, работающие в контейнерах, являются обычными процессами в системе, просто они немного отличаются от операционной системы.

Когда следует использовать контейнеры Linux?

В любое время, когда вы используете Linux в Linux, вам следует подумать об использовании контейнеров вместо виртуальных машин. Виртуальные машины мало что могут сделать, чего не могут контейнеры Linux. Почти для любого варианта использования вы можете запустить точно такую ​​же рабочую нагрузку в системном контейнере и не получить никаких накладных расходов, которые вы обычно получаете при использовании виртуальных машин. Единственным исключением может быть ситуация, когда вам нужна определенная версия ядра, отличная от ядра хоста, для определенной функции этой виртуальной машины.

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

Что такое LXD?

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

LXC против LXD

LXCLXD
— среда выполнения контейнера Linux, позволяющая создавать несколько изолированных систем Linux (контейнеров) на хост управления, использующий одно ядро ​​Linux

– поддерживает только контейнеры

– поддерживает контейнер и виртуальные машины

Контейнеры Linux — это системные контейнеры, похожие на виртуальные машины по своему поведению и управляемости, без обычных накладных расходов на виртуальные машины, а также с плотностью и эффективностью контейнеров. Они подходят для выполнения всех типов рабочих нагрузок. С помощью LXD вы можете легко запускать контейнеры Linux и управлять ими, а также масштабировать их в соответствии со своими потребностями. Чтобы узнать больше о LXC и LXD, посетите веб-сайт сообщества. А если вы хотите попробовать и протестировать LXD, не устанавливая его на свой компьютер, вы можете сделать это с помощью онлайн-демонстрационного инструмента LXD.

Облако Ubuntu

Ubuntu предлагает все необходимое для обучения, программную инфраструктуру, инструменты, услуги и поддержку для общедоступных и частных облаков.

Контейнер Linux® – это набор из одного или нескольких процессов, изолированных от остальной системы. Все файлы, необходимые для их запуска, предоставляются из отдельного образа, а это означает, что контейнеры Linux являются переносимыми и непротиворечивыми при переходе от разработки к тестированию и, наконец, к производству. Это делает их гораздо более быстрыми в использовании, чем конвейеры разработки, основанные на воспроизведении традиционных сред тестирования. Из-за своей популярности и простоты использования контейнеры также являются важной частью ИТ-безопасности.

Зачем использовать контейнеры Linux?

Представьте, что вы разрабатываете приложение. Вы выполняете свою работу на ноутбуке, и ваша среда имеет определенную конфигурацию. У других разработчиков могут быть немного другие конфигурации. Разрабатываемое вами приложение опирается на эту конфигурацию и зависит от определенных библиотек, зависимостей и файлов. Между тем, у вашего бизнеса есть среды разработки и производства, которые стандартизированы со своими собственными конфигурациями и собственными наборами вспомогательных файлов. Вы хотите как можно больше эмулировать эти среды локально, но без всех накладных расходов на воссоздание серверных сред. Итак, как же заставить ваше приложение работать в этих средах, пройти проверку качества и развернуть приложение без головной боли, переписывания и устранения сбоев? Ответ: контейнеры.

Что такое контейнер

Контейнер, содержащий ваше приложение, содержит необходимые библиотеки, зависимости и файлы, поэтому вы можете перемещать его в рабочей среде без неприятных побочных эффектов. На самом деле содержимое образа контейнера можно рассматривать как установку дистрибутива Linux, поскольку оно поставляется вместе с пакетами RPM, файлами конфигурации и т. д. Но распространение образа контейнера намного проще, чем установка новых копий операционных систем. Кризис предотвращен – все довольны.

Это распространенный пример, но контейнеры Linux можно применять для решения множества различных задач, где требуется переносимость, возможность настройки и изоляция. Смысл контейнеров Linux в том, чтобы развиваться быстрее и удовлетворять потребности бизнеса по мере их возникновения. В некоторых случаях, например при потоковой передаче данных в режиме реального времени с помощью Apache Kafka, контейнеры необходимы, поскольку это единственный способ обеспечить масштабируемость, необходимую приложению. Независимо от того, какая инфраструктура — локальная, облачная или гибридная, — контейнеры удовлетворят спрос. Конечно, выбор правильной контейнерной платформы так же важен, как и сами контейнеры.

Red Hat® OpenShift® включает в себя все необходимое для разработки и развертывания гибридного облака, корпоративного контейнера и Kubernetes.

Разве это не просто виртуализация?

Не совсем так. Думайте о них больше как о дополняющих друг друга. Вот простой способ подумать о 2:

    позволяет вашим операционным системам (Windows или Linux) работать одновременно на одной аппаратной системе.
  • Контейнеры используют одно и то же ядро ​​операционной системы и изолируют процессы приложений от остальной системы. Например: системы ARM Linux работают с контейнерами ARM Linux, системы x86 Linux работают с контейнерами x86 Linux, системы x86 Windows работают с контейнерами x86 Windows. Контейнеры Linux чрезвычайно переносимы, но они должны быть совместимы с базовой системой.

виртуализация и контейнеры

Что это значит? Во-первых, виртуализация использует гипервизор для эмуляции оборудования, что позволяет нескольким операционным системам работать параллельно. Это не так просто, как использование контейнеров. Когда у вас есть ограниченные ресурсы с ограниченными возможностями, вам нужны легкие приложения, которые можно плотно развернуть. Контейнеры Linux изначально запускаются в операционной системе, разделяя ее между всеми вашими контейнерами, поэтому ваши приложения и службы остаются легкими и быстро работают параллельно.

Контейнеры Linux — это еще один эволюционный скачок в том, как мы разрабатываем, развертываем приложения и управляем ими. Образы контейнеров Linux обеспечивают переносимость и контроль версий, помогая гарантировать, что то, что работает на ноутбуке разработчика, также работает в рабочей среде. По сравнению с виртуальными машинами работающий контейнер Linux менее ресурсоемок, имеет стандартный интерфейс (запуск, остановка, переменные среды и т. д.), сохраняет изоляцию приложений и легче управляется как часть более крупного приложения (несколько контейнеров). . Кроме того, эти мультиконтейнерные приложения можно организовать в нескольких облаках.

Существуют даже инструменты, сочетающие оркестрацию контейнеров и управление виртуальными машинами. Узнайте больше об этом в этом треке Red Hat Summit 2020, который включает секционную сессию, посвященную как раз такому инструменту.

Что такое LXC?

Проект Linux Containers (LXC) – это контейнерная платформа с открытым исходным кодом, которая предоставляет набор инструментов, шаблонов, библиотек и языковых привязок. LXC имеет простой интерфейс командной строки, который упрощает работу пользователей при запуске контейнеров.

LXC предлагает среду виртуализации на уровне операционной системы, которую можно установить во многих системах на базе Linux. В вашем дистрибутиве Linux он может быть доступен через репозиторий пакетов.

Краткая история контейнеров

Идея того, что мы сейчас называем контейнерной технологией, впервые появилась в 2000 году в виде тюрьм FreeBSD, технологии, позволяющей разделить систему FreeBSD на несколько подсистем или тюрьм. Тюрьмы были разработаны как безопасная среда, которую системный администратор мог использовать совместно с несколькими пользователями как внутри организации, так и за ее пределами.

В 2001 году реализация изолированной среды появилась в Linux благодаря проекту VServer Жака Желинаса. Как только эта основа была заложена для нескольких контролируемых пользовательских пространств в Linux, части начали складываться, чтобы сформировать то, что сегодня является контейнером Linux.

Очень быстро все больше технологий объединились, чтобы воплотить этот изолированный подход в жизнь. Группы управления (cgroups) — это функция ядра, которая контролирует и ограничивает использование ресурсов для процесса или групп процессов. И systemd, система инициализации, которая настраивает пространство пользователя и управляет их процессами, используется контрольными группами для обеспечения большего контроля над этими изолированными процессами. Обе эти технологии, добавляя общий контроль для Linux, послужили основой для успешного разделения сред.

Войдите в Docker

В 2008 году на сцену вышла компания Docker (через dotCloud) со своей одноименной контейнерной технологией. Технология докеров добавила множество новых концепций и инструментов — простой интерфейс командной строки для запуска и создания новых многоуровневых образов, демон сервера, библиотеку готовых образов контейнеров и концепцию сервера реестра. В совокупности эти технологии позволили пользователям быстро создавать новые многоуровневые контейнеры и легко делиться ими с другими.

Существует 3 основных стандарта для обеспечения совместимости контейнерных технологий: спецификации образа OCI, распределения и среды выполнения. В совокупности эти спецификации позволяют проектам сообщества, коммерческим продуктам и облачным провайдерам создавать совместимые контейнерные технологии (подумайте о том, чтобы отправить созданные вами образы на сервер реестра облачного провайдера — вам это нужно для работы). Сегодня Red Hat и Docker, среди многих других, являются членами инициативы Open Container Initiative (OCI), которая обеспечивает открытую отраслевую стандартизацию контейнерных технологий.

Что насчет безопасности контейнера?

Контейнеры популярны, но насколько они безопасны? Безопасность контейнера состоит из множества движущихся частей: вам необходимо защитить конвейер контейнера и приложение; среда (среды) развертывания и инфраструктура, и вам нужен план интеграции с инструментами и политиками безопасности предприятия. Вам нужен план. Мы можем помочь.

Почему стоит выбрать контейнеры Red Hat для Linux?

Компания Red Hat давно работает в сообществе открытого исходного кода, чтобы сделать такие технологии, как контейнеры, безопасными, стабильными и надежными. Это то, что мы делаем. Затем мы поддерживаем эти технологии. Так что, если вам нужна помощь, мы здесь.

Технологии Red Hat избавляют от необходимости строить контейнеры правильно.Будь то перевод ваших команд разработчиков на платформу, созданную с учетом контейнеров, запуск инфраструктуры контейнеров в лучшей в своем классе операционной системе или предоставление решений для хранения массивных данных, генерируемых контейнерами, решения Red Hat помогут вам.

Продолжить чтение

Контейнеры и виртуальные машины

Контейнеры Linux и виртуальные машины (ВМ) представляют собой упакованные вычислительные среды, объединяющие различные ИТ-компоненты и изолирующие их от остальной системы.

Что такое оркестрация контейнеров?

Оркестровка контейнеров автоматизирует развертывание, управление, масштабирование и объединение контейнеров в сеть.

Что такое контейнер Linux?

Контейнер Linux – это набор процессов, изолированных от системы, которые запускаются из отдельного образа, предоставляющего все файлы, необходимые для поддержки процессов.

Складирование грузовых контейнеров

Короче говоря, контейнеры Linux содержат приложения таким образом, что они изолированы от хост-системы, на которой они работают. Контейнеры позволяют разработчику упаковать приложение со всеми необходимыми частями, такими как библиотеки и другие зависимости, и отправить все это как один пакет. Кроме того, они созданы для того, чтобы облегчить разработчикам и системным администраторам единообразный процесс переноса кода из сред разработки в рабочую среду быстрым и воспроизводимым способом.

Научитесь защищать свою контейнерную платформу

в стеке

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

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

Почему существует такой интерес к контейнерам?

Несомненно, одной из главных причин недавнего интереса к технологии контейнеров стал проект с открытым исходным кодом Docker, инструмент командной строки, который упростил создание контейнеров и работу с ними как для разработчиков, так и для системных администраторов, подобно тому, как Vagrant упростил эту задачу. чтобы разработчики могли легко исследовать виртуальные машины.

Docker — это инструмент командной строки для программного определения содержимого контейнера Linux в коде, который затем можно легко создавать, воспроизводить, совместно использовать и изменять, как если бы он был исходным кодом программы.

Контейнеры также вызвали интерес к микросервисной архитектуре — шаблону проектирования для разработки приложений, в котором сложные приложения разбиваются на более мелкие составные части, которые работают вместе. Каждый компонент разрабатывается отдельно, и тогда приложение представляет собой просто сумму составляющих его компонентов. Каждая часть или служба может находиться внутри контейнера и масштабироваться независимо от остальной части приложения по мере необходимости.

Как организовать контейнеры?

Простое размещение приложений в контейнерах, вероятно, не приведет к феноменальным изменениям в работе вашей организации, если только вы не измените способ развертывания этих контейнеров и управления ими. Одной из популярных систем для управления и организации контейнеров Linux является Kubernetes.

[Загрузить учебник по контейнерам]

Kubernetes — это система с открытым исходным кодом для управления кластерами контейнеров. Для этого он предоставляет инструменты для развертывания приложений, масштабирования этих приложений по мере необходимости, управления изменениями в существующих контейнерных приложениях и помогает оптимизировать использование базового оборудования под вашими контейнерами. Оно расширяемо, а также отказоустойчиво, позволяя компонентам приложения перезапускаться и перемещаться между системами по мере необходимости.

Инструменты автоматизации ИТ, такие как Ansible, и проекты платформы как услуги, такие как OpenShift, могут добавлять дополнительные возможности, облегчающие управление контейнерами.

Как обеспечить безопасность контейнеров?

Контейнер повышает безопасность, изолируя приложения от других приложений в операционной системе хоста, но простого помещения приложения в контейнер недостаточно для обеспечения его безопасности.Дэн Уолш, эксперт по компьютерной безопасности, известный своей работой над SELinux, объясняет некоторые способы, с помощью которых разработчики работают над тем, чтобы Docker и другие инструменты контейнеров обеспечивали безопасность контейнеров, а также некоторые функции безопасности, которые в настоящее время доступны в Docker. и как они работают.

Где я могу узнать больше?

Вот некоторые дополнительные ресурсы, которые могут вас заинтересовать.

Creative Commons License

Эта работа находится под лицензией Creative Commons Attribution-Share Alike 4.0 International License.

Цель состоит в том, чтобы предложить среду, независимую от дистрибутива и поставщика, для разработки контейнерных технологий Linux.

Наша цель — предоставить контейнеры и виртуальные машины, работающие под управлением полноценных систем Linux. В то время как виртуальные машины предоставляют полную среду, системные контейнеры предлагают среду, максимально близкую к той, которую вы получаете от виртуальной машины, но без накладных расходов, связанных с запуском отдельного ядра и моделированием всего оборудования.


Активные проекты

LXD — это системный контейнер нового поколения и диспетчер виртуальных машин. Он предлагает унифицированный пользовательский интерфейс для полных систем Linux, работающих внутри контейнеров или виртуальных машин.

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

При использовании LXD вы можете управлять своими экземплярами (контейнерами и виртуальными машинами) с помощью простого инструмента командной строки, напрямую через REST API или с помощью сторонних инструментов и интеграций. LXD реализует единый REST API как для локального, так и для удаленного доступа.

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

LXC предоставляет базовую функциональность, используемую внутри LXD. Однако его не следует путать с клиентским инструментом командной строки lxc, предоставляемым LXD.

LXCFS

  • Файлы наложения для cpuinfo, meminfo, статистики и времени безотказной работы.
  • Совместимое с cgroupfs дерево, разрешающее непривилегированную запись.

Он предназначен для устранения недостатков procfs, sysfs и cgroupfs путем экспорта файлов, соответствующих ожиданиям пользователя системного контейнера.

дистрибутив

  • Сложное определение изображения в виде простого документа YAML.
  • Несколько выходных форматов (chroot, LXD, LXC).
  • Поддержка множества дистрибутивов и архитектур.

в современном дизайне distrobuilder используются готовые официальные образы, когда они доступны, используется декларативное определение образа (YAML) и поддерживаются различные модификации базового образа.

Устаревшие проекты

CGManager

CGManager – это демон управления контрольными группами, который позволяет вложенным непривилегированным контейнерам создавать контрольные группы и управлять ими через API DBus.

Читайте также: