Docker: обзор экосистемы
Рассказываем о том, что такое Docker и как он помогает современному разработчику.
vlada_maestro / shutterstock
Что такое PaaS-решения
Без облачных сервисов сегодня трудно представить не только разработку программного обеспечения и веб-приложений, но и нашу обычную жизнь. Разницу между SaaS, Iaas и Paas наглядно демонстрирует прием Pizza as a Service с помощью такой диаграммы:
PaaS (Platform as a Service) — это виртуальная облачная платформа, средствами которой вы можете обеспечить полный цикл создания и поддержки веб-приложения: разработку, развертывание, тестирование и обслуживание. Все это будет реализовано удобным и быстрым способом.
Вам не нужно приобретать лицензии на программное обеспечение, управлять средствами разработки и сложной инфраструктурой — вы занимаетесь только своими приложениями, а все остальное делает платформа.
Здесь мы обзорно рассмотрим одно из самых популярных подобных решений для разработчиков — Docker.
Суть и возможности Docker
Принцип работы Docker метафорически можно описать как погрузку контейнеров на корабль в порту. До шестидесятых годов прошлого века доставка грузов была сложным процессом: перевозчику приходилось учитывать их различные типы — например, чтобы не повредить хрупкий и мягкий товар. Разгрузка занимала множество времени.
Эту проблему решил контейнер: любые грузы внутри него — будь то бананы или запчасти для авто — можно удобно расположить и перемещать с помощью автоматического крана. Необходимость выгружать при этом содержимое из контейнера исчезла — он не открывается до окончания поездки, и товары не могут случайно смешаться или испортиться из-за движения.
Так и Docker позволяет операционной системе запускать программы изолированно друг от друга — каждую в собственном окружении. Основа его работы — функции linux namespaces, благодаря которым можно виртуализировать и изолировать ресурсы системы. Сегодня уже существуют версии Docker для Windows и macOS. Несмотря на то что лежащие в основе Docker технологии придумали давно, именно он стал идеальной реализацией для решения сложных задач разработки.
Docker — программное обеспечение с открытым исходным кодом на базе Linux, но есть два варианта: бесплатное решение для свободного пользования и платное для корпоративного сегмента.
Компоненты Docker
Рассмотрим, из чего состоит экосистема этого ПО:
Клиент
Непосредственно сама программа Docker, которая получает команды от разработчика-пользователя и отдает их демону.
Сервер (daemon)
Данные передаются от клиента к нему, и тот выполняет всю работу.
Контейнеры (docker containers)
Внутри них вы запускаете свои приложения. По сути, контейнер — не что иное,
как процесс вашей ОС, но запущенный в изолированном окружении, а не на компьютере.
Образы (docker images)
Вы запускаете контейнеры из образов — готовых шаблонов, которые можно скачать или создать самостоятельно.
Реестры
В них система держит созданные вами образы. Они бывают публичными и частными. Официальный реестр называется DockerHub, в нем более 10 тысяч образов.
Способы применения Docker
Чтобы собрать программу из исходных файлов обычным способом, нужно совершить несколько действий: найти, скачать и установить зависимости для вашей операционной системы, распаковать архив, запустить конфигурирование, компиляцию, установить. Docker заменяет всё это выполнением одной команды.
В целом он используется разработчиками веб-приложений по всему миру
для решения следующих задач:
- автоматизация и упрощение развертывания проектов;
- масштабирование баз данных, сервисов backend и веб-приложений;
- построение своих легковесных и переносимых PaaS-окружений;
- обеспечение возможности беспроблемно работать над проектом большой команде разработчиков.
Kubernetes
Перед пользователями Docker возник вопрос: как разворачивать контейнеры на многих хостах? Как раз для управления их большим количеством в Google был создан Kubernetes. Он предлагает высокоуровневый API, благодаря которому можно группировать контейнеры, задавать их размещение и балансировать нагрузку.
Преимущества и недостатки
Трудно представить, но раньше подавляющее большинство проектов в интернете развертывались на один большой неповоротливый проприетарный сервер. Управлять им было неудобно, сложно и болезненно, даже несмотря на наличие специальных программ.
Docker полностью изменил подход к этому: теперь программы запускаются в отдельных контейнерах. Обновления версий одной программы не могут повлиять на другие обновления и всю систему в целом. Число ошибок и сбоев из-за этих факторов при использовании Docker стремится к нулю.
Плюсы Docker
- Абстрагирование приложения. Приложение в контейнере не зависит от архитектуры или ресурсов хоста.
- Быстрота и простота масштабирования. Если приложение грамотно спроектировано, то масштабирование становится очень прямолинейным и легким для разработчиков процессом.
- Простота контроля версий и управления зависимостями. Вы можете соединить свое приложение со всеми зависимостями и работать с ним как с одним целым. Зависимости содержатся в одном контейнере, и хост-системы больше не отвечают за управление ими.
- Изолированная среда. Уровень изолированности не сравнится с виртуализацией, однако благодаря легкой среде выполнения можно мгновенно запускать приложения в любом количестве контейнеров.
У инструмента есть недостатки, перечислим их:
- дополнительная нагрузка на производительность;
- усложнение инфраструктуры;
- необходимость качественной и тонкой настройки;
- большие временные ресурсы на процесс удаления контейнеров;
- ограничение обратной совместимости в некоторых случаях.
Однако плюсы применения Docker в проектах с лихвой перекрывают все это.
Заключение
Это лишь основы, которые необходимо знать о Docker. В его использовании множество нюансов, которые открываются уже при самостоятельном взаимодействии с программным обеспечением.