Docker: обзор экосистемы

Рассказываем о том, что такое Docker и как он помогает современному разработчику.

Что такое 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

Рассмотрим, из чего состоит экосистема этого ПО:

Клиент

Сервер (daemon)

Данные передаются от клиента к нему, и тот выполняет всю работу.

Контейнеры (docker containers)

Внутри них вы запускаете свои приложения. По сути, контейнер — не что иное,
как процесс вашей ОС, но запущенный в изолированном окружении, а не на компьютере.

Образы (docker images)

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

Реестры

В них система держит созданные вами образы. Они бывают публичными и частными. Официальный реестр называется DockerHub, в нем более 10 тысяч образов.

Способы применения Docker

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

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

  • автоматизация и упрощение развертывания проектов;
  • масштабирование баз данных, сервисов backend и веб-приложений;
  • построение своих легковесных и переносимых PaaS-окружений;
  • обеспечение возможности беспроблемно работать над проектом большой команде разработчиков.

Kubernetes

Перед пользователями Docker возник вопрос: как разворачивать контейнеры на многих хостах? Как раз для управления их большим количеством в Google был создан Kubernetes. Он предлагает высокоуровневый API, благодаря которому можно группировать контейнеры, задавать их размещение и балансировать нагрузку.

Компоненты Kubernetes, автор Julia Evans

Преимущества и недостатки

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

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

Плюсы Docker

  1. Абстрагирование приложения. Приложение в контейнере не зависит от архитектуры или ресурсов хоста.
  2. Быстрота и простота масштабирования. Если приложение грамотно спроектировано, то масштабирование становится очень прямолинейным и легким для разработчиков процессом.
  3. Простота контроля версий и управления зависимостями. Вы можете соединить свое приложение со всеми зависимостями и работать с ним как с одним целым. Зависимости содержатся в одном контейнере, и хост-системы больше не отвечают за управление ими.
  4. Изолированная среда. Уровень изолированности не сравнится с виртуализацией, однако благодаря легкой среде выполнения можно мгновенно запускать приложения в любом количестве контейнеров.

У инструмента есть недостатки, перечислим их:

  • дополнительная нагрузка на производительность;
  • усложнение инфраструктуры;
  • необходимость качественной и тонкой настройки;
  • большие временные ресурсы на процесс удаления контейнеров;
  • ограничение обратной совместимости в некоторых случаях.

Однако плюсы применения Docker в проектах с лихвой перекрывают все это.

Заключение

Это лишь основы, которые необходимо знать о Docker. В его использовании множество нюансов, которые открываются уже при самостоятельном взаимодействии с программным обеспечением. Чтобы разобраться глубже, рекомендуем курс
«PHP-разработчик», где вы узнаете о работе серверов, баз данных и backend-разработке более подробно.

Курс «PHP-разработчик»
Обширная программа для изучения PHP, состоящая из 4 курсов. Поможет с нуля овладеть популярным языком программирования, устроиться в IT-компанию вашей мечты или стать независимым разработчиком.
  • Живая обратная связь с преподавателями
  • Неограниченный доступ к материалам курса
  • Стажировка в компаниях-партнёрах
  • Дипломный проект от реального заказчика
  • Гарантия трудоустройства в компании-партнёры для выпускников, защитивших дипломные работы
Хочешь получать крутые статьи по программированию?
Подпишись на рассылку Skillbox