Qual è la relazione tra il sistema operativo host Docker e il sistema operativo dell'immagine di base del contenitore?


122

Non sono sicuro di fare la domanda giusta ... ma mentre leggo tutto ciò su cui posso mettere le mani, vedo che posso installare Docker su Ubuntu 12.04 (ad esempio) e poi posso installare un contenitore Fedora o una versione diversa di ubuntu? (c'è un esempio in cui l'utente ha installato busybox nel contenitore.)

E ovviamente potrei sbagliarmi completamente.

Ma sarebbe una mia aspettativa che ci fosse una connessione effimera tra il sistema di base e il contenitore.

ribadito: qual è la relazione tra il sistema operativo host e il sistema operativo dell'immagine di base del contenitore?

Risposte:


100

Come accennato da BraveNewCurrency, l'unica relazione tra il sistema operativo host e il contenitore è il kernel.

È una delle principali differenze tra docker e macchine virtuali "normali", non c'è overhead, tutto avviene direttamente all'interno del kernel dell'host.

Questo è il motivo per cui è possibile eseguire solo distribuzioni / binari basati su Linux all'interno del contenitore. Se vuoi eseguire qualcos'altro, non è impossibile, ma avresti bisogno di una sorta di virtualizzazione all'interno del contenitore (qemu, kvm, ecc.)

Docker gestisce le immagini che sono la rappresentazione del file system. Puoi installare qualsiasi distribuzione Linux o semplicemente mettere i binari.

In effetti, per comodità dell'esempio, spesso ci affidiamo alle immagini di base, ma potresti anche creare la tua immagine senza nessuna delle librerie / binari di distribuzione. In questo modo avresti un contenitore davvero piccolo ma funzionale.

Un altro punto riguardo alle distribuzioni: poiché il kernel è ancora il kernel dell'host, non avrai alcun modulo / patch specifico del kernel fornito dalla distribuzione.


2
quindi se il sistema operativo host è Ubuntu, anche il contenitore sarà Ubuntu?
Richard

21
Il kernel del contenitore sarà quello di Ubuntu, ma niente di più. Puoi eseguire facilmente centos, archlinux, debian o qualsiasi altra distribuzione basata su Linux come contenitori.
creack

37
Sebbene queste informazioni possano essere dichiarate direttamente / indirettamente sul sito Web Docker, credo che dovrebbero renderlo un po 'più chiaro. Mi ero fatto strada attraverso la homepage, la panoramica, il tutorial interattivo e la maggior parte dei tut di base. Nonostante ciò, ero confuso su questo argomento e stavo iniziando a presumere che le migliori prestazioni da docker (in base ai diagrammi di architettura del sito) avrebbero richiesto una corrispondenza sull'host e sul sistema operativo del contenitore. Sono nuovo al concetto di "kernel Linux" quindi questo non mi è stato immediatamente ovvio. Sapere questo rende immediatamente Docker doppio come un cattivo culo.
ctrlplusb

2
Docker è un progetto piuttosto complesso che sfrutta funzionalità avanzate. Ad un certo punto, presumiamo che l'utente abbia qualche conoscenza come la differenza tra sistema operativo e distribuzione. Se pensi che possa aggiungere valore, la documentazione è open source e puoi inviare una richiesta pull.
creack

3
Ciò sembra indicare che solo le parti dello spazio utente di un sistema operativo (librerie, comandi, applicazioni) possono essere containerizzate. Se l'applicazione richiede una revisione del kernel diversa (es. 3.10 contro 4.9), potrebbe non essere in grado di funzionare in un contenitore. È giusto?
David C.

23

Letteralmente, l'unica cosa che hanno in comune è il kernel. Il loro intero mondo (file system) è nel contenitore Docker.


1

C'è un'altra considerazione: anche se entrambi i kernel sono uguali, c'è un problema se il sistema operativo host non supporta Docker, come RHEL 6: https://access.redhat.com/solutions/1378023

Quindi non sarai in grado di avviare un contenitore su RHEL 6, anche se l'immagine è Linux.

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.