Docker, overlay2 méret, mit számolok el?

Fórumok

Sziasztok!

Szeretném valahogy megérteni a docker rendszerem overlay2 könyvtárának méretét. A rendszer jól üzemel, bár a konténerekben voltak frissítések, melyek úgyérzem nyomot hagytak ( helyet foglalnak) az overlay2 fájlrendszeren.

Keletkeztek  pl az UniFi konténeren belül nagyobb log, db és backup fájlok, melyek méretét a konténeren belül csökkentettem ( rendszer szinten), de ez az  overlay2 fájlrendszeren mint módosítás látszik. 

3 db docker konténert használok. 

 docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.4.2-docker)

Server:
 Containers: 3
  Running: 3
  Paused: 0
  Stopped: 0
 Images: 6
 Server Version: 20.10.0
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 269548fa27e0089a8b8278fc4fc781d7f65a939b
 runc version: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 4.19.0-13-amd64
 Operating System: Debian GNU/Linux 10 (buster)
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 9.76GiB
 Name: domoticz
 ID: VQ3M:BUF5:FXG5:E5VU:RQGE:3ZKM:YQ34:M5OX:GWBT:RMKB:ABHW:SYR4
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: No swap limit support

 

docker system df

docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          3         3         1.913GB   0B (0%)
Containers      3         3         899.2MB   0B (0%)
Local Volumes   1         1         55B       0B (0%)
Build Cache     0         0         0B        0B

 

docker ps kimenet:

docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED         STATUS                       PORTS                                                                                                  NAMES
d899441daeab   dtv3-8082                   "docker-php-entrypoi…"   6 weeks ago     Up About an hour             0.0.0.0:8082->80/tcp                                                                                   dtv3-8082
781eed61dbda   marthoc/deconz              "/start.sh"              11 months ago   Up About an hour                                                                                                                    deconz
737dfdfae8ca   jacobalberty/unifi:stable   "/usr/local/bin/dock…"   21 months ago   Up About an hour (healthy)   6789/tcp, 8843/tcp, 0.0.0.0:3478->3478/udp, 8880/tcp, 0.0.0.0:8443->8443/tcp, 0.0.0.0:8088->8080/tcp   unifi

 

docker images

docker images
REPOSITORY           TAG       IMAGE ID       CREATED         SIZE
dtv3-8082            latest    e353e0c8d926   6 weeks ago     452MB
marthoc/deconz       latest    81a75d927b89   11 months ago   637MB
jacobalberty/unifi   stable    bb1d35daa7ae   23 months ago   823MB

 

 du -sh /var/lib/docker/overlay2/

 du -sh /var/lib/docker/overlay2/
4,7G    /var/lib/docker/overlay2/

 

