Поиск по сайту:

Как использовать Docker на практике (часть 1 — Введение)


На этой странице

  1. Часть 1. Введение в терминологию
    1. Предисловие
    2. Как появились контейнеры
    3. Виртуализация
    4. Контейнеры
    5. Докер
    6. Сводка

    Часть 1: Введение в терминологию

    Предисловие

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

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

    Мы начнем с самого начала, с некоторого необходимого описания исторических событий и концепций, а затем я продемонстрирую, как мы можем начать работать с контейнерами Docker. Таким образом, вы сможете понять, «что привело к созданию контейнеров», «каковы строительные блоки» и «как они работают».

    Как появились контейнеры

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

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

    Виртуализация

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

    Виртуализация на самом деле представляет собой сборку аппаратных компонентов, таких как ЦП, ОЗУ, диски, сетевые карты и т. д., которые эмулируются специальным программным обеспечением. Это похоже на сборку ПК с его основными компонентами, упомянутыми выше, в операционной системе и сборку их для работы, как если бы это был настоящий ПК. Таким образом, виртуальный ПК становится «гостем» внутри реального ПК, который с его операционной системой называется хостом.

    Хотя аппаратная виртуализация была введена примерно 10 лет назад, она получила широкое распространение на различных типах серверов разработчиками и системными администраторами с использованием функции KVM (виртуальная машина на основе ядра), встроенной в ядро Linux с 2007 года. С процессорами Intel\VT-x\ и AMDs \AMD-V\, которые помогают создавать любое количество виртуализированных операционных систем (ограниченных только аппаратными ресурсами), каждый разработчик может дешево создать несколько виртуальных машин (сокращенно ВМ) с ОС, даже с разными их версиями. Таким образом, они могут тестировать свои приложения без необходимости покупать новую установку или несколько, в зависимости от необходимой им ОС.

    Одним из больших преимуществ виртуализации является возможность создавать моментальные снимки. Моментальный снимок — это состояние виртуальной машины в определенный момент времени. Вы можете думать об этом как о «замороженном» состоянии виртуальной машины в определенное время. Таким образом, разработчик или системный администратор может создать виртуальную машину, установить определенную ОС и инструменты, которые ему нужны, и создать моментальный снимок. Затем он может приступить к тестированию, настройке или любым другим задачам, которые ему необходимо выполнить, а затем мгновенно вернуться к предыдущему моментальному снимку в любой момент времени.

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

    Все вышеперечисленное создало целую индустрию хостинговых компаний Virtual Private Server (VPS), где клиенты могли мгновенно запускать предварительно настроенные образы серверов для любых целей. Эти провайдеры VPS обычно имеют 10 или 20 моментальных снимков виртуальных машин на главном хост-сервере, которые клонируются несколько раз по запросу клиента, чтобы предоставить им виртуальные серверы, которые им нужны.

    Контейнеры

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

    Эта ситуация дала возможность разработчикам ядра Linux и хакерам выдвинуть идею, которая называется облегченной виртуализацией процессов. Таким образом, вместо того, чтобы использовать всю операционную систему, они могли сократить «ненужные» компоненты виртуальной ОС, чтобы создать ее минимальную версию. Это привело к созданию LXC (Linux Containers).

    Прежде чем копнуть глубже, следует упомянуть, что облегченная виртуализация процессов не является чем-то новым. В Solaris есть зоны, в BSD есть джейлы и есть другие подобные технологии, такие как OpenVZ. Проблема в том, что они часто меняют свое название или назначение, когда одна и та же базовая концепция используется в других проектах. Это правда, что не все одинаковы, но основные принципы почти одинаковы. Все они хотят изолировать, развернуть и создать одноразовый способ предоставления программных услуг без хлопот по перестройке всего и каждый раз снизу вверх.

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

    Как вы можете видеть на следующем изображении, виртуальная Ubuntu LXC слева использует 11 МБ при установке по умолчанию.

    Докер

    Как обычно, дело не остановилось на удалении ненужных частей ОС. Различные технологии ожили, еще больше раздвинув границы упрощенной виртуализации процессов. В 2013 году разработчики dotCloud (компания, позже сменившая название на Docker Inc.) представили Docker.

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

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

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

    Резюме

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

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

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