GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Dove sono archiviati le immagini Docker, i contenitori e i volumi nel sistema host Linux?

Vuoi sapere dove si trovano immagini, contenitori e volumi Docker?

In un tipico ambiente Linux, puoi trovare l'immagine Docker e i dati del contenitore in:

/var/lib/docker/

Se il tuo server sta esaurendo lo spazio, dovresti assolutamente dare un'occhiata a questa directory.

In primo luogo, tutte le entità relative a Docker si trovano in /var/lib/docker . Ma esaminiamolo in modo più specifico, con l'immagine e il contenitore Alpine come esempio pratico.

Nota:si prega di notare che queste informazioni sono solo a scopo didattico. La manipolazione con il sistema host di directory/file Docker non è mai effettivamente consigliata. I comandi docker e docker-compose dovrebbero essere sempre il metodo preferito. È necessario accedere o manipolare le directory/file Docker collocati fisicamente solo come ultima risorsa durante le situazioni di emergenza.

Posizione delle immagini Docker

Ogni volta che usi il docker pull comando o esegui docker-compose up -d per preparare il lancio delle applicazioni, è qui che le immagini vengono archiviate su un server Ubuntu:

/var/lib/docker/overlay2

Qui, Overlay2 è il driver di archiviazione Docker predefinito su Ubuntu. Puoi confermarlo eseguendo docker info comando e cercando il driver di archiviazione:

...
Storage Driver: overlay2
...

Se questo è diverso dal tuo, stai utilizzando un driver di archiviazione diverso per Docker. Allo stesso modo, la posizione della directory verrebbe denominata in base allo stesso driver di archiviazione. La disponibilità del driver di archiviazione dipende dal supporto del kernel.

Posizioni specifiche dell'immagine

Se stai cercando le posizioni di immagini specifiche, puoi utilizzare il comando ispeziona su Docker per l'immagine estratta.

Supponiamo, ad esempio, di aver estratto l'immagine alpine con docker pull alpine . Esegui il comando seguente per ispezionarlo:

[email protected]:~$ docker inspect alpine

Una volta eseguito il comando, noterai tre campi all'interno dei Data sottosezione in GraphDriver :

...
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/merged",
                "UpperDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
                "WorkDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/work"
            },

...

Tutti i percorsi di directory sopra indicati sono le posizioni fisiche dell'immagine alpine sul sistema host. Prendi nota della grande directory denominata hash nei tre campi sopra:64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e .

In totale, ci sono in realtà quattro tipi di campi:

Inferiore Dir :Questi sono i livelli di sola lettura di un filesystem di sovrapposizione. Per la finestra mobile, questi sono i livelli dell'immagine assemblati in ordine.

Directory superiore :Questo è il livello di lettura-scrittura di un filesystem di sovrapposizione. Per docker, è l'equivalente del livello specifico del contenitore che contiene le modifiche apportate da quel contenitore.

WorkDir :Questa è una directory richiesta per l'overlay, ha bisogno di una directory vuota per uso interno.

Directory unita :Questo è il risultato del filesystem di sovrapposizione. Docker esegue effettivamente il chroot in questa directory durante l'esecuzione del contenitore.

Citato da questo riferimento (utile per ulteriori letture).

Posizione dei container Docker

Come le immagini, anche i contenitori sono archiviati all'interno della stessa directory basata sul driver di archiviazione.

/var/lib/docker/overlay2

Posizioni specifiche del container

Se stai cercando le posizioni di contenitori specifici, puoi nuovamente utilizzare inspect comando sul contenitore in esecuzione.

Supponiamo, ad esempio, di aver eseguito il container alpine con docker run -ti -d alpine . Quando esegui docker ps , vedrai che è in esecuzione:

[email protected]:~$ docker ps
CONTAINER ID   IMAGE     COMMAND     CREATED         STATUS         PORTS     NAMES
cb341d6a28fa   alpine    "/bin/sh"   6 seconds ago   Up 5 seconds             confident_banzai

Qui, il contenitore è stato chiamato casualmente confident_banzai . Quindi esaminiamolo:

[email protected]:~$ docker inspect confident_banzai

Una volta eseguito il comando precedente, noterai tutti e quattro i campi menzionati in precedenza all'interno dei Data sottosezione in GraphDriver . Queste directory sono dove si trovano fisicamente i dati del contenitore sul tuo sistema host:

...
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3-init/diff:/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
                "MergedDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/merged",
                "UpperDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/diff",
                "WorkDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/work"
            },
            "Name": "overlay2"
        },
...

Riferimento per ulteriori letture.

Le directory di cui sopra sono le posizioni fisiche dei dati del tuo contenitore all'interno del sistema host. Ricorda la grande directory con nome hash:64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e dalle Immagini Docker sezione? La directory sotto di essa si chiama diff , come puoi vedere in LowerDir sezione dopo : , che ora è un punto di montaggio per il contenitore - recuperato dall'immagine di base UpperDir !