du -sch /var/lib/docker/overlay2/*/diff | sort -h

du -sch /var/lib/docker/overlay2/*/diff | sort -h
16K     /var/lib/docker/overlay2/6180707fb9dd2e1c85b886b7b3d79d5ff563c3ea670d6d800ba20810b12968a7/diff
16K     /var/lib/docker/overlay2/b7805353a1b1e599577f00f40abe64d01ab1661ae7cb204cbdc3be60b0b76552/diff
16K     /var/lib/docker/overlay2/f752539e5821ecd0c781bac0e05b4fb3a5c60bde8acff40e487e04bd0b8e6bdd/diff
20K     /var/lib/docker/overlay2/37baa3f111f3e4de863318386b3fe784dc6c5500aa8258c4ece781ce42fe3e60/diff
20K     /var/lib/docker/overlay2/37baa3f111f3e4de863318386b3fe784dc6c5500aa8258c4ece781ce42fe3e60-init/diff
20K     /var/lib/docker/overlay2/6ccf48ea4fdcf4e49551969b606164779dea680c272233ef3cd6328d7092d5e6/diff
20K     /var/lib/docker/overlay2/840f33f2b2b75d906799914fa892e35856c03d9a5189406a87132921b26ed42b/diff
20K     /var/lib/docker/overlay2/943ee59d28d7bccdf4f6a620a4f72e587875038d6eab9bc959331ee05a05a6a4-init/diff
20K     /var/lib/docker/overlay2/a13d37d5d531223ee77012ee520585b3a359722719f4ece026938bc521e48b76/diff
20K     /var/lib/docker/overlay2/bebd136f8b59b7b6ef54baec5fd0ed7f96c7d614c5333993d336f0e0b39cad11/diff
20K     /var/lib/docker/overlay2/d95bfb9cb9f8e6e73e3ad84d5fa9394cb51f651bef61b515f2883eeacfad29a3/diff
20K     /var/lib/docker/overlay2/de8491b325c39e7dec9edfea20bda246f79d7f834384c024c74727ba5f932b0a-init/diff
20K     /var/lib/docker/overlay2/f58c8eab88206c88d039b6304fbec72431a4ee7aa1cb8bfc02e34e281867c7fe/diff
24K     /var/lib/docker/overlay2/6327051f4b19bbc67c608f0932849e0ccf6600f08a90e72aab71e013f3a38e6f/diff
28K     /var/lib/docker/overlay2/78a4ee8528414e7c3aa40a822a6e0ba632cba1aefae2a23d5fa573a9ec2f3035/diff
28K     /var/lib/docker/overlay2/8e0539047d9a91f686b1245a517d639155c7446be9e7b0d343198626febe7f06/diff
32K     /var/lib/docker/overlay2/386f8b4ce1a1c7e3fe034f20240ab8988f9142d3f265807d1469a2aa2381024b/diff
36K     /var/lib/docker/overlay2/19e15611c34bdacee1b8b750d714ccf61d585d220419f01d0af57b658303bbb0/diff
36K     /var/lib/docker/overlay2/bcaba2a0e7fded280300873a83247a2dc64c10e7a354c8845722a1bcd4347e6f/diff
44K     /var/lib/docker/overlay2/259324fc71a0975c207ccd67512bee3e383927280c93070d1ccfdbc866ba4312/diff
44K     /var/lib/docker/overlay2/50cc2c7f21e0119bdc975031816b3f98e05d6e065d9565fffea632c1c87697e6/diff
44K     /var/lib/docker/overlay2/6a12ff9b74858a13903d1544f88452de27efb9c4661c554e02725765dfce0055/diff
84K     /var/lib/docker/overlay2/88e8ba809a1eddda1117826bcc049250173e1bd9f3656e27a038b942dd4c82ed/diff
100K    /var/lib/docker/overlay2/19b2182a17a21ad2407a33da7b8100f7a2a842f6f81eeb6b4ced18200ae82f6f/diff
984K    /var/lib/docker/overlay2/0083cbdebe8970912d94d2c35517c2f6ba4779958ed518401c1f9ee1b61c87c9/diff
2,8M    /var/lib/docker/overlay2/ad7a605814a476147c2bea20263a0a3e25f41fb9c225f37b77fd8649a55f8ff8/diff
6,4M    /var/lib/docker/overlay2/dc6185d4d9785a968f69412be562960ed716a3f141b2dcb4e85adeb06bcafa48/diff
12M     /var/lib/docker/overlay2/856e57df9f5bfc756325fd14fde4f2eb43792f5e8ebbe08d80e46763fc1b9487/diff
22M     /var/lib/docker/overlay2/057f62e90011ac20d81bf053995bfaa0b1ff7e73f4bc85553cc23c9bc54048dc/diff
32M     /var/lib/docker/overlay2/943ee59d28d7bccdf4f6a620a4f72e587875038d6eab9bc959331ee05a05a6a4/diff
39M     /var/lib/docker/overlay2/9c416692ea5e3e1cbfd356baf4b83519739961b475363967f32088bfe1a334c8/diff
44M     /var/lib/docker/overlay2/faf162be06e24303fb6c65b5fb01c50173e2b67c3ee84a74a7ad9696b7f836c6/diff
49M     /var/lib/docker/overlay2/c199cea5835f68b2036c270b6f526ecec020cbd2f2c05162f548284e0b9595de/diff
69M     /var/lib/docker/overlay2/aedb412f6a037431536c0bb534c23ddce908bc8427819d81dbf744798cda1531/diff
76M     /var/lib/docker/overlay2/9d384d0cd040fe089269e54576d52b56c0c3adc714b75e69a24b1338ede77f95/diff
88M     /var/lib/docker/overlay2/9e3ed2b847fc7a89d654213afb1f496162d8088cbafbb9ccad94fdafdac0707b/diff
271M    /var/lib/docker/overlay2/0bd4e06158eaf1c7f9461685dee6a703ce35b6b81f04f3cc04c37ba34d551229/diff
520M    /var/lib/docker/overlay2/de8491b325c39e7dec9edfea20bda246f79d7f834384c024c74727ba5f932b0a/diff
540M    /var/lib/docker/overlay2/02f47ee4b67d04a1309123be4aa578eedf9ae9aea7863a48f263d8c443559d31/diff
755M    /var/lib/docker/overlay2/086b8a0848a6e063ac7976779ca0b23d7a879efaa25c6adeb7b355a282748cbc/diff
2,5G    total

 

