Хотя есть несколько крошечных областей перекрытия, 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.