Estamos empaquetando y distribuyendo una aplicación web y sentimos la necesidad de cambiar el despliegue de deb/rpm al enfoque de contenedores para controlar las versiones de las dependencias (como una versión más reciente de Python en distribuciones antiguas).
He investigado sobre LXC/LXD y suena tentador para el método antiguo de desarrollar aplicaciones con el estado almacenado dentro del contenedor. Pero también necesitamos desplegar en RHEL/CentOS y el estado de los paquetes tanto de LXC como de LXD parece deplorable. Además, no parece que ni LXD ni LXC tengan futuro en el mundo de RHEL.
Me he resistido a Docker debido a varios problemas de diseño o seguridad que ha tenido a lo largo de los años, pero también debido al cambio de paradigma hacia los contenedores sin estado que nosotros, los de la vieja escuela, necesitamos adoptar.
¿Es Docker ahora una plataforma fiable para despliegues en producción pequeños y grandes donde la disponibilidad de la aplicación es realmente importante?
¿Y cuáles serían algunas de las mejores prácticas para empaquetar y distribuir aplicaciones con Docker?
Dado que Discourse se despliega exclusivamente en Docker y estoy seguro de que tiene despliegues a gran escala, parece el mejor lugar para hacer esta pregunta.
Ejecutamos cientos de servidores en decenas de centros de datos, tanto en hardware dedicado como en la nube, y cada parte de la aplicación Discourse se ejecuta en contenedores Docker.
Docker tiene su justa parte de errores, pero para nosotros los beneficios superan los problemas.
Solo una cosa:
No sé exactamente a qué te refieres con esto, pero el estado a largo plazo, como los datos de una base de datos, generalmente se mantiene en volúmenes que se mapean al host.
¿Se sabe que los contenedores de Discourse funcionan sin problemas tanto en hosts con Ubuntu como con distribuciones RHEL (Ubuntu 18.04/16.04 y CentOS 7/8)?