Хотя есть небольшая область перекрытия Docker и упаковочных систем Debian, по сути решить две совершенно разные проблемы:
Система пакетов Debian создана для максимально простой установки программного обеспечения на хост и его обновления. Он способен обрабатывать сложные шаблоны зависимостей и ограничений между программными компонентами, например «программное обеспечение X версии A требует программного обеспечения Y с установленной версией B или более поздней» или «программное обеспечение X никогда не должно устанавливаться с программным обеспечением Z версии C».
Система Docker задумана для простого описания и развертывания сервисов, особенно микросервисов, возможно, на нескольких хостах, например рой Docker или кластер Kubernetes.
Эти две проблемы по существу ортогональны, а это означает, что, учитывая проблему развертывания, которую нужно решить, можно использовать одну из них, обе или, возможно, даже ни одну из них, как часть решения. При использовании обоих из них пакет Debian используется для создания образа Docker, а ваш Dockerfile (рецепты, используемые для подготовки образа Docker, описывающего «виртуализированную систему», выполняемого в контейнере), по сути, зарегистрирует ваш репозиторий Debian в исходные коды системы пакетов Debian и установите свой пакет.
Учитывая это, мне кажется, что на самом деле вы ищете реализацию неизменяемый шаблон сервера. Недавнее развитие облачных технологий позволило обновить программное обеспечение не с помощью классической системы обновления программного обеспечения из системы пакетов программного обеспечения (например, системы пакетов Debian), а путем простой замены всего сервера сразу. (Некоторые люди делали это до этой разработки, имея на сервере три ОС, две из которых поочередно использовались для запуска устройства, и мини-ОС, предназначенную для замены устройства. Хотя это и не слишком сложно, похоже, что это всегда оставалось ниша.) Этот метод может представлять для вас интерес, поскольку, если вы привыкли обновлять программное обеспечение на своем сервере с помощью менеджера пакетов, окончательное состояние сервера зависит от «истории обновлений» сервера – особенно если возникают ошибки в процесс обновления. Эта неоднородность плоха, потому что из-за нее производственные проблемы трудно воспроизвести и диагностировать, а ваш неоднозначный опыт
У нас есть тысячи таких коробок на поле. Мы управляем зависимостями пакета, обрабатываем регистрацию и т. д. через пакет deb с разной степенью успеха.
может иметь отношение к этому. Шаблон неизменяемого сервера стирает этот источник ошибок, по сути устраняя из проблемы понятие «истории обновлений».
Теперь существуют различные варианты реализации шаблона неизменяемого сервера. Два популярных варианта — использовать образы Docker, образы или использовать «главные образы экземпляров» от вашего облачного провайдера (они называются AMI в AWS и просто пользовательскими изображениями в Google Compute Engine). . Ваш вариант использования запрещает использование облачных технологий, поэтому я буду считать образы Docker единственным подходящим выбором. (Для завершения, безусловно, можно использовать другие подходы, например, использование Virtual Box или аналогичного решения для виртуализации в качестве альтернативы Docker.)
При использовании метода неизменяемого шаблона сервера вы вводите новый артефакт (образ Docker), представляющий ваш сервер, и этот артефакт также можно протестировать, и очень легко получить установку, правдиво воспроизводящую ваши производственные настройки — помимо сервисной нагрузки.
Теперь, чтобы рассмотреть описанную вами конкретную проблему, давайте предположим, что реализация шаблона неизменяемого сервера с помощью Docker — это именно то, что вам нужно. Поскольку система Docker и система пакетов Debian дополняют друг друга, а не исключают друг друга (см. введение), нам все равно придется ответить на вопрос, следует ли вам подготовить пакет Debian для вашего программного обеспечения.
Целесообразность использования пакета Debian для установки вашего программного обеспечения (в образе Docker или на хосте) зависит от сложности проблемы управления версиями, которую вам придется решить. Если вы одновременно запускаете несколько версий своего программного обеспечения, иногда вам необходимо перейти на более раннюю версию и у вас есть сложные требования к версии, которые необходимо тщательно документировать, наличие пакета Debian просто необходимо. В противном случае этот шаг можно пропустить, но поскольку вы уже приложили усилия для создания и развертывания этих пакетов, отказываться от работы нет смысла. Поэтому я бы предложил продолжать создавать пакеты Debian.