Распространение контейнеризации: эффект Докера (часть 2)

Опубликовано: 7 Марта, 2023
Распространение контейнеризации: эффект Докера (часть 2)

  • Распространение контейнеризации: эффект Докера (часть 5)

Введение

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

Docker приносит контейнеры в массы

Как мы обсуждали в части 1, концепция контейнеров существует уже давно, но до тех пор, пока на сцену не вышел Docker, она оставалась чем-то вроде нишевой технологии. Подобно тому, как Apple взяла пару идей, которые были реализованы другими в прошлом, но так и не прижились (смартфоны и планшеты), и превратила их в огромный потребительский успех, Docker «переосмыслил» идею контейнера и превратил ее в Next. Большая вещь в IT.

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

И разработчики программного обеспечения, и их клиенты хотят получить то, что может дать им Docker. Это включает более быстрый сквозной процесс. Мы живем в мире, особенно в деловом мире, где мы хотим того, чего хотим, и мы хотим этого вчера, и это относится и к программным приложениям. Более быстрая доставка делает клиента счастливым, а если перефразировать старую поговорку о маме, то, если клиент недоволен, никто не будет счастлив.

Контейнеры Docker делают приложения неизбежно переносимыми. Разработчикам легко делиться своим кодом друг с другом для совместной работы. Так же легко развернуть приложения в любой среде, будь то локальный компьютер, сервер (работающий на виртуальной машине или на «голом железе») в локальном центре обработки данных организации или в центре обработки данных облачного провайдера «там». ». Docker также обеспечивает экономию средств за счет сокращения аппаратных ресурсов, которые мы обсуждали в части 1, а также масштабируемость и гибкость.

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

Эволюция Докера

Ранние версии Docker изначально были основаны на LXC, и это была среда выполнения по умолчанию. Начиная с версии 0.9, Docker получил собственную библиотеку libcontainer для обеспечения прямого доступа к API-интерфейсам контейнеров Linux и не должен зависеть от LXC. Их по-прежнему можно использовать вместе, но LXC теперь не является обязательным. Подробнее о LXC и его новой реализации LXD мы поговорим позже в этой серии статей.

Прошлым летом Docker представила runC, который они позиционируют как универсальную среду выполнения контейнеров-песочниц. Это автономный инструмент, который включает пользователей кода Docker для работы с функциями операционной системы (в Linux/UNIX и в Windows 10), которые обеспечивают абстракцию оборудования и ОС (пространства имен, группы управления и т. д.). Одна из целей состоит в том, чтобы сделать контейнеры еще более переносимыми, и для этого runC имеет встроенную поддержку пространств имен и функций безопасности Linux, а также встроенную поддержку контейнеров Windows, а Docker планирует поддерживать различные аппаратные платформы, такие как ARM, Sparc и Power., а также новейшие аппаратные функции.

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

Приложения Docker, доступные в реестре (Docker Hub), уже настроены, просты в развертывании и используют стандартизированный формат. Это упрощает запуск облачных приложений и их перенос в различные облачные среды и операционные системы.

Докер под капотом

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

Docker может быть установлен на ноутбуке или настольном компьютере разработчика и использоваться для создания контейнерных приложений, а также может быть установлен на серверах для запуска этих приложений. Docker Engine можно установить на Linux, Windows, Mac OS X и облачных платформах, таких как Google Cloud, Amazon EC2, Microsoft Azure и Rackspace Cloud.

Чтобы запустить контейнер Docker, вы указываете двоичный файл Docker и команду, которую хотите запустить, а также указываете образ, являющийся источником контейнера, который вы хотите запустить. Если Docker не найдет образ на вашем локальном хосте Docker, он перейдет в Docker Hub, который является общедоступным реестром образов, и загрузит его оттуда. Затем вы указываете команду, которую хотите запустить внутри контейнера. Контейнер будет работать, пока активна команда, а затем остановится. Вы можете использовать команду выхода или CTRL+D, когда закончите. Вы можете создавать интерактивные контейнеры, которые работают на переднем плане, или вы можете создавать отдельные контейнеры, которые запускают демон в фоновом режиме.

Контейнеры идентифицируются в Docker по идентификатору контейнера, который представляет собой длинную шестнадцатеричную строку с более коротким вариантом. Вы можете использовать идентификатор для запроса информации о контейнере. Docker автоматически присваивает имя контейнерам при их запуске, но вы можете указать свои собственные имена. Вы используете команду docker logs, чтобы заглянуть в контейнер и просмотреть его вывод. Вы можете остановить контейнер с помощью команды docker stop и проверить состояние контейнера, чтобы убедиться, что он действительно остановлен с помощью команды docker ps.

Каждый раз, когда вы вводите docker в терминале Bash, вы используете клиент Docker. Это интерфейс командной строки, который можно использовать для создания веб-приложений. Помимо использования образов, загруженных из Docker Hub, вы можете создавать собственные образы и делиться ими. Существует много разных образов, которые были созданы другими и загружены в Hub, поэтому вам не нужно заново создавать колесо каждый раз, когда вам нужно Dockerized-приложение. Когда вы загружаете образы из Hub, Docker сохраняет их на вашем локальном хосте. Вы можете найти изображения с помощью команды поиска docker, а затем загрузить их с помощью команды docker pull.

Если образ похож на то, что вам нужно, но не совсем работает, вы можете внести изменения в образ, обновив контейнер, созданный из этого образа, а затем зафиксировав результаты. Вы также можете создавать новые образы с нуля, используя команду сборки docker и создавая Dockerfile. Чтобы поделиться образом с другими, вы можете использовать команду docker push, чтобы загрузить его в Docker Hub. Обратите внимание, что вы можете поместить его в общедоступный или частный репозиторий.

Резюме

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

В следующий раз, в части 3, мы поднимем (иногда щекотливую) тему безопасности контейнеров в целом и безопасности Docker в частности, что было сделано и делается для ее улучшения, а также сторонние решения по безопасности, которые могут сделать Docker и другие методы контейнеризации более безопасны.

  • Распространение контейнеризации: эффект Докера (часть 5)