Технология контейнеризации была очень горячей темой в отрасли с момента ее бурного развития в последние несколько лет. Чтобы расширить свои знания, вы должны изучить ее. В этой статье объясняется ее прошлое и настоящее с точки зрения разработки и сравнивается с традиционный Сравните технологии виртуализации и проанализируйте соответствующие принципы их работы.
технология виртуализации
Виртуализация — наиболее распространенный метод, использовавшийся в прошлом для полного использования физических ресурсов компьютера. В первые годы мы могли использовать сервер для запуска операционной системы для обработки задачи, но проблема заключалась в том, что использование ресурсов было крайне недостаточным, и потенциал компьютера не мог быть полностью реализован. системы совместного использования появлялись одна за другой, Unix, Linux и другие операционные системы стали волшебным оружием человека для «выжимания» физических ресурсов компьютера, но в то время технологии виртуализации еще не появились.
Сосредоточьтесь на 1990-х годах, когда ИТ-индустрия постепенно индустриализировалась, и большое количество компаний развернули свои собственные внутренние ИТ-среды, используя относительно недорогие серверы, операционные системы и приложения от разных поставщиков. : большинство предприятий используют физические серверы или приложения, предоставляемые одним поставщиком, и каждый сервер может выполнять только задачу, специфичную для поставщика. Это также несовместимо. Если они оснащены различными аппаратными устройствами в это время, они неизбежно столкнутся с проблемой недостаточной загрузки физического оборудования. В настоящее время технология виртуализации может показать свой потенциал, она в основном решает проблемуСервер можно разделить,Может запускать приложения в разных средах на одном хостеДве основные проблемы.
С тех пор серверы стали использоваться более эффективно, что привело к сокращению корпоративных затрат на приобретение, настройку, охлаждение и техническое обслуживание. Широкое применение виртуализации также помогло снизить зависимость предприятия от одного поставщика и заложило основу для развития облачных вычислений в дальнейшем.
Как работает виртуализация
Реализация технологии виртуализации в основном зависит отГипервизор. Он расположен между физическим уровнем компьютера и виртуальной машиной и может эффективно управлять физическими ресурсами компьютера и распределять эти ресурсы между различными виртуальными средами. В качестве программного обеспечения гипервизор может работать непосредственно поверх операционной системы, а в качестве сервера его также можно установить непосредственно на аппаратное обеспечение, именно так большинство предприятий используют виртуализацию.
На этом этапе гипервизор напрямую берет на себя физические ресурсы и может разделять их и назначать нескольким виртуальным машинам, а пользователь также может напрямую взаимодействовать с базовым компьютером через него в виртуальной машине. Когда виртуальная машина работает, если программа пользователя выдает аппаратную инструкцию для запроса ресурсов, гипервизор напрямую передает запрос физической системе для внесения изменений в кэш, и все они работают почти с той же скоростью, что и собственная машина. в физическом оборудовании - это то, о чем мы часто слышимType1, также известный как гипервизор на «голом железе» (Metal Hypervisor), в настоящее время широко используемый на рынке VMware ESXi, MiscroSoft Hyper-V и KVM (Kernel-based Virtual Machine) основаны на этом типе гипервизора.
И еще один гипервизор, работающий в операционной системе, этоType2, этот метод именования очень простой и грубый, его трудно забыть, его метод обработки заключается в том, чтобы сделать Гипервизор не связанным напрямую с физическим уровнем основой, поэтому его также называют размещенной программой (Hosted Hypervisor), он в основном используется для отдельных пользователей мы часто к этому типу относимся Virtual Box и VMware WorkStation, установленные на этой машине. На данный момент, по сравнению с Type1, Type2 явно имеет немного большую задержку.
Таким образом, каждая виртуальная машина независима друг от друга в гипервизоре, работает под управлением разных операционных систем и использует разные физические ресурсы, что также дает нам ожидаемую гибкость и переносимость.Мы можем перенести виртуальную машину из гипервизора.Мигрировать напрямую к новому гипервизору, после чего своего родаповторное использование средыЭффект.
Применение технологии виртуализации
В начале развития виртуализации он в основном использовался для виртуализации серверов, но с постепенной популяризацией этого метода также были получены многие технологии, такие как виртуализация сети, виртуализация приложений, виртуализация данных и виртуализация хранения. В этой статье мы не будем знакомить их по одному. Заинтересованные читатели могут обратиться к соответствующей информации в производной ссылке внизу.
технология контейнеризации
На данный момент, поскольку технология виртуализации созрела, мы можем запустить ее в производство и использовать.Если мы хотим поместить программу NodeJs, разработанную нами, в виртуальную машину, нам нужно установить виртуальную машину Linux на основе гипервизора в на хост-системе (установите ОС Linux отдельно) и настройте полную среду выполнения приложений JS и необходимые библиотеки для службы в Linux, как показано на следующем рисунке.
Вызванные этим проблемы также очевидны: NodeJS может требовать очень мало ресурсов (10 М) при работе, в то время как сама виртуальная машина занимает довольно много ресурсов (>400 М). расхода ресурсов видно вообще, да и сервер быстро перегружается.
С этой точки зрения, хотя технология виртуализации обеспечивает разные задачи на одной и той же хост-системе и решает проблему разделения аппаратных ресурсов на аппаратном уровне, потребление ресурсов на верхнем уровне приложения по-прежнему является очень большой проблемой. В то же время, в повседневной разработке, если мы используем наши собственные персональные компьютеры, также могут возникнуть другие проблемы совместимости при отправке на сервер при разработке приложений, таких как Macbook, что обычно означает, что мое приложение хорошо работает локально и помещается в Среда болезненна и плоха для DevOps, непрерывной интеграции и доставки.
Контейнеризация решает обе проблемы, описанные выше, путем объединения кода приложения и связанных файлов конфигурации, библиотек и зависимостей, необходимых для запуска. В этот момент приложение и другие зависимости стали единым целым, упакованным в файл, и запуск этого файла сгенерирует виртуальный контейнер, программа запускается в этом закрытом виртуальном контейнере, а контейнер предоставляет все, что хочет, ресурсы, как бы работает на реальной физической машине. С контейнерами вам больше не нужно беспокоиться об окружающей среде. Кроме того, как показано на рисунке ниже, контейнер не связывает операционную систему, от которой зависит среда приложения, поэтому очевидно, что он легковесен.
Обычно для контейнеризации приложения требуется всего три шага: сначала определить файл манифеста (например, Dockerfile в Docker или файл yaml в Cloud Fundary), затем создать файл образа (например, Docker Image или Rocket ACI) и, наконец, просто сгенерировать контейнер, который содержит все библиотеки, бинарные файлы и т. д., необходимые для запуска приложения.В приведенном выше примере мы также можем таким образом получить контейнер программы NodeJS и поместить его в хост-систему.
В настоящее время технология контейнеризации также может отказаться от избыточного потребления ресурсов и обеспечить более легкое развертывание среды. Кроме того, рассмотрим еще один вопрос.Если нам нужно применить другие библиотеки среды в нашем приложении Nodejs, такие как приложение python для распознавания изображений и приложение java для обработки данных, то если мы используем технологию виртуализации, для достижения облачного подхода Это необходимо высвободить некоторые ресурсы на предыдущем хосте, а затем развернуть в нем такие приложения, как python.При использовании технологии контейнеризации нужно только поместить копию приложения python на исходный сервер, а затем использовать оставшиеся простаивающие ресурсы как контейнеры, сосуществование междуСовместное использование ресурсов ЦП при изоляции между контейнерами.
На этом этапе механизм контейнера (например, механизм Docker), установленный в хост-системе, может стать каналом для всех контейнеров для совместного использования одних и тех же ресурсов операционной системы.
Контейнеры Linux — это еще один шаг вперед в том, как мы разрабатываем, развертываем и управляем приложениями. Образы контейнеров Linux обеспечивают переносимость и контроль версий, гарантируя, что приложение, работающее на ноутбуке разработчика, также будет хорошо работать в производственной среде. По сравнению с виртуальными машинами контейнеры Linux потребляют меньше ресурсов во время выполнения, используют стандартизированные интерфейсы (запуск, остановка, переменные среды и т. д.) и изолированы от других приложений. Кроме того, контейнерами легче управлять, когда они являются частью более крупного приложения (с несколькими контейнерами).
Применение технологии контейнеризации
С растущим развитием технологии контейнеризации, особенно в облачной среде, многие предприятия уже рассматривают возможность использования контейнеров вместо виртуальных машин в качестве универсальной вычислительной платформы для своих приложений.Среди такого широкого спектра приложений наиболее типичными являются следующие: :
- Микросервисы. Контейнеры небольшие и легкие, что делает их идеальными для архитектуры микросервисов, где приложение может состоять из множества небольших сервисов, которые слабо связаны и могут развертываться независимо друг от друга.
- DevOps: микросервисы как архитектура и сочетание контейнеров и платформ служат общей основой для многих команд, которые рассматривают DevOps как способ создания, доставки и запуска программного обеспечения.
- Гибридное облако, сценарий с несколькими облаками: поскольку контейнеры могут работать где угодно на ноутбуках, в локальной среде и в облачных средах, это идеальная инфраструктура для сценариев гибридного облака и нескольких облаков, в этом случае предприятия могут взаимодействовать с центрами обработки данных через несколько публичные облака.
- Миграция модернизации приложений. Контейнеризация позволяет модернизировать приложения и перемещать их непосредственно в облако.
Стандартизация технологии контейнеризации
С непрерывным развитием технологии контейнеризации постепенно возникла потребность в стандартизации технологии контейнеров и кода программного обеспечения для упаковки.В июне 2015 года Docker и другие промоутеры отрасли учредили Open Container Initiative (OCI) с целью продвижения открытые стандарты и стандартизация технологии контейнеров, пользователи больше не будут связаны технологиями конкретного производителя, а смогут воспользоваться преимуществами технологий, сертифицированных OCI, которые позволяют пользователям использовать различные инструменты DevOps для создания программ контейнерных приложений и запуска этих приложений. приложения в согласованном стандартном процессе в инфраструктуре.
В настоящее время Docker является одной из наиболее широко используемых технологий движка контейнеров, но это не единственный наш выбор, сообщество также работает над контейнеризацией и другими альтернативами (такими как CoreOS rkt, Mesos Containerizer, контейнеры LXC Linux, OpenVZ и criod). и т. д.) для нормализации. Хотя сегодня их возможности и настройки по умолчанию могут различаться, поскольку норма продолжает развиваться, использование спецификации OCI гарантирует, что решение не зависит от поставщика и полностью развертывается в различных средах.
Docker
Технология Docker использует ядро Linux и связанные с ним функции (такие как Cgroups и пространства имен) для разделения процессов, чтобы каждый процесс работал независимо друг от друга. Именно эта независимость и означает использование контейнеров: они могут запускать несколько процессов и приложений независимо друг от друга, более полно использовать основные ресурсы и поддерживать безопасность каждой независимой системы.
также. Технология Docker не совсем такая же, как традиционные контейнеры Linux, она изначально была основана наLXC(Linux Containers, Linux Containers), но постепенно избавилась от своей зависимости от этой технологии. По сравнению с виртуализацией LXC действительно выходит на первое место, но не обеспечивает хорошего пользовательского опыта.В этом плане Docker явно лучше, помимо запуска контейнеров, технология Docker также имеет множество других функций, в том числе упрощение использования контейнерной сборки. , передавать изображения и контролировать процесс версий изображений и т. д.
Традиционные контейнеры Linux используют систему инициализации для управления различными процессами, что заставляет все приложения работать как единое целое в разных средах, в то время как технология Docker противоположна этому, она стремится позволить приложениям работать в процессах независимо и предоставляет соответствующие инструменты для достижения этой цели. функция, этот усовершенствованный режим работы имеет свои преимущества.
Докер в действии
См. Установка Docker на каждой платформе.официальная документация, после установки выполните в терминале следующую команду, чтобы убедиться, что установка прошла успешно:
$ docker version
Docker упаковывает приложение и его зависимости в файл образа, который можно использовать для создания контейнера Docker. Выполните следующую команду, чтобы получить список всех файлов изображений на этом компьютере:
$ docker image ls
Если вы запускаете Docker впервые, вы можете запустить тест сервера nginx, выполнив следующую команду:
$ docker run -d -p 80:80 --name myserver nginx
После выполнения этой команды, поскольку это первый запуск и образ nginx не был загружен локально, Docker автоматически извлечет образ из библиотеки Docker Hub.Если команда выполнена успешно, перейдите на [http://localhost] (http://localhost) Затем вы можете просмотреть домашнюю страницу сервера nginx.
Ниже я буду использовать Docker для установки среды Hadoop, чтобы продемонстрировать конкретный метод, используемый Docker. Чтобы установить Hadoop в контейнер Docker, вам сначала понадобится образ Hadoop Docker.Чтобы сгенерировать образ, мы можем использовать библиотеку изображений docker-hadoop в Github и выполнить следующую команду, чтобы получить код в хранилище:
$ git clone https://github.com/big-data-europe/docker-hadoop.git
Образ docker-hadoop содержит Makefile, файл манифеста для создания образа.На этом этапе выполните следующую команду:
$ docker-compose up -d
docker-Compose можно использовать для одновременной установки нескольких контейнеров. Параметр -d используется для запуска командной программы в фоновом режиме и возврата к командной строке. С помощью всего одной приведенной выше команды вы можете настроить кластер Hadoop.
Если образ недоступен локально, docker-compose также попытается извлечь удаленный образ из репозитория docker-hub, собрать образ и запустить контейнер. Как только это будет сделано, пришло время проверить текущий запущенный контейнер с помощью следующей команды:
$ docker image ls
Введите [http://localhost:9870](http://localhost:9870), чтобы просмотреть текущее состояние системы с узла имени.
Конечно, кроме использования этого метода с помощью других вdocker-hubИли зеркало Github с открытым исходным кодом, мы также можем настроить зеркало, этот метод не будет обсуждаться в этой статье. Эта статья закончилась. После прочтения вы освоили все концепции виртуализации и контейнеров? Если у вас есть какие-либо вопросы, пожалуйста, свяжитесь со мной напрямую или по адресумой блогОбсуждение в разделе комментариев.
мой блог:meandni.com/
Справочные статьи и производные чтения
RED-HAT-what-is-virtualization
RED-HAT-What's a Linux container?
A history of low-level Linux container runtimes
Знания ядра, лежащие в основе Docker — ограничения ресурсов cgroups
Некоторые фотографии взяты из:what-is-virtualization-and-how-does-it-work