du -sch /var/lib/docker/overlay2/*/merged

du -sch /var/lib/docker/overlay2/*/merged
455M    /var/lib/docker/overlay2/37baa3f111f3e4de863318386b3fe784dc6c5500aa8258c4ece781ce42fe3e60/merged
696M    /var/lib/docker/overlay2/943ee59d28d7bccdf4f6a620a4f72e587875038d6eab9bc959331ee05a05a6a4/merged
1,1G    /var/lib/docker/overlay2/de8491b325c39e7dec9edfea20bda246f79d7f834384c024c74727ba5f932b0a/merged
2,2G    total

 

Ez így rendben van? A */diff 2,5 GB, a */merged 2,2 GB, a docker system df: kb 2,8 GB méretű. Olyan mintha 300 MB elveszne valahol :)

A "host"-on  a 9,8 GB-ból  7,3 GB-ot ír használatban a df-h.  Ez a rendszer + docker együtt. Nem igazán értem, hogy a 7.3 GB foglalt hely hogy jön ki.

 

df -h

df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            4,9G     0  4,9G   0% /dev
tmpfs          1000M   22M  978M   3% /run
/dev/sda1       9,8G  7,3G  2,1G  79% /
tmpfs           4,9G     0  4,9G   0% /dev/shm
tmpfs           5,0M  4,0K  5,0M   1% /run/lock
tmpfs           4,9G     0  4,9G   0% /sys/fs/cgroup
tmpfs           4,9G  4,0K  4,9G   1% /tmp
overlay         9,8G  7,3G  2,1G  79% /var/lib/docker/overlay2/943ee59d28d7bccdf4f6a620a4f72e587875038d6eab9bc959331ee05a05a6a4/merged
overlay         9,8G  7,3G  2,1G  79% /var/lib/docker/overlay2/37baa3f111f3e4de863318386b3fe784dc6c5500aa8258c4ece781ce42fe3e60/merged
overlay         9,8G  7,3G  2,1G  79% /var/lib/docker/overlay2/de8491b325c39e7dec9edfea20bda246f79d7f834384c024c74727ba5f932b0a/merged
shm              64M  5,0M   59M   8% /var/lib/docker/containers/781eed61dbda46025dd9e5b18189b61fad91563ff555524414e7954e17f5e6b3/mounts/shm
tmpfs          1000M     0 1000M   0% /run/user/1000

 

Ha összeadom a rendszerben a /var/lib/docker mappa nélkül a fájlokat: 5053 MB-t foglalt területet kapok

du -s / --exclude /var/lib/docker --exclude /proc | sort -h
 

du -s / --exclude /var/lib/docker --exclude /proc | sort -h
5053348 /

A docker mappa tartalma overlay2 és image nélkül:

 du -sh . --exclude overlay2  --exclude image | sort -h

 du -sh . --exclude overlay2  --exclude image | sort -h
1,1M    .

Szóval a fenti 9800 MB tárterületből 5053MB  +1,1 MB, azaz  5054 MB területet foglal a rendszer a docker imagek, konténerek és overlay2 terület nélkül. 

Ha rendszer 7300 MB foglalt területet ír, akkor a docker valóban foglalt részére 2245 MB jutt. Ez kb a merged része a docker történetnek, viszont a docker system 2800 MB-ot ír?

Hol számolok félre?

 

Hozzászólások

Nem lehet, hogy az a 300 M az overlay írható retegében lévő adat? Csak találgatok.

Nem vagyok még dockerben és overlayban nagyon otthon, csak próbálom megérteni amit kérdeztél, és írtál. Nem sikerült még eddig :)

Overlay írható rétegében lévő adat, az az adat ami nincs benne az imageben, illetve azóta módosult. Vagy lehet én értettem félre valamit. Viszont nálam a különbségre nagyobbat ír ( diff) mint a merged-re. A merged, ha jól értelmeztem, az ami valóban akívan van a docker rendszerben. Na most nálam a diff nagyobb mint a merged. Ezek szerint olyan módosítások is  voltak, amik az összméretet végeredményben csökkenteni tudták. Pl töröltem 300 MB adatot?

Ezt nem tudom valahogy felszabadítani? 

