Quando si distribuiscono applicazioni sui server, esiste in genere una separazione tra ciò che l'applicazione si raggruppa con se stessa e ciò che si aspetta dalla piattaforma (sistema operativo e pacchetti installati). Un punto di ciò è che la piattaforma può essere aggiornata indipendentemente dall'applicazione. Ciò è utile, ad esempio, quando è necessario applicare urgentemente gli aggiornamenti di sicurezza ai pacchetti forniti dalla piattaforma senza ricostruire l'intera applicazione.
Tradizionalmente gli aggiornamenti di sicurezza sono stati applicati semplicemente eseguendo un comando gestore pacchetti per installare versioni aggiornate dei pacchetti sul sistema operativo (ad esempio "aggiornamento yum" su RHEL). Ma con l'avvento della tecnologia dei container come Docker, dove le immagini dei container raggruppano essenzialmente sia l'applicazione che la piattaforma, qual è il modo canonico di mantenere aggiornato un sistema con i container? Sia l'host che i container hanno i propri set indipendenti di pacchetti che devono essere aggiornati e l'host sull'host non aggiornerà alcun pacchetto all'interno dei container. Con il rilascio di RHEL 7 in cui sono particolarmente presenti i contenitori Docker, sarebbe interessante sapere qual è il modo consigliato da Redhat per gestire gli aggiornamenti di sicurezza dei contenitori.
Considerazioni su alcune delle opzioni:
- Consentire al gestore pacchetti di aggiornare i pacchetti sull'host non aggiornerà i pacchetti all'interno dei contenitori.
- Dover rigenerare tutte le immagini del contenitore per applicare gli aggiornamenti sembra interrompere la separazione tra l'applicazione e la piattaforma (l'aggiornamento della piattaforma richiede l'accesso al processo di generazione dell'applicazione che genera le immagini Docker).
- L'esecuzione di comandi manuali all'interno di ciascuno dei contenitori in esecuzione sembra ingombrante e le modifiche rischiano di essere sovrascritte al successivo aggiornamento dei contenitori dagli artefatti di rilascio dell'applicazione.
Quindi nessuno di questi approcci sembra soddisfacente.
docker pull debian/jessie
aggiornare l'immagine, quindi ricostruire le mie immagini esistenti, quindi arrestare i contenitori ed eseguirli di nuovo ( con la nuova immagine). Le immagini che costruisco hanno lo stesso nome di quelle precedenti, quindi l'avvio avviene tramite lo script. Quindi rimuovo immagini "senza nome". Gradirei sicuramente un flusso di lavoro migliore.