2016-07-10 33 views
6

che sto cercando di capire i concetti Docker ma una cosa che non posso prendere:Docker: immagine di base

quanto ho capito immagine (di conseguenza - un contenitore) è possibile creare un'istanza da diverse distributives Linux, come Ubuntu, CentOS e altri.

Diciamo che sulla macchina host corro standard di Ubuntu 14.04,

  • Cosa succede se uso il contenitore che non è istanziato da stesso distributiva?
    • Non 14.04?
    • Non Ubuntu (o qualsiasi altro basato su Debian)?
    • Quali sono gli svantaggi dell'utilizzo di immagini di base diverse delle immagini utilizzate? (Diciamo che uso l'Immagine A che usa Ubuntu come immagine di base, l'Immagine B che ha usato Debian come immagine di base e Immagine C che usa CentOS come immagine di base)?

Bonus domanda: Come faccio a sapere quale immagine di base utilizzato per un'immagine se sviluppatore non ha specificato in una descrizione hub Docker?

Grazie in anticipo!

risposta

6

Docker fa non uso LXC (non since Docker 0.9), ma libcontainer (ora runc), un driver di esecuzione built-in che manipola gli spazi dei nomi, gruppi di controllo, le capacità, i profili di AppArmor, interfacce di rete e regole per il firewall - il tutto in un modo coerente e prevedibile e senza dipendere da LXC o da qualsiasi altro pacchetto userland.

Un'immagine mobile rappresenta un insieme di file che verrà eseguito come un contenitore nella propria memoria e spazio su disco e utente, mentre accederà al kernel host.
Questo differisce da una VM, che non accede al kernel host ma include il proprio stack hardware/software tramite il suo hypervisor.
Un contenitore deve solo impostare limiti (disco, memoria, CPU) nell'host. Una VM effettiva deve costruire un intero nuovo host.

Quell'immagine finestra mobile (gruppo di file) può essere qualsiasi cosa, a patto che:

ciò significa che un'immagine può essere qualsiasi cosa : un'altra distro linux, o anche un singolo file eseguibile. Qualsiasi compilazione eseguibile a go (https://golang.org/) per esempio, potrebbe essere confezionato propria immagine finestra mobile in senza alcun distribuzione Linux:

FROM scratch 
COPY my_go_exe/
ENTRYPOINT /my_go_exe 

scratch è l'immagine "vuoto", e un eseguibile go è collegato staticamente, quindi è autonomo e dipende solo dalle chiamate di sistema al kernel.

+0

Grazie per la risposta, ora è molto chiaro! Allora, perché la gente continua a dire che è una buona idea istanziare tutte le tue immagini dalla stessa immagine di base? Chris Pitman ha dato una risposta abbastanza ragionevole in questa discussione, sei d'accordo con ciò che ha detto? – SmxCde

+1

@SmxCde Finché il kernel è "abbastanza recente" (3.14 o superiore), l'immagine di base non dovrebbe avere importanza. Partire dalla stessa immagine di base aiuterebbe solo a non consumare troppo spazio in '/ var/lib/docker/images' sull'host, ma oltre a questo, puoi usare quante immagini base vuoi. (con l'avvertimento di Chris sulla sicurezza) – VonC

1

Docker utilizza LXC, un metodo di virtualizzazione a livello di sistema operativo per l'esecuzione di più sistemi Linux (contenitori) isolati su un host di controllo utilizzando un singolo kernel Linux.

È possibile confrontare questo con una macchina virtuale sul proprio computer, dove si avvia un'altra distribuzione Linux, che non deve essere uguale al sistema operativo host. Quindi non importa se il tuo host è uguale all'immagine di base del tuo contenitore.

In Docker, il contenitore è costituito da livelli. Ogni passo (comando) nel tuo Dockerfile rappresenta un livello, che viene applicato uno dopo l'altro. Il primo passo è quello di applicare il livello del sistema operativo di base, che è indicato da FROM.

Quindi, per rispondere alla domanda bonus, è possibile dare un'occhiata all'interno dello Dockerfile del contenitore che si sta utilizzando (è la terza scheda di DockerHub) e vedere nella prima istruzione, che è l'immagine di base (os).

+0

Grazie per la risposta! Ma finora quello che stai dicendo è un po 'confuso per me. Da quando ho iniziato a conoscere Docker vedo che si posizionano come software che non è VM, per esempio guarda questa immagine: http://i.imgur.com/MJHfm1c.jpg e stai dicendo che è una sorta di VM a livello di sistema operativo, o simile ad esso. Capisco che la mia domanda potrebbe essere sciocca, ma non sono un ops o qualsiasi tipo di ragazzo di Linux mi dispiace così tanto) – SmxCde

+0

Forse sarebbe più chiaro per me se potessi solo spiegare la differenza tra VM reale e cosa Docker con LXC fa , o vantaggi dell'utilizzo di a) Stessa distribuzione come sulla macchina host b) stessa immagine di base per tutti i miei contenitori docker, come ho capito è consigliato ... grazie! – SmxCde

4

La cosa principale condivisa tra il sistema operativo host e il contenitore finestra mobile è il kernel. Il rischio principale di utilizzare contenitori docker da diverse distribuzioni/versioni è che potrebbero dipendere dalla funzionalità del kernel non presente sul sistema host, ad esempio se il contenitore si aspetta un kernel più recente di quello installato dall'host.

In teoria, il kernel di Linux è retrocompatibile. Finché il kernel host è più recente del kernel del contenitore, lo dovrebbe funzionare.

Da un punto di vista operativo, ogni volta che si inizia a dipendere da un'immagine di base diversa che è un'altra dipendenza che è necessario monitorare per aggiornamenti e problemi di sicurezza. La standardizzazione su una distribuzione riduce il carico di lavoro per il tuo team operativo quando viene scoperta la prossima grande vulnerabilità.

+0

Ha perfettamente senso, grazie! – SmxCde

Problemi correlati