Gdje se pohranjuju Dockerove slike? Objašnjeni putovi kontejnera Dockera

Docker je široko prihvaćen i koristi se za pokretanje i skaliranje aplikacija u proizvodnji. Uz to, može se koristiti za brzo pokretanje aplikacija izvršavanjem jedne naredbe Docker.

Tvrtke također ulažu sve više i više napora u poboljšanje razvoja lokalnih i udaljenih Docker kontejnera, što također dolazi s puno prednosti.

Osnovne informacije o svojoj Docker konfiguraciji možete dobiti izvršavanjem:

$ docker info ... Storage Driver: overlay2 Docker Root Dir: /var/lib/docker ... 

Izlaz sadrži informacije o pogonitelju za pohranu i korijenskom direktoriju dockera.

Mjesto pohrane Dockerovih slika i spremnika

Spremnik Dockera sastoji se od mrežnih postavki, volumena i slika. Mjesto Dockerovih datoteka ovisi o vašem operativnom sustavu. Evo pregleda najčešće korištenih operativnih sustava:

  • Ubuntu: /var/lib/docker/
  • Fedora: /var/lib/docker/
  • Debian: /var/lib/docker/
  • Windows: C:\ProgramData\DockerDesktop
  • MacOS: ~/Library/Containers/com.docker.docker/Data/vms/0/

U macOS-u i sustavu Windows, Docker pokreće Linux spremnike u virtualnom okruženju. Stoga postoje neke dodatne stvari koje treba znati.

Docker za Mac

Docker nije izvorno kompatibilan s macOS-om, pa se Hyperkit koristi za pokretanje virtualne slike. Podaci virtualne slike nalaze se u:  

~/Library/Containers/com.docker.docker/Data/vms/0

Unutar virtualne slike, put je zadani Dockerov put /var/lib/docker.

Možete istražiti svoj Docker korijenski direktorij stvaranjem ljuske u virtualnom okruženju:

$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty 

Ovu sesiju možete prekinuti pritiskom na Ctrl + a , a zatim pritiskom na k i y .

Docker za Windows

U sustavu Windows Docker je pomalo podijeljen. Postoje izvorni Windows spremnici koji rade slično Linux spremnicima. Linux spremnici se izvode u minimalnom virtualnom okruženju zasnovanom na Hyper-V-u.

Konfiguracija i virtualna slika za izvršavanje linux slika spremaju se u zadanu korijensku mapu Dockera.

C:\ProgramData\DockerDesktop

Ako pregledate redovite slike, dobit ćete linuks staze poput:

$ docker inspect nginx ... "UpperDir": "/var/lib/docker/overlay2/585...9eb/diff" ... 

Na virtualnu sliku možete se povezati:

docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -i sh

Tamo možete otići na navedeno mjesto:

$ cd /var/lib/docker/overlay2/585...9eb/ $ ls -lah drwx------ 4 root root 4.0K Feb 6 06:56 . drwx------ 13 root root 4.0K Feb 6 09:17 .. drwxr-xr-x 3 root root 4.0K Feb 6 06:56 diff -rw-r--r-- 1 root root 26 Feb 6 06:56 link -rw-r--r-- 1 root root 57 Feb 6 06:56 lower drwx------ 2 root root 4.0K Feb 6 06:56 work

Interna struktura korijenske mape Docker

Unutar /var/lib/dockerse pohranjuju različite informacije. Na primjer, podaci za spremnike, volumene, građevine, mreže i klastere.

$ ls -la /var/lib/docker total 152 drwx--x--x 15 root root 4096 Feb 1 13:09 . drwxr-xr-x 13 root root 4096 Aug 1 2019 .. drwx------ 2 root root 4096 May 20 2019 builder drwx------ 4 root root 4096 May 20 2019 buildkit drwx------ 3 root root 4096 May 20 2019 containerd drwx------ 2 root root 12288 Feb 3 19:35 containers drwx------ 3 root root 4096 May 20 2019 image drwxr-x--- 3 root root 4096 May 20 2019 network drwx------ 6 root root 77824 Feb 3 19:37 overlay2 drwx------ 4 root root 4096 May 20 2019 plugins drwx------ 2 root root 4096 Feb 1 13:09 runtimes drwx------ 2 root root 4096 May 20 2019 swarm drwx------ 2 root root 4096 Feb 3 19:37 tmp drwx------ 2 root root 4096 May 20 2019 trust drwx------ 15 root root 12288 Feb 3 19:35 volumes 

Dockerove slike

Najteži sadržaj obično su slike. Ako koristite zadani sloj upravljačkog programa za pohranu2, tada se vaše Docker slike pohranjuju u /var/lib/docker/overlay2. Tamo možete pronaći različite datoteke koje predstavljaju slojeve Dockerove slike samo za čitanje i sloj na vrhu koji sadrži vaše promjene.