Queste directory continueranno a essere disponibili anche dopo l'arresto del contenitore. Quindi, il percorso completo comune all'immagine (MergedDir , UpperDir e WorkDir ) e il contenitore (LowerDir punto di montaggio) è:

/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/

Lo scopo dell'immagine è contiguo dopo l'assegnazione al contenitore fino al LowerDir livello, motivo per cui i quattro campi sono allocati e basati su una directory diversa (con un nuovo hash) a causa della natura dinamica di quest'ultimo, che diventa:

/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/
Nota:il processo di montaggio della directory dall'immagine di base al container è molto simile a come si montano i volumi su Docker!

Posizione dei volumi Docker

A differenza delle immagini e dei contenitori Docker, le posizioni fisiche dei volumi sono piuttosto semplici. I volumi si trovano in:

/var/lib/docker/volumes/

Posizioni di volume specifiche

In questo caso, ci sono principalmente due tipi. Uno è i normali volumi Docker e l'altro è il bind mount.

Volumi Docker

Se stai cercando le posizioni di volumi specifici, puoi utilizzare il docker volume ls prima il comando e controllare il nome o l'ID del volume.

Ad esempio, ho eseguito il container alpine con il seguente comando con un volume:

[email protected]:~$ docker run -ti -d --name alpine-container -v test-data:/var/lib/app/content alpine

Ora, un volume chiamato test-data verrà creato automaticamente. Creiamo ora un file chiamato test.md all'interno di questa posizione:

[email protected]:~$ docker exec alpine-container sh -c "touch /var/lib/app/content/test.md"

Verifica che il file sia stato effettivamente creato:

[email protected]:~$ docker exec -ti alpine-container sh
/ # ls /var/lib/app/content/
test.md
/ # exit

Quando esegui docker volume ls , il volume denominato test-data verrebbe elencato:

[email protected]:~$ docker volume ls
DRIVER    VOLUME NAME
local     d502589845f7ae7775474bc01d8295d9492a6c26db2ee2c941c27f3cac4449d1
local     e71ee3960cfef0a133d323d146a1382f3e25856480a727c037b5c81b5022cb1b
local     test-data

Infine, puoi confermare la posizione effettiva del file sul tuo sistema host:

[email protected]:~$ sudo ls -l /var/lib/docker/volumes/test-data/_data
total 0
-rw-r--r-- 1 root root 0 Oct  6 23:20 test.md

Pertanto, il percorso per il volume montato si trova sempre all'interno di una directory denominata _data all'interno della rispettiva directory del volume.

Puoi anche controllare tali percorsi nel modo Docker usando docker volume inspect comando seguito dal nome del volume o dall'ID ed esaminando il Mountpoint parametro all'interno dell'output:

[email protected]:~$ docker volume inspect test-data
[
    {
        "CreatedAt": "2021-10-06T23:20:20+05:30",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/test-data/_data",
        "Name": "test-data",
        "Options": null,
        "Scope": "local"
    }
]

Lega i supporti

Le posizioni dei montaggi di binding sono piuttosto ovvie e ancora più semplici perché monti il ​​volume direttamente da una posizione sul lato host:

[email protected]:~$ mkdir /home/avimanyu/test-data
[email protected]:~$ docker run -ti -d --name alpine-container -v /home/avimanyu/test-data:/var/lib/app/content alpine

In questo caso, un volume montato in binding denominato test-data diventerà disponibile sul lato contenitore come /var/lib/app/content .

Riepilogo

In questo breve tutorial, ho adottato un approccio generico basato su Linux per mostrare le posizioni fisiche di immagini, contenitori e volumi Docker che risiedono sul tuo server Linux (Ubuntu 20.04 in questo caso) a livello di host.

Se desideri condividere feedback, commenti o suggerimenti su questo approccio, lascia i tuoi pensieri nella sezione commenti qui sotto.


Docker
  1. Qual è la differenza tra un container Linux e un'immagine?

  2. Come creare, elencare ed eliminare contenitori Docker su Linux

  3. Che cos'è Docker (e contenitori Linux?)

  4. La differenza tra CMD e ENTRYPOINT nelle immagini Docker

  5. Come eseguire il backup e il ripristino dei container Docker

Dove vengono archiviate le immagini e i contenitori Docker nell'host?

Come ottenere l'indirizzo IP di un contenitore Docker dall'host

Come utilizzare Docker Cp per copiare file tra host e contenitori

Come creare volumi Docker su Windows in modo semplice

Come controllare l'utilizzo dello spazio su disco per immagini Docker, contenitori e volumi

Come copiare file tra host e contenitore Docker