2013-07-29 3 views
10

Se il mio programma dipende da una funzione di una libreria del kernel e tale funzione ha a sua volta una catena di dipendenze, come fa la docker a rimanere piccola e portabile senza scattare un'istantanea di tutte le librerie del kernel (e gestendo i problemi di dipendenza a una funzione piuttosto che a livello di libreria)? In altre parole, come si isola dai cambiamenti nelle librerie del kernel da una versione alla successiva, e lo fa in una libreria o in una funzione di granlarity?Come Docker consente contenitori portatili se le librerie del kernel cambiano

E se la mia applicazione ha uno stack software in cui, ad esempio, una funzione è compatibile con una versione futura della libreria kernel A mentre una seconda funzione che utilizza la libreria kernel A non è più compatibile. In altre parole:

funzione 1 & 2 entrambi dipendono e lavorano con funzioni kernel Lib Una versione 1.0

funzione 1 funziona con Lib Una versione 1.1 funzione 2 pause con Lib Una versione 1.1 (funzione 2 ancora ha bisogno di Lib A versione 1.0)

Non so molto di Docker quindi questa è una domanda da principianti.

risposta

15

Non esiste una "libreria del kernel". Le cose più vicine a quello che stai descrivendo sono:

  • libc, che è parte dell'immagine del contenitore, e quindi non cambia.

  • L'ABI del kernel Linux, che è per lo più costante. Mentre occasionalmente vengono apportate alcune modifiche al kernel ABI, ciò viene fatto il più raramente possibile - gli sviluppatori del kernel fanno tutto il possibile per mantenere la compatibilità all'indietro. Laddove vengono apportate modifiche, è più spesso in componenti che non sarebbero rilevanti per le applicazioni in esecuzione in un contenitore (ad esempio, uscita audio/video, gestione dinamica dei dispositivi, ecc.).

+0

libc e il kernel Linux sono molto intrecciati Il kernel su cui si sta eseguendo è stato compilato con una libc specifica. La libc che hai è stata compilata per supportare solo kernel al di sopra di una versione specifica. Se aggiorni uno senza l'altro puoi essere dentro per un mondo di dolore. – Eloff

+2

Credo che l'OP significasse le chiamate di sistema supportate da diverse versioni del kernel. Questi sono altamente correlati alla libc. Quindi i contenitori in qualche modo imbrogliano e usano la libc del sistema di base? Potresti incontrare dei problemi se qualche software tentasse di richiamare direttamente un syscall non supportato nel kernel di base? – Otheus