Почему и как именно Docker помог разработке?
Чтобы понять, каким проектам подойдёт данная технология, нужно понять, что это за инструмент, для чего он заточен и какие возможности имеет
Итак, господа, его величество docker - программная платформа, которая позволяет автоматизировать развёртывание приложения, а также управлять и выделять ресурсы, упаковывать и разворачивать блоки, размножать, раскладывать по полочкам, создавая так называемые контейнеры.
Создавался докер с целью построения публичной PaaS-платформы с поддержкой различных языков программирования. Для того чтобы дальше разобраться о чём будет идти речь, давайте сначала разберём основные понятия, связанные с технологией.
- Docker daemon - сервис, осуществляющий управление контейнерами.
- Docker client - интерфейс для работы с Docker daemon.
- Docker file - инструкция по развороту образа.
- Docker image (Образ) - Файл, хранящий в себе команды по развороту контейнеров. Сначала создаётся образ, от которого уже почкуются контейнеры.
- Docker container - Развёрнутый образ, в котором запущено приложение.
- Docker registry - репозиторий с докер-образами, где собрано множество популярных и не очень программ и платформ.
- Docker Hub - платформа, где расположен открытый репозиторий с различными docker-образами, готовых к использованию приложений.
Для оркестрации над контейнерами существует несколько инструментов, которые приведены ниже.
- Docker compose - позволяет развернуть и настроить все приложения одной командой. Без него пришлось разворачивать и настраивать каждый контейнер отдельно.
- Docker Swarm - предназначен для запуска и подключения контейнеров на нескольких хостах. Это встроенный инструмент оркестровки Docker, встроенный в Docker Engine.
- Kubernetes - это инструмент оркестровки контейнеров, разработанный Google. Цель Кубернетеса очень похожа на цель Docker Swarm.
CI/CD подход позволяет собирать приложения и тестировать их в так называемой "трубе". Docker используют, чтобы выделить конкретные технологии на проекте и приблизиться к микросервисной архитектуре. Это помогает построить приложение, в котором есть ярко выраженные блоки, с которыми просто работать. Подстраивая их под друг друга, за такими блоками проще следить и искать проблемы, связанные с выделенной технологией. Также можно повышать и понижать версионность, использовать дополнительные утилиты, где они необходимы, управлять ресурсами этих блоков и, конечно же. переносить свои изменения на другие сервера, где можно без проблем разворачивать их, не беспокоясь, что мы могли что-то упустить при переносе.
Docker изолирует ваши выделенные блоки так, что приложение не будет обращаться к серверу напрямую. Это обеспечивает большую безопасность и позволяет избежать многие проблемы при переносе.
Docker можно использовать для проектов любых сложностей и размеров. Больше всего он подходит для крупных проектов, так как именно там есть огромная необходимость в правильном построении архитектуры. Если ваше приложение должно быть хорошо расширяемым и постоянно развиваться, дополняться технологиями, то монолитная архитектура просто-напросто проигрывает проектам на микросервисной архитектуре, потому что она заточена на другие задачи.
Да, монолит проще и быстрее в разработке проектов, где время ограничено.
Важно помнить, что все выполненные задачи превращаются в деньги. Но не стоит забывать про то, что все образы, созданные вами, не пропадают бесследно после окончания проекта, и перенастроить их для использования на других проектах не составляет огромного труда. Это позволяет разрабатывать новую функциональность быстрее, ведь в случае с монолитной архитектурой, изменение какой-то части может затронуть всю остальную систему.
Также стоит упомянуть, что на проектах, где могут использоваться несколько взаимосвязанных систем, к примеру, поисковые движки (Sphinx, ElasticSearch) или хранилища (Redis, Memcached), и иные backend-приложения, docker позволяет выстраивать взаимосвязи между ними, разграничивая обязанности.
И так мы плавно перешли к преимуществам и недостаткам подходов, где используется docker.
Докер упрощает жизнь как программистам, так и администраторам, решая проблемы зависимостей рабочего окружения, позволяя изолировать блоки и обезопасить приложение. Ускорение разворота сервисов позволяет автоматизировать эти действия, сохраняя масштабируемость.
Главный недостаток, это время, затрачиваемое на настройку всех этих зависимостей, которое зачастую не совпадает с задачами бизнеса и сжатыми сроками проекта.