GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Kde jsou obrázky, kontejnery a svazky Dockeru uloženy v hostitelském systému Linux?

Chcete vědět, kde jsou umístěny obrázky, kontejnery a svazky Docker?

V typickém prostředí Linuxu můžete obraz Dockeru a data kontejneru najít v:

/var/lib/docker/

Pokud na vašem serveru dochází místo, určitě byste se měli podívat do tohoto adresáře.

Primárně jsou všechny entity související s Dockerem umístěny na /var/lib/docker . Ale podívejme se na to konkrétněji, s obrázkem a kontejnerem Alpine jako praktickým příkladem.

Poznámka:Upozorňujeme, že tyto informace slouží pouze pro vzdělávací účely. Manipulace s hostitelským systémem Adresáře/soubory Dockeru se ve skutečnosti nikdy nedoporučují. Příkazy docker a docker-compose by měly být vždy preferovanou metodou. Fyzicky umístěné adresáře/soubory Dockeru by měly být přístupné nebo s nimi manipulováno pouze jako poslední možnost v nouzových situacích.

Umístění obrázků dockeru

Kdykoli použijete docker pull nebo spusťte docker-compose up -d pro přípravu spouštění aplikací se obrázky ukládají na server Ubuntu:

/var/lib/docker/overlay2

Zde je Overlay2 výchozím ovladačem úložiště Docker na Ubuntu. Můžete to potvrdit spuštěním docker info a vyhledejte ovladač úložiště:

...
Storage Driver: overlay2
...

Pokud se toto liší od vašeho, pak používáte jiný ovladač úložiště pro Docker. Podobně by umístění adresáře bylo pojmenováno podle stejného ovladače úložiště. Dostupnost ovladače úložiště závisí na podpoře jádra.

Konkrétní umístění obrázků

Pokud hledáte umístění konkrétních obrázků, můžete pro vytažený obrázek použít příkaz inspect na Dockeru.

Řekněme například, že jsem vytáhl alpský obrázek pomocí docker pull alpine . Chcete-li jej zkontrolovat, spusťte následující příkaz:

[email protected]:~$ docker inspect alpine

Po spuštění příkazu si všimnete tří polí uvnitř Data podsekci GraphDriver :

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

...

Všechny výše uvedené cesty k adresářům jsou fyzickými umístěními obrazu alpine na hostitelském systému. Poznamenejte si velký hash pojmenovaný adresář ve třech polích výše:64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e .

Celkem existují ve skutečnosti čtyři typy polí:

Nižší_adresář :Toto jsou vrstvy překryvného souborového systému pouze pro čtení. U dockeru se jedná o vrstvy obrázků sestavené v pořadí.

UpperDir :Toto je vrstva pro čtení a zápis překryvného souborového systému. Pro docker je to ekvivalent vrstvy specifické pro kontejner, která obsahuje změny provedené tímto kontejnerem.

WorkDir :Toto je požadovaný adresář pro překrytí, pro interní použití potřebuje prázdný adresář.

MergedDir :Toto je výsledek překryvného souborového systému. Docker efektivně chrootuje tento adresář při spuštění kontejneru.

Citováno z tohoto odkazu (dobré pro další čtení).

Umístění kontejnerů dockeru

Stejně jako obrázky jsou kontejnery také uloženy ve stejném adresáři založeném na ovladači úložiště.

/var/lib/docker/overlay2

Konkrétní umístění kontejnerů

Pokud hledáte umístění konkrétních kontejnerů, můžete opět použít inspect příkaz na běžícím kontejneru.

Řekněme například, že jsem spustil kontejner alpine pomocí docker run -ti -d alpine . Když spustíte docker ps , uvidíte, že běží:

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

Zde byl kontejner náhodně pojmenován confident_banzai . Pojďme to tedy zkontrolovat:

[email protected]:~$ docker inspect confident_banzai

Jakmile spustíte výše uvedený příkaz, všimnete si všech čtyř výše zmíněných polí uvnitř Data podsekci GraphDriver . Tyto adresáře jsou místa, kde jsou data kontejneru fyzicky umístěna na vašem hostitelském systému:

