Hvor gemmes Docker-billeder? Docker Container Paths Explained

Docker er blevet bredt adopteret og bruges til at køre og skalere applikationer i produktionen. Derudover kan den bruges til at starte applikationer hurtigt ved at udføre en enkelt Docker-kommando.

Virksomhederne investerer også mere og mere i at forbedre udviklingen i lokale og eksterne Docker-containere, hvilket også har mange fordele.

Du kan få de grundlæggende oplysninger om din Docker-konfiguration ved at udføre:

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

Outputtet indeholder oplysninger om din lagerdriver og din docker-rodmappe.

Lagringsplaceringen for Docker-billeder og containere

En Docker-container består af netværksindstillinger, diskenheder og billeder. Placeringen af ​​Docker-filer afhænger af dit operativsystem. Her er en oversigt over de mest anvendte operativsystemer:

  • 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/

I macOS og Windows kører Docker Linux-containere i et virtuelt miljø. Derfor er der nogle yderligere ting at vide.

Docker til Mac

Docker er ikke indbygget kompatibel med macOS, så Hyperkit bruges til at køre et virtuelt billede. Dens virtuelle billeddata findes i:  

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

Inden for det virtuelle billede er stien standard Docker-stien /var/lib/docker.

Du kan undersøge din Docker-rodmappe ved at oprette en shell i det virtuelle miljø:

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

Du kan dræbe denne session ved at trykke på Ctrl + a efterfulgt af at trykke på k og y .

Docker til Windows

På Windows er Docker en smule fraktioneret. Der er oprindelige Windows-containere, der fungerer på samme måde som Linux-containere. Linux-containere køres i et minimalt Hyper-V-baseret virtuelt miljø.

Konfigurationen og det virtuelle billede til at udføre linux-billeder gemmes i standard Docker-rodmappen.

C:\ProgramData\DockerDesktop

Hvis du inspicerer regelmæssige billeder, får du linux-stier som:

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

Du kan oprette forbindelse til det virtuelle billede ved at:

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

Der kan du gå til den henviste placering:

$ 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

Den interne struktur i Docker-rodmappen

Inde /var/lib/dockerer forskellige oplysninger gemt. For eksempel data for containere, mængder, builds, netværk og klynger.

$ 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 

Docker-billeder

Det tungeste indhold er normalt billeder. Hvis du bruger standardlagerdriveren overlay2, gemmes dine Docker-billeder i /var/lib/docker/overlay2. Der kan du finde forskellige filer, der repræsenterer skrivebeskyttede lag af et Docker-billede, og et lag oven på det, der indeholder dine ændringer.

Lad os udforske indholdet ved hjælp af et eksempel:

$ 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" }, ... 

Den LowerDir indeholder den skrivebeskyttede lag i et billede. Læs-skriv-laget, der repræsenterer ændringer, er en del af UpperDir . I mit tilfælde indeholder NGINX UpperDir- mappen logfilerne:

$ 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

Den MergedDir repræsenterer resultatet af UpperDir og LowerDir , der bruges af Docker at køre beholderen. Den WorkDir er en intern mappe for overlay2 og bør være tom.

Docker Volumes

Det er muligt at tilføje en vedvarende butik til containere for at holde data længere end containeren findes eller for at dele volumen med værten eller med andre containere. En container kan startes med et volumen ved hjælp af indstillingen -v :

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

Vi kan få oplysninger om den tilsluttede volumenplacering ved at:

$ 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": "" } ], ... 

Den refererede mappe indeholder filer fra placeringen /var/logaf NGINX-containeren.

$ 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 

Ryd op på plads brugt af Docker

Det anbefales at bruge Docker-kommandoen til at rense ubrugte containere. Container, netværk, billeder og build-cachen kan renses ved at udføre:

$ docker system prune -a

Derudover kan du også fjerne ubrugte diskenheder ved at udføre:

$ docker volumes prune

Resumé

Docker er en vigtig del af mange menneskers miljøer og værktøj. Nogle gange føles Docker lidt som magi ved at løse problemer på en meget smart måde uden at fortælle brugeren, hvordan tingene gøres bag kulisserne. Docker er stadig et almindeligt værktøj, der gemmer sine tunge dele på steder, der kan åbnes og ændres.

Nogle gange kan opbevaring hurtigt fyldes op. Derfor er det nyttigt at inspicere dens rodmappe, men det anbefales ikke at slette eller ændre filer manuelt. I stedet kan beskærekommandoer bruges til at frigøre diskplads.

Jeg håber du nød artiklen. Hvis du kan lide det og føler behov for en bifald, så følg mig på Twitter.

Jeg er medstifter af vores revolutionerende rejseplatform kaldet Explore The World. Vi er en ung startup i Dresden, Tyskland og vil først målrette mod det tyske marked. Kontakt mig, hvis du har feedback og spørgsmål om et emne.

Happy Docker udforsker :)

Referencer

  • Dokumentation til Docker-lagerdiver

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

  • Dokumentation Overlay filsystem

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