Stiamo impacchettando e distribuendo un’applicazione web e sentiamo la necessità di passare dal deployment in formato deb/rpm a quello basato sui container, per poter controllare le versioni delle dipendenze (ad esempio, una versione più recente di Python su distribuzioni più vecchie).
Ho dato un’occhiata a LXC/LXD e l’idea di sviluppare applicazioni nel vecchio stile, con lo stato memorizzato all’interno del container, sembra allettante. Tuttavia, dobbiamo anche effettuare il deployment su RHEL/CentOS e lo stato dei pacchetti sia per LXC che per LXD appare preoccupante. Inoltre, non sembra che né LXD né LXC abbiano un futuro nell’ecosistema RHEL.
Ho in qualche modo resistito all’adozione di Docker a causa di vari problemi di progettazione o sicurezza emersi nel corso degli anni, ma anche per il cambio di paradigma verso container senza stato (stateless), che noi “vecchi stampo” dobbiamo accettare.
Oggi Docker è una piattaforma affidabile per deployment in produzione, sia piccoli che grandi, dove l’uptime dell’applicazione è davvero cruciale?
E quali sarebbero le migliori pratiche per impacchettare e distribuire applicazioni con Docker?
Visto che Discourse viene distribuito esclusivamente tramite Docker e sono certo che abbia deployment di grandi dimensioni, sembra il posto migliore per porre questa domanda.
Gestiamo centinaia di server in decine di data center, sia in bare metal che nel cloud, e ogni componente dell’applicazione Discourse viene eseguito in container Docker.
Docker ha senz’altro i suoi problemi, ma per noi i vantaggi superano gli inconvenienti.
Solo una precisazione:
Non sono sicuro di cosa intendiate esattamente, ma lo stato a lungo termine, come i dati di un database, viene solitamente conservato in volumi mappati sull’host.