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.
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.