Изобретение интермодальных контейнеров вызвало бум международной торговли и стало одним из основных элементов глобализации
Контейнеры от компании Docker произвели настоящую революцию в разработке, тестировании и развёртывании приложений. Хотя вовсе не она изобрела Linux-контейнеры. Ведь LXC и OpenVZ появились раньше под Linux, а до них много лет существовали Jails/Zones в BSD/Solaris.
Но именно Docker представил контейнеры в виде удобного и простого «массового продукта». Примерно как Apple позаимствовала идеи MP3-плеера и смартфона и доработала их. То же самое сделал Docker. Хотя не довёл дело до конца, то есть до получения прибыли.
Сейчас компания Docker разваливается на глазах. Однако Linux-контейнеры отлично работают и без неё, это же опенсорс.
Компания, которую мы сейчас знаем как Docker, была основана в 2008 году и называлась DotCloud. Она предлагала клиентам облачную платформу как сервис (PaaS). Но спустя пять лет компания кардинально изменила бизнес-модель, выкатив низкоуровневую технологию, на которой работает DotCloud, как отдельный продукт. Основатели говорят, что пользователи всё время спрашивали про этот движок и хотели получить его отдельно. Вот и получили.
Так появились контейнеры Docker. На видео — историческая презентация Соломона Хайкса «Будущее контейнеров Linux» на конференции PyCon в марте 2013 года.
Идея заключалась в том, чтобы упаковать все необходимые приложения, библиотеки, скрипты, тесты и настройки в портативный «контейнер», который можно поставить на любую машину под Linux — а потом очень легко запустить. Он будет работать одинаково везде, потому что изолирован на уровне процессов и имеет собственную файловую систему.
Сравнение традиционной виртуализации (слева) и контейнеров Docker
Например, у нас пара контейнеров:
$ docker images NAME ID CREATED base fad7c890e7ca7be42 days ago busybox c5860e37a1bcb67820 hours ago
Мы просто пишем команду на исполнение с указанием имени контейнера, а Docker делает всё остальное: запускает контейнер, поднимает нужный софт, например, базы данных, веб-сервер, тесты, выполняет заданную команду — и возвращает результат без каких-либо лишних телодвижений:
$ docker run -a busybox echo hello world hello world
Это была настоящая магия для своего времени, настолько просто всё делалось. Максимальная автоматизация. Контейнеры поднимаются и выключаются по заданным условиям, по очереди, в цепочке выполнения один за другим или группами, как угодно. Это позволяет настраивать удивительно сложные процессы без особых навыков девопса. Можно скачать готовый и настроенный контейнер из каталога — и запустить у себя.
Более 100 000 контейнеров в каталоге Docker Hub, у некоторых более 1 млрд скачиваний
Опенсорсный проект быстро набрал популярность у разработчиков и получил поддержку крупных вендоров, таких как Microsoft, IBM и Red Hat. Революция контейнеров началась.
Если разбить на составляющие, то Docker включает в себя текстовый файл Dockerfile (набор инструкций), образы контейнеров (исполняемые файлы с инструкциями по созданию контейнера), утилиту командной строки run
, репозиторий контейнеров Docker Hub, движок Docker Engine (демон dockerd
для управления контейнерами, API), утилиту Docker Compose (запуск приложений с несколькими контейнерами) и приложение Docker Desktop, которое объединяет в себе всё вышеперечисленное.
Дополнительную популярность Docker получил после выхода Docker Desktop для Windows и macOS в 2016 году, хотя основное использование контейнеров осталось под Linux.
Под Linux для работы с Docker можно выбрать один из GUI-клиентов, в том числе официальный клиент (бывший Kitematic), DockStation (разработчики Игорь Лозовский и Павел Лозко), Portainer или Dockly.
Portainer
Преимущества Docker
Благодаря Docker гораздо проще стало разрабатывать и поддерживать приложения, а также перемещать их с сервера на сервер. Например, переместить приложение из облака на сервер у себя дома, к хостеру на VPS и так далее. Это даёт разработчикам ряд преимуществ.
Контейнеры Docker — это минимализм. Ничего лишнего, полная изоляция приложений и окружения. Docker обеспечивает совместимость. Контейнеры — строительные блоки с легко заменяемыми частями, что позволяет ускорить разработку.
Поскольку контейнеры маленькие, можно запускать их в большом количестве для лучшего масштабирования сервисов. Затем этими кластерами контейнеров обычно управляют с помощью Kubernetes или вручную.
Недостатки Docker
Контейнеры решают множество проблем, но есть и недостатки. Программы в контейнере не так хорошо изолированы от окружения хоста, как в виртуальной машине. И движок контейнеров отнимает ресурсы на сервере, так что программы работают медленнее, чем на голом железе.
Контейнеры ничего не сохраняют, это неизменяемые read-only модули. Они загружаются и запускаются из образа, который описывает их содержимое. По умолчанию этот образ неизменен и не сохраняет своё состояние. Когда контейнер стирается из памяти, он исчезает навсегда. Чтобы сохранить состояние, как у виртуальной машины, необходимо разработать специальное решение.
Рост популярности и количества контейнеров изменил способы создания приложений — вместо монолитных стеков стали чаще использоваться сети из микросервисов, которые работают в облаке. Вскоре некоторым пользователям понадобились инструменты оркестровки и управления большими группами контейнеров.
Продажа части Docker
Компания Docker разработала инструмент оркестровки Swarm, но он не выдержал конкуренции с Kubernetes от Google. А именно на этот инструмент в составе Docker Enterprise Edition (EE) делалась ставка по монетизации.
В итоге на фоне растущих проблем с финансированием пришлось продать Docker Enterprise Edition (EE) компании Mirantis в 2019 году.
Останки Docker — оригинальный движок Docker Engine с открытым исходным кодом, хранилище образов Docker Hub и приложение Docker Desktop — продолжают жить под руководством ветерана компании Скотта Джонстона. Но он продал ту часть, которая приносила деньги. Приходится как-то переориентировать бизнес, чтобы зарабатывать на опенсорсе.
В рамках новой политики в августе 2021 года приложение Docker Desktop стало платным для больших компаний. Подписку Docker Free переименовали в Docker Personal. И это только начало.
Сегодня Docker ещё жив, но компания не смогла добиться успеха и продала прибыльную половину бизнеса. Это не сулит ничего хорошего для оставшихся проектов Docker Community Edition (CE). Поддержка Docker Swarm уже втихую прекращена без объявлений.
Тем временем разработчики и пользователи начали искать возможные альтернативы для Docker.
Альтернативы Docker
В принципе, альтернатив не так уж и много, и это смотря что считать альтернативой.
Podman
Podman (Pod Manager) чуть посложнее Docker, но зато спроектирован в соответствии с «философией Unix».
Запуск некоторых контейнеров потребует дополнительной настройки. Например, для БД придётся немного подредактировать iptables, тогда как контейнер Docker с этой БД сразу открывается в интернет.
Установка на Ubuntu:
sudo apt-get -y update sudo apt-get -y install podman
Поиск образов в каталоге Podman:
$ podman search nginx
Скачиваем нужный:
$ sudo podman pull nginx
Советы по миграции с Docker на Podman под Windows и Mac см. здесь.
Для простых систем с Linux-контейнерами это вполне приемлемая замена Docker.
Контейнеры Docker без Docker
В последнее время появляются облачные сервисы нового типа, где можно поднимать приложения, базы данных и даже работать с контейнерами Docker без самого Docker. Например, Fly.io, Stackpath, Deno.land, Vercel.app. Возможно, будущее именно за такими сервисами.
Алгоритм развёртывания приложения во Fly.io
- Установка клиента:
$ iwr https://fly.io/install.ps1 -useb | iex
- Регистрация на сайте fly.io
- Авторизация
- Создание и запуск приложения:
$ flyctl launch
- Развёртывание приложения на трёх континентах:
$ flyctl regions add ams hkg sjc
Вот и всё.
По факту контейнер создаётся и запускается в облаке за пару минут. При этом пользователь может не понимать, что он создаёт контейнер и редактирует Dockerfile, поскольку он не работает напрямую с Docker.
Даже если пользователь загружает свой контейнер Docker, для его запуска нативный движок не используется. Образы контейнеров разбираются на части и трансформируются в микро-VM Firecracker.
В этом примере мы видим «контейнеры Docker без Docker». То есть образы Docker в формате OCI используются просто как универсальный носитель для переноса файлов с одного хостинга на другой, а там из образов извлекают все полезные данные и используют в более удобном формате, уже без Docker.
На каждом сервере fly.io работает инстанс containerd
.
Containerd
За последние десятилетия в ядре Linux значительно доработан уровень блочных устройств. Менеджер логических томов LVM2 способен объединять или разбивать блочные устройства на синтетические. При этом объём рассматривается как абстракция. Блочное устройство 1 ТБ можно разбить на тысячу синтетических по 5 ГБ (если мы не используем это место). Можно создавать снапшоты в другом синтетическом устройстве и совместно использовать эти блоки между связанными устройствами с семантикой копирования при записи.
Сontainerd запускается как демон в Linux, он использует перечисленные функции LVM2, поддерживает формат контейнеров OCI и может работать вообще в любой экосистеме, как показано на диаграмме.
Компания Docker начинала разрабатывать проект containerd в 2014 году как низкоуровневый менеджер для движка Docker, но потом отдала его сообществу. Разработку взяла на себя организация Cloud Native Computing, которая в 2019 году выпустила его как открытый стандарт для любых облачных платформ и разных ОС.
Пример Fly.io и других хостеров показывает, что можно деплоить приложения из контейнеров OCI и при этом не использовать Docker вообще.
Minikube
В качестве альтернативы Docker Desktop некоторые пробуют Minikube, см. инструкции по установке.
Причины провала оркестратора Docker Swarm — и всего бизнеса
Контейнеры Docker стали фактически корпоративным стандартом для развёртывания приложений. Это произошло очень стремительно. Docker можно назвать одной из самых быстро принятых технологий нового поколения.
Бывшие сотрудники и разработчики Docker говорят, что главной ошибкой была недооценка Kubernetes. Они считали, что система Kubernetes слишком сложная, в ней никто не разберётся и людям больше по вкусу придётся нативный оркестратор Docker Swarm, очень простой в использовании, с маленькой и ясной документацией.
Возможно, причина ещё и в плохом маркетинге: некоторые пользователи Kubernetes не знали существовании Docker Swarm.
Кроме того, была проблема личных комплексов и фундаментального эго. Элитные разработчики Google с некоторой долей презрения смотрели на программистов из стартапа Docker, поскольку у тех было хуже образование, меньше опыт и общий уровень IQ. В ответ на такое отношение разработчики Docker не смогли нормально сотрудничать с сообществом Kubernetes и создать единую экосистему. Они всё хотели сделать по-своему и похоронить надменного конкурента.
Но рынок выбрал Kubernetes. Эта ошибка и привела к провалу бизнеса Docker, который пытались построить вокруг Docker Swarm.
Заключение
Сейчас кажется, что технология контейнеров выходит с пика хайпа на плато продуктивности. Становится понятно, что это не универсальное решение, а специализированное для небольшого ряда задач. Оркестрация вообще нужна только крупным корпорациям.
В большинстве обычных ситуаций проще поднять дешёвый VPS или домашний сервер с systemd
, чем возиться с контейнерами Docker, Swarm или Kubernetes на постоянной основе.
В то же время для разработки Docker незаменим. Согласно опросу Stack Overflow, в 2021 году 49% разработчиков регулярно используют Docker Desktop.
А чем пользуетесь вы?
НЛО прилетело и оставило здесь промокоды для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.
— 20% на выделенные серверы AMD Ryzen и Intel Core — HABRFIRSTDEDIC
ссылка на оригинал статьи https://habr.com/ru/company/first/blog/598337/
Добавить комментарий