Docker – это открытая платформа, которую используют для разработки, доставки и эксплуатации приложений. Главная прелесть этой платформы в том, что можно отделить приложение от всей вашей инфраструктуры и обращаться с ней как с управляемым приложением. То есть docker – это инструмент для быстрого развертывания окружения. Освоение и использование этой платформы полезно не только для программиста, как может ошибочно показаться на первый взгляд. Docker – универсальный инструмент для всех разработчиков.
Представим несколько сценариев развития событий
Предположим, работает большая команда программистов, и возникает несколько проблем. Пример первый: в команде новый разработчик, и ему надо всю инфраструктуру, которая сложилась возле кода в процессе его написания, каким-то образом установить на компьютер. Ему предстоит поставить базы данных и все остальные составляющие, после чего должна последовать грамотная настройка всех компонентов, работающих без багов. Проблема в том, что новый участник команды может оказаться специалистом, в компетенции которого не входит понимание всех технических процессов, а рабочая версия сайта ему все же будет нужна. Docker поможет разработчику выполнить все необходимые процессы нажатием одной кнопки – автоматизированным способом.
Пример второй: работает группа программистов, которые решили перейти с одной системы управления баз данных на другую. Всем разработчикам придется базу данных на своих компьютерах менять собственноручно, что, опять же, чревато появлением отдельных ошибок. Соответственно, docker позволяет облегчить эту процедуру автоматизированным и централизованным способом: все участники команды «подтянули» одновременно изменения, процессы начинают работать одинаково на всех устройствах, так как запущены через общую систему.
Третий пример: вы можете работать с несколькими проектами одновременно. Docker выступит в роли компьютерного уборщика и поможет не загрязнять лишний раз свою машину. Дело в том, что для каждого проекта пришлось бы установить много софта и, значит, «захламить» систему. Софт мог бы конфликтовать между собой, а также и с системными программами. Рано или поздно из-за подобного взаимодействия возникли бы проблемы. Именно поэтому и нужно всю инфраструктуру, которая складывается вокруг кода, упаковывать в отдельный контейнер, который будет отделен от основной системы. Раньше это делали с помощью виртуальных машин (речь идет о процессе эмуляции компьютера внутри компьютера, где загружается операционная система – прим. редакции). Именно в виртуальных машинах полноценно эмулировали Linux или Windows и создавали все необходимое. Docker, в отличие от виртуальных машин, позволяет запускать каждый процесс, как будто это обычный процесс в системе. Теперь не нужно виртуализировать полноценный Linux, можно запустить лишь один процесс. И в количестве процессов мы не ограничены: можем запустить миллион – все будут работать. Виртуальные машины, в свою очередь, весят от 5 до 15 Гб, поэтому в случае использования ВМ мы ограничиваем себя количеством запуска возможных процессов. Пожалуй, единственный минус docker-а в том, что с Windows эта платформа работает не так просто, как с Linux, поэтому пользователям Windows придется «попотеть».
Из чего состоит docker
Есть три компонента: образы (images), реестры (registries) и контейнеры. Образы разработчики используют для создания контейнеров, они являются компонентой сборки docker-а. Образы, в свою очередь, хранятся в реестрах, которые являются компонентой распространения. А каждый контейнер создается из образа. Контейнер изолирован и является безопасной платформой для приложения. Контейнеры — это компонента работы.
Платформа Docker-Hub
Облегчит существование разработчикам специальная платформа Docker-Hub, где размещены миллионы готовых реестров. Можно зайти на сайт и воспользоваться уже готовым подходящим реестром. Хоть это и максимально удобный путь, однако хорошая команда все равно должна уметь создавать свой собственный контейнер, при разработке которого можно смотреть на готовые реестры с образами и пользоваться тем, как они устроены. На встрече CodeX разработчики поработали с докером и показали на практике, как собрать свой контейнер. Оказалось, овладеть мастерством создания контейнера можно в рамках одного мастер-класса, а иногда и вовсе самостоятельно.
Docker-контейнер
У контейнера три составляющие: операционная система, пользовательские файлы и метаданные. Мы уже упомянули о том, что каждый контейнер состоит из образа. Образ сигнализирует docker-у о том, что именно находится в контейнере, когда и какой процесс запускается. Образ доступен исключительно для чтения, поэтому, когда docker запускает контейнер, автоматически создается уровень не только для чтения, но и для записи сверху образа.