I container Docker hanno il proprio kernel o no?


66

Vedo che molte immagini docker nel repository docker sono realizzate con una base Ubuntu.

Cosa significa? Ciascun contenitore raggruppa una versione ridotta del kernel Linux?

I contenitori si trovano sopra i loro kernel? Ma ho pensato che i container condividessero il kernel dell'host (che in alcuni casi è boot2docker, una build Tiny Core Linux personalizzata e in altri qualcosa come CoreOS).

EDIT: chiarire un po 'la domanda. Sì, so che la finestra mobile è un contenitore di processi, non una VM completa. Ma poiché ci sono contenitori "Ubuntu" nel registro dell'hub docker ufficiale e altri sistemi operativi come CentOS, cosa significa eseguire Ubuntu in un contenitore?

Risposta: Ahh mi è appena venuto in mente. Sono i processi terrestri dell'utente di Ubuntu, contenenti apt-get e altri processi di configurazione per un particolare build di Ubuntu. Allo stesso modo per CentOS. Docker non è un singolo processo, ma solo una voce. Quindi per queste distribuzioni il punto di ingresso è una sorta di processo init che genera altri processi.


2
"Sono i processi terrestri dell'utente di Ubuntu", non solo i processi, ma anche le librerie.
osgx,

Risposte:


38

Docker utilizza il kernel del sistema operativo host, non esiste un kernel personalizzato o aggiuntivo all'interno del contenitore. Tutti i container che girano su una macchina condividono questo kernel "host".

Wikipedia dice http://en.wikipedia.org/wiki/Docker_(software) che

Docker utilizza le funzionalità di isolamento delle risorse del kernel Linux come cgroups e spazi dei nomi del kernel per consentire l'esecuzione di "contenitori" indipendenti all'interno di una singola istanza Linux, evitando il sovraccarico dell'avvio di macchine virtuali.

cgroups, namespace e LXC sono caratteristiche del kernel Linux per isolare gruppi di processi; c'è ancora un singolo kernel, un singolo scheduler e un'istanza del gestore della memoria del kernel.

Boot2docker e CoreOS sono solo distribuzioni Linux leggere con alcuni kernel host; possono essere utilizzati per caricare i contenitori Docker.

http://boot2docker.io/

boot2docker è una distribuzione Linux leggera basata su Tiny Core Linux realizzata appositamente per eseguire container Docker. Funziona completamente da RAM, pesa ~ 27MB e si avvia in ~ 5s (YMMV).

http://en.wikipedia.org/wiki/CoreOS

Un host di controllo singolo (istanza CoreOS) esegue più sistemi Linux isolati (container), usando Docker come ulteriore livello di astrazione e interfaccia [14] alle funzioni di virtualizzazione a livello di sistema operativo sottostanti del kernel Linux. ... Questo approccio si basa sulla funzionalità dei cgroup del kernel Linux, che fornisce l'isolamento dello spazio dei nomi e le capacità di limitare, rendere conto e isolare l'utilizzo delle risorse (CPU, memoria, I / O del disco, ecc.) Per le raccolte di processi.


1
Questo non risponde alla domanda.
EML

2
EML, quale domanda? Per impostazione predefinita, tutti i contenitori Docker non hanno kernel propri. Esiste un solo kernel host per tutti i contenitori Docker.
Osgx,

certo, la tua risposta va bene fino in fondo, ma l'OP voleva sapere perché deve FROMun'immagine di base di Ubuntu quando l'host sta già eseguendo Ubuntu. Per rispondere alla domanda devi spiegare cos'è un'immagine di base.
EML,

2
EML, la domanda è stata modificata con "Chiarimento" ( superuser.com/posts/889472/revisions ) dopo che la mia risposta è stata pubblicata, quindi è la risposta alla domanda originale senza chiarimenti. Se hai alcune informazioni da condividere su immagini di base e kernel nella finestra mobile, aggiungi un'altra risposta.
Osgx,

17

In quasi tutti i casi, il kernel del sistema operativo host è condiviso. Per eseguire un kernel diverso è necessario utilizzare la virtualizzazione. Questo è raro e usato solo quando necessario a causa del degrado delle prestazioni.

"Il contenitore Docker Engine comprende solo l'applicazione e le sue dipendenze. Funziona come un processo isolato nello spazio utente sul sistema operativo host, condividendo il kernel con altri contenitori. Pertanto, gode dell'isolamento delle risorse e dei vantaggi di allocazione delle macchine virtuali, ma è molto di più portatile ed efficiente. "

Questo potrebbe aiutare a spiegare come funziona: inserisci qui la descrizione dell'immagine

Fonte: https://www.docker.com/whatisdocker/


4
Qualsiasi fonte per "Pacchetti possono usare kernel diversi" ??? Docker stesso non può usare diversi kernel, c'è sempre un solo kernel host. Solo in combinazione con hypervisor (virtualizzazione) possiamo avviare diversi host ciascuno con la propria versione del kernel ed eseguire un Docker per host virtuale; ma per ogni host ci sarà un solo kernel per l'host e per i suoi contenitori Docked)
osgx

2
Cos'è il pacchetto? Il contenitore Docker non contiene kernel all'interno; è appena stato installato e avviato sul kernel utilizzato nell'host. Quindi: un Docker = un server = un kernel, proprio come mostrato in figura. Non c'è modo di usare due kernel con un singolo motore Docker; tutti i container all'interno di questo motore useranno lo stesso kernel. Penso che la risposta corretta sia "No, i contenitori Docker non possono usare kernel diversi all'interno della singola istanza di Docker Engine"
osgx,

1
Ogni contenitore docker può eseguire qualsiasi codice desideri, incluso il software di virtualizzazione in grado di caricare qualsiasi kernel richiesto dal software. Se lo desideri, puoi eseguire Windows in un contenitore.
JeremiahBarrar

1
JeremiahBarrar, capito, grazie per la spiegazione. L'esecuzione del software di virtualizzazione dall'interno del contenitore Docker è documentata ed è supportata da Docker? Che tipo di virtualizzazione funzionerà da Docker (software qemu, qemu + kvm, xen, ...)?
Osgx,

2
La prima frase è fuorviante. L'uso di una VM all'interno di un container elimina il punto di utilizzo di Docker.
user2707671
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.