Во-первых, хотя Docker иногда рассматривается и используется как специальная система упаковки, он фактически решает совершенно другую проблему: Docker - это запуск программ. Система Docker позволяет описывать сервисы, которые можно масштабировать по желанию, и контролировать скопления контейнеров. Пакеты Debian предназначены для установки программ и могут обрабатывать зависимости между версиями программного обеспечения. докер конечно, не может считаться системой спускаемых пакетов: каждый «пакет» может иметь только одну зависимость, система не имеет опции «рекурсивная сборка» и не поддерживает сложные ограничения версий!
Возможный ответ: если вы хотите написать пакет Debian для своего приложения, вы также можете использовать Docker для развертывания своего приложения. Это может быть достигнуто с помощью скрипта конфигурации, apt_setup.sh
который будет выглядеть так:
apt-key add - <<EOF
-----BEGIN PGP PUBLIC KEY BLOCK-----
<YOUR RELEASE OFFICER PGP KEY GOES HERE>
EOF
cat >> /etc/apt/sources.list <<EOF
deb https://my.organisation.org/repo debian-jessie main
apt-get update -y
apt-get upgrade -y
EOF
и Dockerfile
вдоль линий
ADD apt_setup.sh /root
RUN sh -ex /root/apt_setup.sh && rm /root/apt_setup.sh
RUN apt-get install -y my-node-js-package
(В вашей конкретной ситуации apt_setup.sh
было бы сложнее, добавив хранилища исходных текстов узлов и некоторые вспомогательные пакеты, такие как apt-transport-https .)
Поэтому действительно возможно использовать пакеты Debian и Docker одновременно, однако…
Моя интуиция […] говорит мне, что если бы пакеты deb были подходящими, это было бы более распространенным
Это правильная загвоздка, которая заставляет нас задаться вопросом: почему Docker пользуется популярностью как специальная система упаковки, а не таковой? (См. Выше.)
«Официальная» система упаковки из данного дистрибутива просто возможность среди многих других установить программное обеспечение в некоторой вычислительной среде. Существует множество других доступных источников, таких как менеджеры пакетов, относящиеся к сообществу, такие как npm или opam, деревья портов, такие как pkgsrc, и распространение простого исходного кода. С этой точки зрения легко понять успех Docker как специальной системы упаковки:
Спецификации Docker очень близки к сценарию оболочки, и из какого бы источника он ни исходил, мы устанавливаем программное обеспечение с помощью оболочки.
Docker имеет «встроенный» (платный) сервис для размещения артефактов, которые он производит, Docker Hub .
Каковы же преимущества пакетов Debian над образами Docker как системы пакетов? Жесткий контроль над зависимостями при установке. (Возможность обновления и понижения также существует, но не имеет практического значения, если мы реализуем шаблон неизменяемого сервера .) Это приводит к
Вывод
Если у вас есть только один продукт, развернутый в одной версии (что типично для SaaS), ваши потребности в управлении версиями очень просты, и использование Docker в качестве специального менеджера пакетов не должно иметь каких-либо серьезных недостатков. Как только вы работаете с несколькими версиями одного или нескольких продуктов, сложность проблемы ограничений версий, которую нужно решить, возрастает, и вам необходим соответствующий инструмент для этого, который может быть пакетами Debian или некоторой системой управления конфигурацией, если вы программное обеспечение для смешивания из разных источников.