В двух словах объяснить что такое Docker и чем он отличается от виртуализации немного затруднительно, но я постараюсь)
Docker — это система для у правления контейнерами которая использует контрольные группы и пространства имен . Контейнеры это метод виртуализации на уровне операционной системы, отделяют приложение от операционной системы. Приложение запущенное в контейнере не может повлиять на саму операционную систему непосредственно. В отличии от обычной виртуальной машины, контейнер не устанавливает внутри себя операционную систему и не имеет собственных дисков. Рассмотрим более детально какие преимущества мы можем получить используя Docker.
В основном docker использую при разработке, тестировании и ревью приложений. При помощи докера намного ускоряется процесс настройки среды для приложения, в добавок к этому докер позволяет запаковать ваше приложение в образ и развернуть его на любой другой машине за считаные минуты.
В первую очередь докер применяют для настройки среды разработчика, все компоненты «запаковывают» в контейнеры и просто разворачивают на машинах разработчиков. Представьте себе что у вас есть проект на 7-8 компонентов, пусть это будет frontend, backend, content-api, mysql, redis, mongodb, elastic, rabbitmq. Раньше всё эти сервисы непосредственно устанавливались и настраивались на машине разработчика, иногда на это могло уйти от нескольких часов до нескольких дней. Более того появлялась проблема обновлений, приложение работает только с монго 2.4 а разработчик случайно апдейтнул до 4, согласитесь, настраивать всё это довольно долго даже для людей которые этим занимаются постоянно.
Выход нашли в докере, вместо установки всех компонентов мы просто можем загрузить образы контейнеров и запустить их. Это очень удобно, пришел новый разработчик в команду и вместо нескольких дней настройки он просто запустил 2-3 команды и всё, окружение готово.
Аналогично и с тестированием, например вам нужно протестировать приложение на версиях PHP 5.6, 7.0, 7.1, 7.2. Больше вам не нужно каждый раз переустанавливать PHP или держать несколько разных постоянно меняя симлинки, просто передаёте переменную с нужной версией PHP в докер и он сам загружает нужный образ.
На тестовых средах уже все меньше используют системы поддержки релизов суть которых заключалась в создании папок с номером релиза, выгрузкой туда кода и линкованием в основную папку на которую смотрел веб-сервер, сейчас можно упаковать нужный код в контейнер и просто его развернуть на нужном сервере в 2 команды.
Выше я описал основные преимущества контейнеров когда работал с ними на практике, ниже выделим по пунктам:
- Меньшее потребление ресурсов в сравнении с классической виртуализацией
- Легкое управление версиями
- Масштабирование
- Изолирование
- Легковесность
- Низкие накладные расходы
Приведу простой скриншот на котором видно сколько ресурсов потребляют компоненты одного моего проекта:
На данном проекте наблюдается 1-3 к уников в сутки плюс несколько заданий в кроне по пересчету метрик и т.д, а потребление ресурсов вы сами видите, это намного дешевле обходится чем покупать отдельный виртуальный сервер.
В этой статье я постарался дать общее понимание и возможных применениях docker, возможно в некоторых местах были неточности. Следующая статья будет практическая, мы запустим приложение на Laravel в докере)