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

Jak zkontrolovat využití místa na disku pro obrazy, kontejnery a svazky Dockeru

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 Bandyopadhyay

Pomocí 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


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

  2. Jak exportovat a importovat kontejnery Docker

  3. Jak zkontrolovat stav a místo využívané obrázky a kontejnery

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

  2. Jak zálohovat a obnovovat kontejnery Docker

  3. Jak pozastavit a obnovit kontejnery Docker

  1. Jak najít volné místo na disku a analyzovat využití disku?

  2. Jak zkontrolovat využití disku pomocí adresáře a využití šířky pásma?

  3. Jak nainstalovat Docker a spustit kontejnery Docker v Ubuntu