Что такое Docker?

  Максим Крук  | 

  Обновл. 13 Апр 2021  | 

 3591

Если вы планируете начать свою карьеру как DevOps engineer или вы уже работающий DevOps, или разработчик в компании, который еще не освоил этот инструмент, то сейчас самое время. На этом уроке мы рассмотрим, что такое Docker и чем он может быть полезен.

Введение в Docker

Docker — это платформа, которая упрощает процесс сборки, запуска, управления и распространения приложений с помощью виртуализации операционной системы (ОС), на которой он установлен. Первый релиз Docker состоялся в марте 2013 года и был разработан с использованием языка программирования Go (он же Golang), который взял всё самое лучшее из языков Cи и С++ для решения актуальных проблем разработчиков облачных приложений.

Один из самых частых вопросов: «Чем же Docker-контейнеры отличаются от виртуальных машин?». Дело в том, что виртуальная машина работает с помощью программы Гипервизор (Hypervisor), которая создает новую машину внутри вашей системы, основываясь на ресурсах, которые вы выделили под нее. Примерами таких программ являются Oracle VM Virtualbox или VMware Workstation Player. Docker же использует возможности ядра Linux, которые позволяют ему создать так называемую виртуализацию операционной системы (англ. «OS-level virtualization»). Таким образом, процессы приложений, запущенных с помощью Docker, вы сможете увидеть в списке процессов вашей операционной системы.

На следующем рисунке вы можете увидеть отличия контейнеризации от виртуализации:

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

Подход с контейнерами более гибкий и легковесный, потому что контейнеры не отнимают столько ресурсов, сколько виртуальные машины.

Какие проблемы решает Docker?


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

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

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

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

Правило: Docker виртуализирует операционную систему, на которой он установлен и запущен, а Hypervisor виртуализирует аппаратные компоненты системы.

Плюсы и минусы использования Docker

Ключевые преимущества использования Docker как платформы:

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

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

   Контейнер не имеет установленной операционной системы, поэтому он потребляет относительно небольшое количество памяти в сравнении с виртуальной машиной (которая требует установки полноценной ОС).

   Docker не требователен к аппаратным ресурсам в сравнении с виртуальными машинами.

Минусы использования Docker как платформы:

   Приложения, которые требуют разные операционные системы, не могут быть размещены на одном и том же Docker host. Например, если у нас есть 2 приложения под Windows и 2 под Linux, то для них потребуются отдельные машины с установленными ОС Windows и OC Linux, соответственно.

Ключевые составляющие Docker


Docker Engine является одним из самых главных компонентов платформы Docker. Он отвечает за работу Docker как платформы в целом.

Docker Engine — это клиент-серверное приложение, которое состоит из трех главных компонентов:

   Сервер — это программа, которая работает в фоновом режиме как daemon-процесс (демон dockerd).

   REST API — предоставляет интерфейсы, через которые программы могут взаимодействовать с daemon-процессом.

   Интерфейс командной строки (сокр. «CLI» от англ. «Command Line Interface») — с помощью него мы общаемся с REST API (демон docker).

Проиллюстрируем это:


Заключение

На этом уроке мы рассмотрели, что такое Docker, чем он отличается от виртуальных машин, его ключевые преимущества и минусы использования, а также затронули тему ключевых компонентов Docker. На следующих уроках мы рассмотрим установку Docker на Linux и на Windows.


Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (13 оценок, среднее: 4,85 из 5)
Загрузка...

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *