Опишем несколько вариантов использования Docker на практике, которые хорошо отражают его сильные стороны.
Создание приложений с зависимостями
Зачастую, для установки какой-либо библиотеки или базы данных, разработчику приходится изучать инструкцию на сайте, затем он ее скачивает, инсталлирует и выполняет конфигурацию. Когда нужно перейти на другую зависимость — текущая библиотека удаляется, и весь процесс начинается заново. В результате на работу с каждой зависимостью приходится тратить довольно много времени.
Docker предлагает альтернативный, более простой путь. Компании-поставщики библиотек, фреймворков и баз данных регулярно размещают свой софт на Docker Hub в формате Docker image. Образ можно быстро скачать и развернуть через Docker, а когда потребность в нем пропадет — удалить, не оставив и следа в операционной системе.
То есть, Docker фактически предоставляет единый интерфейс управления, и разработчикам не нужно разбираться в особенностях индивидуальных команд для каждой библиотеки. Вместо этого достаточно изучить команды Docker: для скачивания образов, запуска контейнеров и работы с портами.
Используя Docker, разработчики могут запустить неограниченное количество баз данных в одной операционке. Даже если что-то пойдет не так, благодаря полной изоляции ошибки не затронут работу основной ОС и коснутся исключительно контейнера.
Автоматизация тестирования
Для запуска автоматизированных тестов нужны определенные зависимости, такие как базы данных, брокеры сообщений и прочее. Все они устанавливаются и настраиваются на сервере сборки еще до начала тестирования, и на этом этапе часто возникают трудности. К примеру, если какая-то деталь будет упущена, то существует большой риск что-то «сломать» в ОС или испортить данные. В этом случае будет куда безопаснее разворачивать зависимости в виде контейнера непосредственно на сервере. Таким образом можно быстро выполнить тесты, а затем полностью удалить контейнеры, не оставив и следа в самой операционке.
В результате, даже если что-то пойдет не так и тесты «сломают» данные, все они будут удалены вместе с контейнером. К тому же, благодаря контейнеризации на сервере можно будет запускать буквально все, что угодно, что сделает его более универсальным, а следовательно — можно сэкономить время на настройке системы.
Публикация приложения
Когда тестирование завершено, приходит время публикации проекта или передачи его клиенту. На этом этапе Docker значительно упрощает развертывание, поскольку инженерам не приходится думать о том, какие зависимости устанавливать на разных устройствах и в разных средах. Все это уже упаковано в изолированный контейнер, который готов к запуску.
Docker делает среду деплоя более универсальной. Фактически, SRE всегда будет иметь дело исключительно с контейнерами, которые можно разворачивать и однообразно обновлять посредством одних и тех же команд, даже несмотря на то, что внутри могут находиться совершенно разные приложения.