Избушка на docker-ножках или объяснение Docker на примере домов

Docker - платформа для контейнеризации, которая в последнее время стремительно набирает популярность. На всех популярных ресурсах для разработчиков говорят о контейнерах и образах, но новичку разобраться в этом очень сложно. Далее - рассказ о самых базовых принципах Docker c понятными аналогиями.

Сказ будет сопровождаться объяснениями в скобках, которые соответствуют определяниям и терминам из реальной жизни.

Представим, что мы построили новый дом (сервер). Внешне он выглядит нормально (64-битная система, оперативки больше гигабайта), но внутри совершенно пустой (нет ни одного размещенного проекта).

Устраиваем новоселье, и зовем жителей (проекты). Каждый житель хочет устроить для себя комфортные условия. Поэтому мы, как собственники, должны предоставить их. Проводим воду, подключаем электричество, покупаем плиту и холодильник (ставим необходимое ПО для запуска приложений, например: nginx, php, mysql). Экономии ради не заморачиваемся насчет разделения этих приборов. Жителей не много, они нетребовательные и им хватит по одной плите и умывальнику на весь дом.

Но со временем у жителей появляются новые потребности. Кому-то для начала новой жизни с мурлыкающим соседом требуется отдельная комната с большим холодильником для хранения годового запаса кошачьего корма, А молодой семье с детьми хочется иметь отдельную кухню. (Наши проекты тоже развиваются, требуют новых версий программ, дополнительных расширений и настроек. Одним приложениям это требуются, другим - нет, а третьи вообще могут поломаться из-за обновления версий).

Случается, что управляющая компания отключает или электричество, или воду, или еще что-нибудь… У всех жителей сразу же пропадает возможность помыть руки или приготовить пищу, поэтому начинается всеобщее негодование. (Ломается программа на сервере - все проекты, которые использовали ее, перестают работать.)

А бывает так, что кто-то на кухне не убрал за собой после еды. Другим приходится убирать за этим негодяем, что безусловно пользы особой не приносит. (Проекты в обычном окружении имеют намного больше прав, чем должны. А если проект будет взломан, и злоумышленники попытаются запустить вирус на сервере?)

Как хорошие хозяева, мы принимаем решение построить для каждого жителя (или семьи) отдельную комнату и поставить туда свою раковину, свою плиту и свой холодильник. Да, на это требуется время и деньги. Однако, после того, как эти преобразования будудт сделаны, уровень комфорта в нашем доме намного повысится. Каждый квартирант теперь в состоянии купить модернизированную плиту или поставить не требующий разморозки холодильник. (Каждый проект, находящйися в контейнере, может иметь свои версии программ и свои настройки, которые не будут пересекаться с другими проектами).

При этом люди советуются с соседями и покупают бытовую технику по их рекомендациям. (Docker-образы могут наследоваться от других образов, получая все настройки родительского образа и добавляя свои.)

В городе силами активистов совместно с мерией была создана книга рецептов, в которой все жители оставляют свои кулинарные рецепты. Такой своеобразный метод обмена опытом:) (В публичном личном репозитории Docker-образов Docker hub лежат публичные образы Docker, при этом можно посмотреть Dockerfile - “рецепт” создания образа).

В результате в доме стало немного меньше места (теперь программы отдельные для каждого проекта, а не одни на сервер), но зато теперь каждый житель в состоянии сам решать, что ему нужно и чем он будет пользоваться.

Статья родилась во время разработки нового проекта с использованием Docker в соавторстве с Тимуром Мустафиным.