...
        "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"
        },
...

Odkaz pro další čtení.

Výše uvedené adresáře představují fyzické umístění dat vašeho kontejneru uvnitř hostitelského systému. Pamatujte na velký adresář s názvem hash:64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e z Docker Images sekce? Adresář pod ním se nazývá diff , jak můžete vidět v LowerDir sekce za : , což je nyní přípojný bod pro kontejner – načtený ze základního obrázku UpperDir !

Tyto adresáře budou nadále dostupné i po zastavení kontejneru. Takže úplná cesta, která je společná mezi obrázkem (MergedDir , UpperDir a WorkDir ) a kontejner (LowerDir bod připojení) je:

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

Účel obrázku je po přiřazení ke kontejneru souvislý až po LowerDir úroveň, což je důvod, proč jsou čtyři pole alokována a založena na jiném adresáři (s novým hashem) kvůli dynamické povaze druhého adresáře, který se stává:

/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/
Poznámka:Proces připojení adresáře ze základního obrazu do kontejneru je velmi podobný tomu, jak připojujete svazky na Docker!

Umístění svazků dockeru

Na rozdíl od obrázků a kontejnerů Docker je fyzická umístění svazků docela jednoduchá. Svazky jsou umístěny na:

/var/lib/docker/volumes/

Umístění konkrétních svazků

V tomto případě existují primárně dva typy. Jedním jsou běžné svazky Dockeru a druhým jsou připojení k připojení.

Svazky dockeru

Pokud hledáte umístění konkrétních svazků, můžete použít docker volume ls a zkontrolujte název svazku nebo ID.

Například jsem spustil kontejner alpine pomocí následujícího příkazu s objemem:

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

Nyní svazek s názvem test-data se automaticky vytvoří. Nyní vytvoříme soubor s názvem test.md uvnitř tohoto umístění:

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

Ověřte, zda byl soubor skutečně vytvořen:

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

Když spustíte docker volume ls , svazek s názvem test-data by bylo uvedeno:

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

Nakonec můžete potvrdit skutečné umístění souboru na vašem hostitelském systému:

[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

Proto je cesta k připojenému svazku vždy umístěna v adresáři s názvem _data uvnitř příslušného adresáře svazku.

Takové cesty můžete také zkontrolovat způsobem Docker pomocí docker volume inspect následovaný názvem svazku nebo ID a pohledem do Mountpoint parametr ve výstupu:

[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"
    }
]

Uchycení vazby

Umístění připojení připojení je zcela zřejmé a ještě přímočařejší, protože svazek připojíte přímo z umístění na straně hostitele:

[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

V tomto případě svázaný připojený svazek s názvem test-data bude k dispozici na straně kontejneru jako /var/lib/app/content .

Shrnutí

V tomto rychlém tutoriálu jsem zvolil obecný přístup založený na Linuxu, abych ukázal fyzické umístění obrazů Docker, kontejnerů a svazků umístěných na vašem linuxovém serveru (v tomto případě Ubuntu 20.04) na úrovni hostitele.

Pokud se chcete podělit o jakoukoli zpětnou vazbu, komentář nebo návrh k tomuto přístupu, zanechte prosím své myšlenky v sekci komentářů níže.


Docker
  1. Jaký je rozdíl mezi linuxovým kontejnerem a obrázkem?

  2. Co jsou svazky Docker a jak je používáte?

  3. Rozdíl mezi CMD a ENTRYPOINT v Docker Images

  1. Jak vytvářet, zobrazovat a mazat kontejnery Docker v systému Linux

  2. Co je Docker (a Linux kontejnery?)

  3. Jak používat obrázky, kontejnery a soubory Docker do hloubky

  1. Jak odstranit všechny obrázky, kontejnery, svazky, sítě a nevyužité zdroje Dockeru

  2. Jak zálohovat a obnovovat kontejnery Docker

  3. Jak pozastavit a obnovit kontejnery Docker