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?
Ha van egy dockerfile ami külön sorban csinál pl:
apt update
apt upgrade
apt install
apt cache clean
dolgokat, annak pont ilyen a végeredménye. Durván egy sor egy réteg, a törlés a merged -ből hiányozni fog, de attól még a lentebbi rétegek tartalmazzák
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).
Igen, lehetne, de ez annyira "osztályidegen", hogy ilyen nem csinálunk. Egyszerűen azért nem csinálunk ilyet, mert a read-only image-et inkább újragyártjuk from scratch, egyszerűbb, tisztább, szárazabb érzés.
teljesen egyetertek, beroffentjuk a ci/cd-t es kesz :D
Felesleges image-ed nincs, rendszeres prune van?
3 image-t használok
docker images
Korábban ( mai nap) lefuttattam többször is ezeket:
Valamint a lokális dockeren kívüli környezetben volt fstrim is.
Dcokerben az overlay2 tárterületen nem tudtam fstrim-et futtatni.
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