Docker (грузовой контейнер)
На пальцах
Представь фабрику, которая делает торт. Торт нужно доставить в десяток магазинов: часть — на рефрижераторе, часть — поездом, часть — кораблем. У каждого транспорта свои капризы: температура, влажность, способ погрузки. Если упаковать торт «как придётся» — доедет развалившимся.
Решение — положить торт в стандартный грузовой контейнер. Один размер, одна форма, любой транспорт знает, как с ним обращаться. Внутри контейнера — сам торт и всё, что ему нужно для поездки (охлаждение, крепление, инструкция). Что снаружи — уже неважно.
Docker — такой же стандартный контейнер, только для программ. Программа упаковывается вместе со всеми своими зависимостями и настройками в «контейнер». Любой компьютер, на котором стоит Docker, может этот контейнер запустить — и программа ведёт себя одинаково что на ноутбуке разработчика, что на сервере магазина.
Что это
Программа, которая упаковывает приложение со всем его окружением — библиотеками, настройками, системными утилитами — в стандартный изолированный блок (контейнер) и запускает его на любом компьютере с Docker, независимо от того, что на этом компьютере уже установлено.
Зачем
Например, у интернет-магазина есть сайт, база данных и система приёма платежей. Без Docker каждый из них ставится вручную: нужна правильная версия Python, нужная версия базы, драйверы, права на папки. У разработчика — одна версия, на тестовом сервере — другая, в продакшне — третья. Знакомая боль: «у меня на машине всё работает, а на сервере — нет». Часы, а то и дни уходят на то, чтобы воспроизвести чужое окружение.
С Docker разработчик один раз собирает контейнер с правильными зависимостями — и тот же контейнер запускается на ноутбуке, на тестовом стенде и в продакшне. Окружение больше не источник сюрпризов.
Ещё Docker умеет:
- поднимать несколько связанных сервисов одной командой (Docker Compose) — например, сайт + база + кеш, описанные в одном файле
- изолировать приложения друг от друга и от операционной системы
- быстро разворачивать и сворачивать тестовые окружения — за минуты, не часы
- хранить версии образов (image) и откатываться на предыдущую так же просто, как переключить контейнер
- масштабировать нагрузку — поднять десять одинаковых копий сервиса одной командой
- распространять готовые образы через общий реестр (Docker Hub) — сотни тысяч готовых «коробок» для популярных сервисов