Zajímá vás, kolik místa zabírá Docker ve vašem systému Linux?
Primárně jsou všechny obrázky, kontejnery a další související entity Docker umístěny na /var/lib/docker
. Můžete zkontrolovat velikost tohoto adresáře a získat celkové místo na disku používaném Dockerem:
[email protected]:~$ sudo du -sh /var/lib/docker
4.9G /var/lib/docker
Ale to není příliš popisné a možná budete muset jít dále v tomto adresáři, abyste viděli, která komponenta používá jaké místo.
Naštěstí Docker poskytl nástroje pro získání těchto informací užitečnějším způsobem.
Kontrola využití místa na disku Dockeru [The Docker Way]
Nejzákladnější, "Docker" způsob, jak zjistit, kolik místa zabírají obrázky, kontejnery, místní svazky nebo mezipaměť sestavení, je:
docker system df
Když spustíte tento příkaz (použijte sudo
v případě potřeby), získáte všechny informace o využití disku seskupené podle součástí Docker.
[email protected]:~$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 4 4 1.065GB 0B (0%)
Containers 4 4 5.705kB 0B (0%)
Local Volumes 7 7 1.108GB 0B (0%)
Build Cache 0 0 0B 0B
To je rozhodně lepší než se dívat na celkovou velikost /var/lib/docker. Můžete vidět, kolik místa zabírají obrázky, kontejnery a svazky.
To však stále poskytuje jasný obraz, na kterém obrázek nebo objem zabírá více místa.
Ve skutečnosti ano. docker system df
příkaz má podrobnou volbu -v
který poskytuje všechny tyto podrobnosti.
docker system df -v
Zde je podrobný výstup:
[email protected]:~$ docker system df -v
Images space usage:
REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS
ghost 4.32.0 b40265427368 8 weeks ago 468.8MB 0B 468.8MB 1
jrcs/letsencrypt-nginx-proxy-companion latest 037cc4751b5a 13 months ago 24.35MB 0B 24.35MB 1
jwilder/nginx-proxy latest 509ff2fb81dd 15 months ago 165MB 0B 165MB 1
mariadb 10.5.3 f5d2bcaf057b 20 months ago 407MB 0B 407MB 1
Containers space usage:
CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED STATUS NAMES
899cc90e85d9 ghost:4.32.0 "docker-entrypoint.s…" 1 0B 8 weeks ago Up 8 weeks ghost_ghost_6
17b58fdafbce jrcs/letsencrypt-nginx-proxy-companion "/bin/bash /app/entr…" 4 571B 3 months ago Up 2 months letsencrypt-proxy-companion
58f99f46ee03 jwilder/nginx-proxy "/app/docker-entrypo…" 5 5.13kB 3 months ago Up 2 months jwilder-nginx-proxy
fb907286b60e mariadb:10.5.3 "docker-entrypoint.s…" 1 2B 3 months ago Up 2 months ghost_db_1
Local Volumes space usage:
VOLUME NAME LINKS SIZE
ghostdb 1 434.7MB
jwilder-nginx-with-ssl_acme 2 36.09kB
jwilder-nginx-with-ssl_certs 2 25.12kB
jwilder-nginx-with-ssl_dhparam 1 1.525kB
jwilder-nginx-with-ssl_html 2 1.106kB
jwilder-nginx-with-ssl_vhost 2 556B
ghost 1 674MB
Build cache usage: 0B
CACHE ID CACHE TYPE SIZE CREATED LAST USED USAGE SHARED
To je hezké, že? Existují i jiné způsoby.
Kontrola velikostí obrázků dockeru
Pokud chcete pouze vidět obrázky Docker a jejich velikosti, můžete také použít tento příkaz:
docker image ls
Uvádí všechny obrázky Docker ve vašem systému s několika podrobnostmi, které zahrnují velikost:
[email protected]:~$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest beae173ccac6 6 weeks ago 1.24MB
ubuntu latest fb52e22af1b0 5 months ago 72.8MB
alpine latest 49f356fa4513 10 months ago 5.61MB
hello-world latest d1165f221234 11 months ago 13.3kB
Kontrola velikostí běžících kontejnerů
Podobně, pokud chcete znát velikost spuštěných kontejnerů Docker, můžete použít příkaz docker ps:
docker ps --size
Měli byste vidět sloupec SIZE přidaný do výstupu příkazu:
[email protected]:~$ docker ps --size
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
1171dcfb7e06 alpine "sleep 10" 10 months ago Up 9 seconds always-policy 0B (virtual 5.61MB)
Všimli jste si, jak je napsáno 0B a pak virtuálních 5,61 MB? Virtuální velikost zahrnuje sdílený základní obrázek.
Vraťme se k linuxovému přístupu konkrétněji, s obrázkem a kontejnerem Alpine jako praktickým příkladem.
Používání standardních příkazů Linuxu k analýze využití místa na disku Docker
Kdykoli použijete docker pull
nebo spusťte docker-compose up -d
pro přípravu spouštění aplikací takto hledáte využití prostoru pro obrázky, ve skutečnosti uložené na serveru Ubuntu 20.04:
sudo du -sh /var/lib/docker/overlay2/<hash-named-directory>/
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í využití disku s obrazem
Pokud hledáte umístění konkrétních obrázků, můžete pro vytažený obrázek použít příkaz Docker inspect. Ř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:
$ 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"
},
...
Na základě výše uvedených informací můžete vidět, že (zmíněno dříve v du
syntaxe příkazu) v tomto případě je 64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
.
Zde můžete spustit následující příkaz, abyste odhalili množství místa, které obraz Alpine využívá:
[email protected]:~$ sudo du -sh /var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
6.0M /var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
Podobně 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í využití disku kontejneru
Pokud hledáte umístění konkrétních kontejnerů, můžete opět použít inspect
příkaz na Dockeru pro běžící kontejner. Řekněme například, že jsem spustil kontejner alpine pomocí docker run -ti -d alpine
. Když spustíte docker ps
, uvidíte, že běží:
$ 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:
$ 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
. Tato místa jsou místa, kde jsou data kontejneru fyzicky uložena ve vašem hostitelském systému, stejně jako jste to viděli u obrázků:
...
"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"
},
...
Nyní můžete použít du
příkaz znovu:
[email protected]:~$ sudo du -sh /var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3
32K /var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3
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/
Proto můžete spustit následující příkaz, abyste zjistili celkové využití místa na disku svazku Docker ve vašem systému:
avimanyu @iborg-desktop:~$ sudo du -sh /var/lib/docker/volumes/
60K /var/lib/docker/volumes/
Využití disku konkrétního svazku
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. Řekněme například, že jsem spustil kontejner alpine pomocí následujícího příkazu s objemem:
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í:
$ docker exec alpine-container sh -c "touch /var/lib/app/content/test.md"
Ověřte, zda byl soubor skutečně vytvořen:
$ 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:
$ 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:
$ 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.
Můžete tedy použít du
příkaz zde znovu pro konkrétní svazky!:
[email protected]:~$ sudo du -sh /var/lib/docker/volumes/test-data/_data
4.0K /var/lib/docker/volumes/test-data/_data
Vždy si nezapomeňte poznamenat název svazku pokaždé, když chcete zjistit, kolik místa svazek zabírá.
Uchycení vazby
Toto je jediná výjimka v Dockeru, kde musíte ke sledování využití místa na disku použít linuxový přístup. Zároveň je vždy vhodnější nejprve zastavit běžící kontejnery.
$ mkdir /home/avimanyu/test-data
$ 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
.
[email protected]:~$ sudo du -sh /home/avimanyu/test-data
4.0K /home/avimanyu/test-data
Totéž můžete otestovat i uvnitř kontejneru:
[email protected]:~$ sudo docker exec -ti alpine-container sh
/ # du -sh /var/lib/app/content
4.0K /var/lib/app/content
Jak můžete vidět, obě výše uvedené velikosti jsou stejné, protože se ve skutečnosti jedná o připojení k připojení.
Protokoly Docker na hostiteli jsou vždy uloženy ve svazcích. Pomocí způsobu popsaného v této části mohou uživatelé také procházet a zjistit to tak, že se podívají na využití místa na disku svazky dockeru. To se liší od aplikace k aplikaci a umístění souborů protokolu ve svazcích aplikace.
Bonusové tipy
Na základě toho, co jste se až dosud naučili, můžete také použít následující příkaz k načtení využití disku obrázky a kontejnery dohromady:
sudo du -sh /var/lib/docker/overlay2
Protokoly Docker na hostiteli jsou vždy uloženy ve svazcích. Obvykle velký objem Dockeru by s největší pravděpodobností naznačoval, že se protokoly hromadí a jsou spravovány neefektivně.
Jak zkontrolovat protokoly Dockeru [uložené nebo v reálném čase] Prozkoumejte a naučte se některé zajímavé způsoby, jak usnadnit správu protokolů na Dockeru. Příručka pro LinuxAvimanyu BandyopadhyayPomocí postupu popsaného v části tohoto článku o svazcích mohou uživatelé také procházet a zmírňovat to tím, že se podívají na využití místa na disku svazků ukotvitelných jednotek. To se liší od aplikace k aplikaci a umístění souborů protokolu ve svazcích aplikace.
Shrnutí
V tomto tutoriálu jsem použil obecný přístup založený na Linuxu, abych vám ukázal, jak zjistit obsazenost místa na disku obrazů, kontejnerů a svazků Docker umístěných na vašem linuxovém serveru na úrovni hostitele. Také jste se naučili, jak to udělat preferovaným způsobem (Docker).
Pokud se chcete podělit o jakoukoli zpětnou vazbu, komentář nebo návrh k tomuto přístupu, zanechte své myšlenky v sekci komentářů níže