Na most nálam a diff nagyobb mint a merged

Ez kb. csak így fordulhat elő a valóságban: diff >= merged

A diff mindent tartalmaz, amit diszken tárol a rendszer.

A merged azt mutatja, ami ebből még látszik a konténerben.

Az aktuális konténer példány read-write (legfelső) rétege kivételével az összes többi réteg read-only.

Minden változtatásnál a read-write rétegbe kerül, amit változtattál, a read-only rétegekben pedig ottmarad a korábbi verzió. Ilyenkor a merged nem fogja tartalmazni a korábbi rétegek tartalmát (hiszen felül lett írva/ki lett törölve), ezért pedig a merged mérete kisebb lesz, mint a diffek összege. Ha semmilyen korábbi rétegben szereplő fájl nem lett törölve/módosítva, akkor a merged mérete pont meg fog egyezni a diffek összegével.

Ezt nem tudom valahogy felszabadítani? 

Hát, új konténer image létrehozása nélkül nem, hiszen a korábbi rétegek read-onlyk, azaz nem lehet módosítani őket.

Általában úgy szokás csinálni a konténer image-eket, hogy ilyen esetek ne történjenek (nem rakunk bele semmit, amit utólag ki akarunk majd szedni belőle).

"felszabaditani" meg ugy lehetha az ember docker save-el egyet es csinal egy imaget, ilyenkor a torolt de meg ott levo file-ok tenyelgesen torlodnek, mivel az output kiirasakor a mergelt filerendszer lesz betar-olva (igy eltunnek a korabbi imageben meg ottlevo de a containerben torolt allomanyok). 

Felesleges image-ed nincs, rendszeres prune van?

3 image-t használok

docker images

docker images
REPOSITORY           TAG       IMAGE ID       CREATED         SIZE
dtv3-8082            latest    e353e0c8d926   6 weeks ago     452MB
marthoc/deconz       latest    81a75d927b89   11 months ago   637MB
jacobalberty/unifi   stable    bb1d35daa7ae   23 months ago   823MB

Korábban ( mai nap) lefuttattam többször is ezeket:

docker system prune                                                                                                                                                                                                                         
docker images prune                                                                                                                                                                                                                         
docker volume prune                                                                                                                                                                                                                         
docker container prune   

docker system prune -a 
docker system prune --volumes 
docker system prune --all --volumes --force   
docker builder prune  
 

Valamint a lokális dockeren kívüli környezetben volt fstrim is.

Dcokerben az overlay2 tárterületen nem tudtam fstrim-et futtatni.

Szerkesztve: 2022. 08. 04., cs – 11:21

A mergedben az image layereinek merged mountja van (maga az 'os' filerendszere), a diff-ben meg ami valtozott ahhoz kepest es semmi mas (azaz a cobtainer working layereben tortent valtozas). 

e jobb lenne ha egy adott containeren belul nezned meg a merged es a diff-et mint igy. Mert itt ebben benne van a fenti diff-ben mindenfele layerek modositasa is nem csak a working layereke (containereke), hanem ha valamit esteleg modositottal az image-hez kepest es akarmeyik containerben.

Ha kimondodttan egy containerben keresed a valaszokat miert az osszes image es osszes containerre futtatod a fenti parancsokat (ami minden layerre vonatkozik)????

Azért az összesre futtattam, mert rendszer szinten véltem felfedezni pár száz mega eltérést ahhoz képest amit mutatott a rendszer, és amit számoltam. Ekkor kezdtem el összeszedni, hogy mi foglal helyet a rendszerben. 

 

"jobb lenne ha egy adott containeren belul nezned meg a merged es a diff-et mint igy"

Ezt hogyan érted? containeren belül hol látom ( hogy láthatnám)  az image-hez képest a változást?

<docker data root>/overlay2/<magic happens here to find the real working layer id of the container :D>/diff

en alatalaban ugy szoktam megkereseni az igazi working layer sha konyvtarat hogy megnezem mikor keletkezett a container (inspect) es ahhoz kepest keresek az overlay2 konyvtarban. Merthogy az overlay konyvtarban levo sha konyvtar neve nem egyezik a docker ps parancs kimenetevel

Itt aztan a diff konyvtarban minden benne van ami valtozas. Ha egy file 0 merettel, akkor azt toroltek, ha mas merettel akkor hozzaadtak.

Biztos van erre valami elbaszott docker magia amugy (egyik elcseszett json-jukban benne lehet, fasz se tudja), de sosem erdekelt :D