Контакты

Что такое Docker и как он работает

Статьи
разработка
docker
08.07.2022
Что такое Docker и как он работает
Время чтения 0 мин
Просмотров: 187

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

Проблемы в продакшене

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

Как Docker решает эту проблему?

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

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

Понимание архитектуры Docker

Архитектура Докер

Docker управляет контейнерами с помощью Docker Engine, который включает в себя различные компоненты, такие как Docker CLI, взаимодействующий с Docker REST API для выполнения различных задач оркестровки, что упрощает нам управление контейнерами Docker на серверах. Основной частью Docker Engine является Docker Daemon, который управляет всеми этими задачами в фоновом режиме, такими как управление образами Docker, контейнерами, процессами и т. д.

Терминология Docker
Docker контейнеры

Относится к части программного обеспечения/приложения, которое работает как независимый процесс в форме контейнера, это может быть либо часть распределенного приложения, либо приложение в целом. Например: если приложение состоит из двух компонентов: фронт-енда на React.js и внутренних API-интерфейсов на Symfony и базы данных в PostgreSQL, то оно будет размещено в трех разных докер-контейнерах, содержащих соответствующую часть и необходимые компоненты/библиотеки.

Docker CLI

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

Docker образы

Приложение/программное обеспечение упаковано в виде образа, который используется docker контейнерами. В основном, docker контейнеры основаны на на этих образах, поскольку docker образы состоят из кода приложения, необходимых библиотек, компонентов и т. д.

Тома Docker

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

Docker Networks

С помощью Docker Networks контейнеры взаимодействуют с хостом. Docker Networks работает как мост между хост-сетью и системой Docker, а также облегчают связь между несколькими контейнерами и обеспечивают безопасную среду связи для передачи данных между ними. После понимания того, как работает докер, очень распространенный вопрос, который появляется, заключается в том, чем докер отличается от традиционных виртуальных машин, которые использовались ранее? За исключением того, что докер легкий, есть некоторые существенные различия между тем, как эти технологии функционируют. Именно эти существенные отличия делает докер гораздо более эффективным, чем виртуальные машины.

Разница между Docker и виртуальными машинами

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

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

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

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