Istražimo sadržaj na primjeru:

$ docker image pull nginx $ docker image inspect nginx [ { "Id": "sha256:207...6e1", "RepoTags": [ "nginx:latest" ], "RepoDigests": [ "[email protected]:ad5...c6f" ], "Parent": "", ... "Architecture": "amd64", "Os": "linux", "Size": 126698063, "VirtualSize": 126698063, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/585...9eb/diff: /var/lib/docker/overlay2/585...9eb/diff", "MergedDir": "/var/lib/docker/overlay2/585...9eb/merged", "UpperDir": "/var/lib/docker/overlay2/585...9eb/diff", "WorkDir": "/var/lib/docker/overlay2/585...9eb/work" }, ... 

LowerDir sadrži samo za čitanje slojeva slike. Sloj čitanja i pisanja koji predstavlja promjene dio je UpperDira . U mom slučaju, mapa NGINX UpperDir sadrži datoteke dnevnika:

$ ls -la /var/lib/docker/overlay2/585...9eb/diff total 8 drwxr-xr-x 2 root root 4096 Feb 2 08:06 . drwxr-xr-x 3 root root 4096 Feb 2 08:06 .. lrwxrwxrwx 1 root root 11 Feb 2 08:06 access.log -> /dev/stdout lrwxrwxrwx 1 root root 11 Feb 2 08:06 error.log -> /dev/stderr

MergedDir predstavlja rezultat UpperDir i LowerDir koja se koristi za pokretanje listi spremnika. WorkDir je interni katalog za overlay2 i treba biti prazan.

Docker volumeni

Moguće je dodati trajno spremište u spremnike kako bi se podaci zadržali dulje nego što spremnik postoji ili kako bi se volumen podijelio s hostom ili s drugim spremnicima. Spremnik se može pokrenuti s volumenom pomoću opcije -v :

$ docker run --name nginx_container -v /var/log nginx

Informacije o povezanoj lokaciji volumena možemo dobiti na sljedeći način:

$ docker inspect nginx_container ... "Mounts": [ { "Type": "volume", "Name": "1e4...d9c", "Source": "/var/lib/docker/volumes/1e4...d9c/_data", "Destination": "/var/log", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], ... 

Referentni direktorij sadrži datoteke s /var/logmjesta spremnika NGINX.

$ ls -lah /var/lib/docker/volumes/1e4...d9c/_data total 88 drwxr-xr-x 4 root root 4.0K Feb 3 21:02 . drwxr-xr-x 3 root root 4.0K Feb 3 21:02 .. drwxr-xr-x 2 root root 4.0K Feb 3 21:02 apt -rw-rw---- 1 root 43 0 Jan 30 00:00 btmp -rw-r--r-- 1 root root 34.7K Feb 2 08:06 dpkg.log -rw-r--r-- 1 root root 3.2K Feb 2 08:06 faillog -rw-rw-r-- 1 root 43 29.1K Feb 2 08:06 lastlog drwxr-xr-x 2 root root 4.0K Feb 3 21:02 nginx -rw-rw-r-- 1 root 43 0 Jan 30 00:00 w 

Očistite prostor koji koristi Docker

Preporučuje se upotreba naredbe Docker za čišćenje neiskorištenih spremnika. Spremnik, mreže, slike i predmemorija gradnje mogu se očistiti izvršavanjem:

$ docker system prune -a

Uz to, neiskorištene sveske možete ukloniti i izvršavanjem:

$ docker volumes prune

Sažetak

Docker je važan dio okruženja i alata mnogih ljudi. Ponekad se Docker osjeća pomalo poput magije rješavajući probleme na vrlo pametan način, a da korisniku ne kaže kako se stvari rade iza kulisa. Ipak, Docker je redoviti alat koji svoje teške dijelove pohranjuje na mjesta koja se mogu otvoriti i promijeniti.

Sometimes, storage can fill up quickly. Therefore, it’s useful to inspect its root folder, but it is not recommended to delete or change any files manually. Instead, the prune commands can be used to free up disk space.

I hope you enjoyed the article. If you like it and feel the need for a round of applause, follow me on Twitter.

I am a co-founder of our revolutionary journey platform called Explore The World. We are a young startup located in Dresden, Germany and will target the German market first. Reach out to me if you have feedback and questions about any topic.

Happy Docker exploring :)

References

  • Docker storagediver documentation

    //docs.docker.com/storage/storagedriver/

  • Documentation Overlay filesystem

    //www.kernel.org/doc/Documentation/filesystems/overlayfs.txt