Si bien hay una pequeña región superpuesta, Docker y los sistemas de empaquetado de Debian esencialmente resuelven dos problemas muy diferentes :
El sistema de empaquetado de Debian está diseñado para instalar software en un host y actualizarlo tan fácilmente como sea posible. Es capaz de manejar patrones complejos de dependencia y restricción entre componentes de software, como "la versión A del software X requiere el software Y con la versión B o más reciente instalada" o "el software X nunca debe instalarse con la versión C del software Z".
El sistema Docker está concebido para describir e implementar fácilmente servicios, especialmente microservicios, posiblemente en varios hosts, por ejemplo, un enjambre Docker o un clúster Kubernetes.
Estos dos problemas son esencialmente ortogonales, lo que significa que, dado el problema de implementación a resolver, uno puede usar uno de ellos, ambos, o tal vez ninguno de ellos, como parte de la solución. Cuando se usan ambos, el paquete Debian se usa en la producción de la imagen Docker, y su Dockerfile (las recetas utilizadas para preparar la imagen Docker que describe el "sistema virtualizado" ejecutado en un contenedor) esencialmente registraría su repositorio Debian en el fuentes del sistema de empaquetado de Debian e instale su paquete.
Con esto en mente, me parece que lo que realmente está buscando es implementar el patrón de servidor inmutable. El reciente desarrollo en tecnologías en la nube hizo posible actualizar el software no utilizando el sistema clásico de actualización de software desde un sistema de paquete de software (como el sistema de empaquetado Debian) sino simplemente reemplazando el servidor completo de una vez. (Algunas personas hicieron esto antes de este desarrollo al tener tres OS-s en un servidor, dos utilizados alternativamente para ejecutar el dispositivo y un mini-OS dedicado a realizar el reemplazo del dispositivo. Aunque no es demasiado complejo, parece que siempre ha sido un nicho.) Esta técnica puede ser de su interés porque si está acostumbrado a actualizar el software en su servidor utilizando el administrador de paquetes, el estado final del servidor depende del "historial de actualizaciones" del servidor, especialmente si se producen errores en el servidor. proceso de actualización Esta heterogeneidad es mala.
Tenemos miles de estas cajas en el campo. Gestionamos las dependencias del paquete, el registro del proceso, etc. a través de un paquete deb con diversos grados de éxito.
podría relacionarse con esto. El patrón de servidor inmutable borra esta fuente de errores al destruir esencialmente la noción de "historial de actualizaciones" del problema.
Ahora hay varias opciones para implementar el patrón de servidor inmutable, dos opciones populares son usar imágenes Docker, imágenes o usar "imágenes de instancia maestra" de su proveedor de la nube (se llaman AMI en AWS y solo imágenes personalizadas en Google Compute Engine) . Su caso de uso prohíbe el uso de técnicas basadas en la nube, por lo tanto, asumiré las imágenes de Docker como la única opción elegible. (En aras de la finalización, ciertamente es posible utilizar otros enfoques, por ejemplo, utilizando Virtual Box o una solución de virtualización similar, como una alternativa a Docker).
Cuando utiliza la técnica de patrón de servidor inmutable, introduce un nuevo artefacto (la imagen de Docker) que representa su servidor y este artefacto también se puede probar, y es muy fácil obtener una configuración que reproduzca verdaderamente sus configuraciones de producción, aparte de la carga de servicio.
Ahora, para considerar el problema concreto que describió, supongamos que implementar el patrón de servidor inmutable con Docker es realmente lo que desea. Dado que el sistema Docker y el sistema de empaquetado Debian son complementarios en lugar de mutuamente excluyentes (véase la introducción), aún tenemos que abordar la pregunta de si debe preparar un paquete Debian para su software.
La pertinencia de utilizar un paquete Debian para instalar su software (en la imagen de Docker o en un host) radica en la complejidad del problema de versiones que debe resolver. Si ejecuta al mismo tiempo varias versiones de su software, ocasionalmente necesita una versión anterior y tiene requisitos de versión complejos que debe documentar cuidadosamente, debe tener un paquete Debian. De lo contrario, este paso se puede omitir, pero dado que ya se esforzó por producir e implementar estos paquetes, no hay un valor real para deshacerse de su trabajo. Por lo tanto, sugeriría continuar produciendo sus paquetes Debian.