Docker¶
«Мартин в первый раз за всю свою жизнь путешествовал в первом классе. Прежде во время плаваний на таких судах он или стоял на вахте, или обливался потом в глубине кочегарки».
Джек Лондон, «Мартин Иден».
Docker — важная часть процесса доставки или развёртывания приложений, т. е. такого процесса, в ходе которого приложение переносится с компьютера разработчика на компьютер заказчика или на продакшн-сервер.
Когда-то процесс доставки был относительно прост, и перенос разрабатываемого приложения мог выглядеть просто как копирование исполняемого бинарного файла с машины программиста на машину клиента. Но с увеличением сложности разработки ПО увеличивалось и число проблем, которые необходимо было решить для того, чтобы заставить программу работать не только на компьютере разработчика, но и в рабочем окружении.
Тогда в какую-то светлую голову пришла отличная мысль — почему бы не копировать всё, что необходимо для работы программы. Единожды настроив свой рабочий компьютер, программист мог бы при помощи специальных средств переносить весь комплекс, необходимый для обеспечения работоспособности приложения — бинарные файлы, скрипты, переменные окружения, файлы конфигурации, необходимые версии библиотек и так далее. Так появился Docker — платформа, позволяющая доставить программное обеспечение вместе со своим окружением в виде единой сущности (называемой контейнером), тем самым сильно упростив и автоматизировав процесс развёртывания.
Docker-образ — «бинарник» XXI века. Так же, как и исполняемые файлы, контейнеры Docker можно переносить, удалять, запускать и останавливать. В настоящее время умение работать с контейнерами можно отнести к базовому технологическому стеку, необходимому каждому программисту.
Технология контейнеризации при помощи Docker по своей сути близка к виртуализации, но с одной существенной оговоркой — если при виртуализации каждая виртуальная машина использует свою отдельную ОС, то при контейнеризации все контейнеры пользуются ресурсами ОС, установленной на хосте. Изоляция процессов внутри контейнера работает на базе двух механизмов, встроенных в ядро Linux – пространствам имен (namespaces) и контрольным группам (control group или cgroup).
Тесно связанная с контейнеризацией тема — оркестрация, осуществляемая, например, при помощи Kubernetes.
codifycamera.com © Авторские права CC BY-NC-SA 4.0 2024 — ∞ Михаил Емельянов, war4one@gmail.com