Совсем недавно в новостях то тут, то там разлетелась очень интересная штука от Google под названием Deepdream. Занятная вещица, но сейчас речь не об этом.
В руки мне попала статья одного чувака, который эту штуку у себя поднял. Но поскольку там используется Python, причём не просто, а с оболочкой IPython. Для меня и многих - это дремучий лес, но вот тот самый чувак завёл всё это, используя специальный инструмент, который называется Docker. Тот парень предлагал готовый образ контейнера с уже настроенным окружением. Всё, что требовалось для запуска Deepdream - это скачать контейнер и запустить его. Так вот для меня это стало большим открытием. Имея на машине Linux-like ОС мы можем запускать то, что душе нашей угодно, не привязываясь к зависимостям платформы и т.д.
И чем глубже я изучал эту штуку, тем больше она мне нравилась.
Docker - это система, которая позволяет управлять приложениями в среде виртуализации на уровне операционной системы. Что это значит? Это значит, что используя какую-либо среду виртуализации на уровне ОС, Docker предоставляет инструментарий, который позволяет независимо друг от друга содержать и запускать на одной машине экземпляры каких-либо приложений, причем не просто приложений, а вместе со всеми его зависимостями, окружением и т.д. Хотите запустить на Debian 6 PHP7? Пожалуйста! Docker это сможет.
Все приложения упаковываются в так называемые контейнеры, которые мы при необходимости можем быстро обновлять, запускать. Делать производные от них и так далее. Самый распространённый use-case для Docker выглядит примерно так:
Распределённая команда разработчиков пилит какой-то проект, который довольно чувствителен к окружению, на котором он работает. Любое изменение конфигурации, какого-нибудь инструмента или даже кода может повлечь за собой банальный отказ всей системы. Или один разработчик недоглядел и где-то в конфигурации php у него указано отличное от остальных количество максимальной оперативной памяти, выделяемой под сам php. У всех будет работать - у него нет. Это довольно простой и, может, глуповатый пример, но такое бывает.
Так вот, если все разработчики, работая каждый на своей машине, будут использовать отдельный docker-контейнер для PHP, отдельный для nginx, отдельный для Redis, отдельный для MySQL, то это избавит их от многих проблем. Это позволяет каждому из участников процесса разработки иметь абсолютно идентичную актуальную среду выполнения приложения.
Кроме того, Docker позволяет очень просто выполнять deploy приложения на бой. Имея, например, готовый к релизу контейнер, можно его развернуть рядом с боевым и погонять на рабочей машине. Если всё в порядке, то простым переключением портов, например, можно моментально переключить пользователей уже на новый функционал. По-моему, звучит здорово.
Считаю, что огромным достоинством Docker'а является то, что упаковывать, изменять, запускать, останавливать контейнеры можно очень быстро.
Всё это, конечно, теория. На практике каждый сам решает, пользоваться ему тем или иным инструментом или же нет. Я намеренно не стал расписывать никаких процессов устновок/настроек, т.к. еще не достаточно знаком с Docker'ом. Просто захотелось заинтересовать вас этой штуковиной. Кому нужно - без проблем сможет найти тонный мануалов о том, что да как.
Кстати, где-то пользователи данного инструментария советуют использовать не чистый Docker, а что-то поверх него. Думаю, что при желании вы сможете найти информацию и об этом.