GNU/Linux >> Linux Esercitazione >  >> Linux

Cosa c'è all'interno di un'immagine/contenitore Docker?

Può essere utile distinguere tra immagini e contenitori (documenti). Un'immagine è statico e vive solo su disco. Un contenitore è un'istanza in esecuzione di un'immagine e include il proprio albero dei processi, la RAM e altre risorse di runtime.

Un'immagine è un raggruppamento logico di livelli più metadati su cosa fare durante la creazione di un contenitore e su come assemblare i livelli. Parte di quei metadati è che ogni livello conosce l'ID del suo genitore.

Quindi, cosa va in uno strato? I file (e le directory) che hai aggiunto al genitore. Esistono anche file speciali ("whiteout") che indicano che qualcosa è stato cancellato dal genitore.

Quando docker run un'immagine, docker crea un contenitore:decomprime tutti i layer nell'ordine corretto, creando un nuovo file system "root" separato dall'host. docker legge anche i metadati dell'immagine e avvia il "punto di ingresso" o il "comando" specificato al momento della creazione dell'immagine, che avvia un nuovo sottoalbero del processo. Dall'interno del contenitore, quel primo processo sembra la radice dell'albero, ma dall'host puoi vedere che è un sottoalbero di processi.

Il file system root è ciò che rende una distribuzione Linux diversa da un'altra (possono esserci anche alcune differenze nel modulo del kernel e differenze nel bootloader/file system di avvio, ma di solito sono invisibili ai processi in esecuzione). Il kernel è condiviso con l'host e, di fatto, continua a gestire le sue solite responsabilità all'interno del contenitore. Ma il file system root è diverso, quindi quando ti trovi all'interno del container, sembra che qualunque distro fosse nell'immagine Docker.

Il contenitore non solo ha il proprio file system e albero dei processi, ma ha anche la propria interfaccia di rete logica e, facoltativamente, la propria allocazione di RAM e tempo di CPU. Hai il controllo del contenitore, tuttavia, come operatore, quindi puoi decidere di condividere l'interfaccia di rete dell'host con il contenitore, dargli accesso illimitato a RAM e CPU e persino montare dispositivi, file e directory dall'host nel contenitore. L'impostazione predefinita è mantenere le cose separate, ma hai il potere di infrangere il modello di isolamento quanto necessario.


Docker è un wrapper su LXC Linux Containers e la relativa documentazione ti consentirà di sapere in dettaglio cosa è condiviso e cosa no.

In generale, la macchina host vede/contiene tutto all'interno dei contenitori, dal file system ai processi, ecc. È possibile emettere un comando ps sull'host vm e vedere i processi all'interno del contenitore.

Ricorda che i contenitori docker non sono macchine virtuali, quindi tutto è effettivamente in esecuzione in modo nativo sull'host e utilizza direttamente il kernel dell'host. Ogni contenitore ha il proprio spazio dei nomi utente (simile alle vecchie jail di root). Esistono strumenti/funzionalità che assicurano che i contenitori vedano solo i propri processi, abbiano il proprio file system stratificato sul file system host e uno stack di rete che convoglia allo stack di rete host.


Linux
  1. Come creare un'immagine personalizzata da un contenitore Docker

  2. Come determinare se un processo viene eseguito all'interno di lxc/Docker?

  3. La finestra mobile può essere eseguita all'interno di un contenitore Linux?

  4. Come eseguire un cron job all'interno di un contenitore docker

  5. Rendere visibile un montaggio NFS sull'host e leggere-scrivere all'interno del contenitore Docker

Immagine Docker vs Container:le principali differenze

Come installare AlmaLinux 8 Image in Docker Container

Cos'è Docker? Come funziona?

Che cos'è un manifesto di immagine Docker?

Come connettersi a Localhost all'interno di un contenitore Docker

Cosa fare se un container Docker esce immediatamente